Кратко
Секция статьи "Кратко"Любой 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
— будут встречаться вам гораздо чаще. Рассчитывать высоту элемента от высоты или ширины экрана пользователя бывает очень удобно.