css - минимальная высота по количеству строк
Описание проблемы:
Я уже предполагаю ответ на свой вопрос, но надеюсь, что кто-то поделится интересным решением.
Мне нужно задать минимальную высоту для 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 ответ(ов)
В 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
для задания минимальной высоты элементов.
Чтобы достичь этого, я использовал 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 и правильной настройки высоты внутренних элементов.
Я не знаю, зачем вам это нужно, но вы можете зафиксировать высоту и ширину div-класса в зависимости от размера шрифта, который собираетесь использовать. Например, если ваш размер шрифта — 10px, и вы собираетесь использовать отступ в 10px, установите высоту div на 50px. Затем добавьте margin-bottom к этим div, и, как мне кажется, у вас все получится!
"Как сделать div на 100% высоты окна браузера"
Как задать высоту body равной 100% высоты браузера?
Задать высоту div в оставшееся пространство с помощью CSS при неизвестной высоте div'ов сверху и снизу
Установить фиксированную ширину столбца таблицы независимо от количества текста в ячейках?
Как сделать перенос строки с помощью CSS, не используя <br />?