Кратко
СкопированоЛюбой HTML-элемент сам по себе по высоте равен нулю. Обычно элементы подстраиваются по высоте под то количество контента, которое лежит у него внутри. Но что делать, если дизайнер придумал иначе, или если внутри вообще ничего нет?
При помощи свойства height
можно задать высоту любому блочному (block) или строчно-блочному (inline-block) элементу. Высоту можно задавать как в абсолютных единицах (пикселях px
) так и в относительных (проценты, vh
, vmin
, rem
и так далее).
Помимо фиксированной высоты мы можем задать минимальную высоту элемента — min
. В этом случае элемент сможет растягиваться на большую высоту, если того требует контент, размещённый внутри, но никогда не сожмётся по высоте меньше, чем указано в свойстве min
.
Для максимальной высоты мы пишем свойство max
. И тогда элемент будет иметь возможность растягиваться по высоте до тех пор, пока не достигнет размера, указанного в свойстве max
. И дальше не растянется ни на пиксель.
Пример
Скопировано<div class="container"> <div class="item"></div></div>
<div class="container"> <div class="item"></div> </div>
.container { /* высота родителя */ height: 150px; padding: 25px; background-color: #AFC9DA;}.item { /* высота вложенного блока */ height: 50px; margin: 0 10px; background-color: #FFFFFF;}
.container { /* высота родителя */ height: 150px; padding: 25px; background-color: #AFC9DA; } .item { /* высота вложенного блока */ height: 50px; margin: 0 10px; background-color: #FFFFFF; }
Поскольку оба блока — .container
и .item
— пустые, в них нет контента, то без стилей их высота будет равна нулю. Мы изменили это, задав элементу .container
высоту 150px
, а элементу .item
высоту 50px
.
Добавим контент в элемент .item
:
Из-за фиксированной высоты контент вываливается из блока. Как можно это исправить? Заменить height
на min
!
.item { /* Меняем фиксированную высоту на минимальную */ min-height: 50px; margin: 0 10px; background-color: #FFFFFF;}
.item { /* Меняем фиксированную высоту на минимальную */ min-height: 50px; margin: 0 10px; background-color: #FFFFFF; }
Теперь, если контента внутри не будет, то высота блока будет равна 50px
, но как только появится контент — элемент растянется по высоте так, чтобы уместить в себе весь контент!
Как понять
СкопированоСвойство height
даёт возможность менять высоту любого блока на своё усмотрение.
Как пишется
СкопированоПишем свойство height
для фиксированной высоты, min
для минимальной высоты и max
для максимальной высоты.
Для элемента можно написать только одно из них, два или все три сразу, если это нужно для решения конкретной задачи.
В качестве значения пишем число, а за ним без пробела единицу измерения: px
, %
, vh
, rem
, em
или любую другую единицу измерения, доступную в вебе.
div { height: 10px; min-height: 100%; max-height: 100vh;}
div { height: 10px; min-height: 100%; max-height: 100vh; }
Подсказки
Скопировано💡 Свойство высоты не наследуется.
💡 По умолчанию задаётся значение auto
.
Это ключевое слово бывает полезно, когда нужно сбросить высоту, заданную ранее. Например, оно пригодится при доработке сайта, к исходным стилям которого нет доступа.
Стили, до которых нет доступа с фиксированной высотой:
.container { height: 150px;}
.container { height: 150px; }
Твои стили, где перезаписывается предыдущее значение: теперь высота подстраивается под контент.
.container { height: auto;}
.container { height: auto; }
Также оно может пригодится при адаптивной вёрстке.
💡 Не задавайте фиксированную высоту блокам, в которых есть контент. Если контента станет больше, то блок не растянется и контент из него выпадет. Не надо так. Если без высоты никак не обойтись, то используйте min
.
💡 Строчные элементы не реагируют на height
. Хотите изменить высоту? Меняйте элемент со строчного (inline
) на блочный (block
) или строчно-блочный (inline
)!
💡 Пишете height
и ничего не работает? Помните, что высота в процентах рассчитывается от высоты родителя. И сработает, только если у родителя задана эта самая высота.
Отношения родительский-дочерний элемент проще объяснить на примере.
<div class="parent"> <div class="child child-1"> <div class="grandchild"></div> </div> <div class="child"></div> <div class="child"></div></div>
<div class="parent"> <div class="child child-1"> <div class="grandchild"></div> </div> <div class="child"></div> <div class="child"></div> </div>
В примере выше элемент с классом parent
является родительским для элементов с классом child
. Они, в свою очередь, будут называться дочерними по отношению к элементу с классом parent
.
Для элемента с классом grandchild
родительским будет элемент с классом child
.
Применительно к нашей ситуации элемент grandchild
будет наследовать свою высоту от элемента child
.
На практике
Скопированосоветует Скопировано
🛠 Чаще всего не требуется задавать фиксированную высоту блокам с контентом. Можно обойтись внутренними отступами (padding
).
Вернёмся к примеру, который разбирали выше. Можно совсем убрать свойство height
и заменить его на padding
. Теперь, если контента внутри блока нет, то внутренние отступы сверху (25 пикселей) и снизу (25 пикселей) будут растягивать элемент на 50 пикселей.
Как только добавится контент, блок растянется, не произойдёт никакого выпадения контента, потому что не задана фиксированная высота. От верхнего и нижнего краёв контента до верхнего или нижнего краёв блока соответственно будут отступы в 25 пикселей.
Чтобы родительский блок .container
тоже подстраивался под размеры контента, можно:
- Заменить фиксированную высоту на минимальную:
min
.- height : 150px
- Убрать высоту совсем и заменить её на внутренние отступы (
padding
). Этот вариант подойдёт, если не принципиально сохранить высоту 150 пикселей.
🛠 Но есть несколько ситуаций, в которых без высоты никак.
- В блоке нет контента. Он декоративный. Например, квадрат. Задаём одинаковые высоту и ширину. Profit!
- Первый экран сайта. Обычно дизайнеры хотят, чтобы первый экран всегда был по высоте не больше и не меньше высоты экрана пользователя. В этом случае поможет
height
. Не забудь подстраховаться и задать минимальную высоту блоку. Например:: 100vh min
. Никогда нельзя быть уверенным, что высоты экрана пользователя достаточно для того, чтобы уместился весь важный контент.- height : 350px
🛠 В реальных задачах крайне редко требуется задавать высоту в относительных единицах rem
и em
. Эти единицы завязаны на размере шрифта. Рассчитывать высоту блока от размера текста почти никогда не требуется.
Но другие относительные единицы: vh
, vw
, а также vmin
и vmax
— будут встречаться вам гораздо чаще. Рассчитывать высоту элемента от высоты или ширины экрана пользователя бывает очень удобно.