0

css - минимальная высота по количеству строк

17

Описание проблемы:

Я уже предполагаю ответ на свой вопрос, но надеюсь, что кто-то поделится интересным решением.

Мне нужно задать минимальную высоту для DIV, но не в пикселях или процентах. (Знаю, это звучит странно, но это необходимо для совместимости и адаптивности.)

В общем, я хочу задать высоту по количеству строк.

У меня есть сетка из DIV, и элементы внутри них не фиксированные. Один элемент может занимать 3 строки, а следующий — всего 2 или 1. Это нарушает компоновку.

То, что мне нужно, выглядит так:

=====================      =====================      =====================
Lorem ipsum dolor sit      Lorem ipsum dolor sit      Lorem ipsum dolor sit 
amet, consectetur          amet, consectetur          amet, consectetur
adipiscing elit.
=====================      =====================      =====================

=====================      =====================      =====================
Lorem ipsum dolor sit      Lorem ipsum dolor sit      Lorem ipsum dolor sit 
amet, consectetur          amet, consectetur 
                           adipiscing elit.
=====================      =====================      =====================

А вот так мне не нужно:

=====================      =====================      =====================
Lorem ipsum dolor sit      Lorem ipsum dolor sit      Lorem ipsum dolor sit 
amet, consectetur          amet, consectetur          amet, consectetur
adipiscing elit.           =====================      =====================
=====================
                           =====================      =====================
=====================      Lorem ipsum dolor sit      Lorem ipsum dolor sit
Lorem ipsum dolor sit      amet, consectetur          =====================
amet, consectetur          =====================  
adipiscing elit.             
===================== 

Можно ли добиться такого результата, указав, например, "я хочу 3 строки"? (В отличие от пикселей, процентов или em?)

Редактирование I

После комментариев:

На самом деле, мне нужно что-то вроде элементов формы, таких как INPUT или TEXTAREA, где вы можете просто задать высоту и ширину в строках/символах!

<TEXTAREA NAME=string, ROWS=n, COLS=n> </TEXTAREA>

Трудно поверить, что никто не придумал подобное решение, и мы все вынуждены мучиться с расчетами в PX/em/% и подобным.

3 ответ(ов)

0

В 2024 году да, вы можете использовать min-height: 1lh;.

lh обозначает высоту строки: 1lh соответствует одной строке, 3lh — трем строкам.

Высота строки изменяется в зависимости от размера шрифта.

Поддержка в браузерах улучшается: вы можете ознакомиться с информацией здесь.

Вот пример:

.one-line {
  min-height: 1lh;
  background: cyan;
  color: black;
}

.three-lines {
  min-height: 3lh;
  background: blue;
  color: white;
}

.font-size-sm {
  font-size: 16px;
}

.font-size-lg {
  font-size: 32px;
}
<div class="one-line font-size-sm">1 строка маленький шрифт</div>
<div class="three-lines font-size-sm">3 строки маленький шрифт</div>

<div class="one-line font-size-lg">1 строка большой шрифт</div>
<div class="three-lines font-size-lg">3 строки большой шрифт</div>

Таким образом, вы можете использовать единицу измерения lh для задания минимальной высоты элементов.

0

Чтобы достичь этого, я использовал flexbox и min-height.

Поместите каждый из ваших div элементов в контейнер flexbox, чтобы они имели одинаковую высоту и адаптировались под разные размеры экрана (т.е. используйте точки останова, wrap в flexbox и min-width, чтобы минимизировать вероятность появления более чем 3 строк текста). Затем для каждого из внутренних элементов установите значения min-height и line-height, как предложил @o.v. Значение min-height должно равняться font-size умноженному на множитель line-height.

Мне нужно было, чтобы внутренние абзацы были как минимум 2 строки в высоту (существует высокая вероятность, что они будут содержать 1 или 2 строки текста, и очень низкая вероятность, что они будут содержать более 2 строк текста), поэтому я пришел к следующему:

HTML

<div class="flex-container">
  <div>
    <p>Lorem ipsum...</p>
    <p>Lorem ipsum...</p>
  </div>
  <div>
    <p>Lorem ipsum...</p>
    <p>Lorem ipsum...</p>
  </div>
</div>

CSS

div.flex-container {
  display: flex;
}
div.flex-container p {
  font-size: 1em;
  line-height: 1.125; // По умолчанию 1.2, но может варьироваться в зависимости от браузера
  min-height: 2.25em; // 2 * 1em * 1.125
                      // (количество строк) * (размер шрифта) * (множитель line-height)
}

Таким образом, вы сможете добиться нужного вам результата с использованием flexbox и правильной настройки высоты внутренних элементов.

0

Я не знаю, зачем вам это нужно, но вы можете зафиксировать высоту и ширину div-класса в зависимости от размера шрифта, который собираетесь использовать. Например, если ваш размер шрифта — 10px, и вы собираетесь использовать отступ в 10px, установите высоту div на 50px. Затем добавьте margin-bottom к этим div, и, как мне кажется, у вас все получится!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь