
Для создания интерфейсов, где блок занимает всю высоту окна браузера, чаще всего используют свойства height и min-height. Значение 100vh позволяет элементу точно соответствовать высоте видимой области, однако при наличии адресной строки на мобильных устройствах реальная видимая область может отличаться.
Flexbox предлагает более гибкий подход: установка контейнера с display: flex и flex-direction: column позволяет дочерним элементам автоматически растягиваться на доступную высоту с помощью flex: 1. Этот метод сохраняет адаптивность при изменении размеров окна.
CSS Grid позволяет задавать строки с 1fr для растяжения блока на всю высоту, что удобно при сложной верстке с несколькими элементами. Использование min-height: 100vh вместе с grid гарантирует, что блок не станет меньше высоты окна даже при небольшом содержимом.
При работе с полной высотой важно учитывать margin и padding родительских элементов, так как они могут уменьшать видимую высоту блока. Для точного контроля используют box-sizing: border-box, чтобы внутренние отступы не влияли на итоговую высоту.
Совмещение растяжения с абсолютным или относительным позиционированием позволяет закреплять блоки в нужных местах страницы, сохраняя полное заполнение по вертикали. Это особенно актуально для фоновых элементов и интерфейсных панелей.
Использование свойства height: 100vh

Свойство height: 100vh задаёт высоту элемента равной 100% высоты видимой области окна браузера. 1vh соответствует 1% высоты окна.
Применение:
- Полноэкранные секции: удобно для лендингов и слайдеров.
- Фоновое изображение или видео: элемент всегда занимает весь экран, независимо от контента.
- Вертикальное центрирование: позволяет легко выравнивать контент по центру с помощью Flexbox.
Пример базового кода:
.fullscreen-section {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
Рекомендации при использовании:
- На мобильных устройствах
100vhможет включать область с адресной строкой браузера, что изменяет реальную высоту. Используйте медиазапросы или JavaScript для корректировки. - Сочетайте с
min-heightдля предотвращения сжатия при динамическом контенте. - Для секций с прокруткой используйте
overflow: auto;чтобы контент не выходил за границы экрана. - Не используйте
height: 100%без установки высоты родителя, иначе эффект не сработает.
Альтернатива: min-height: 100vh позволяет секции расширяться при увеличении контента, сохраняя минимальную высоту экрана.
Применение min-height для адаптивных блоков

Свойство min-height задаёт минимальную высоту элемента, позволяя ему увеличиваться при добавлении контента, сохраняя при этом базовую высоту.
Применение:
- Секции, которые должны занимать весь экран, но могут расширяться при увеличении контента.
- Карточки и блоки с динамическим текстом, чтобы избежать переполнения или сжатия.
- Фоновая графика и видео, когда необходимо минимальное покрытие экрана, без фиксированной высоты.
Пример кода:
.adaptive-section {
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
}
Рекомендации:
- Использовать
min-height: 100vhдля основных секций страниц, чтобы блок всегда занимал минимум высоту экрана. - При комбинировании с Flexbox можно вертикально центрировать контент независимо от высоты блока.
- Для мобильных устройств проверять, что
min-heightне вызывает горизонтальной прокрутки из-за внутренних отступов. - Для блоков с динамическим контентом лучше использовать
min-height, а неheight, чтобы сохранялась адаптивность.
Дополнительно можно комбинировать min-height с медиазапросами, задавая разные минимальные высоты для разных экранов:
@media (max-width: 768px) {
.adaptive-section {
min-height: 80vh;
}
}
Растяжение блока через flex-контейнер

Flexbox позволяет растянуть блок на всю высоту родителя с помощью комбинации свойств display: flex и flex-direction.
Применение:
- Основные секции страницы, которые должны занимать всю высоту окна.
- Вертикально центрированный контент с адаптивной высотой.
- Блоки с несколькими дочерними элементами, когда требуется равномерное распределение по высоте.
Базовый пример:
.container {
display: flex;
flex-direction: column;
height: 100vh;
}
.full-height-block {
flex: 1;
}
Рекомендации:
- Для вертикального растяжения используйте
flex-direction: column, для горизонтального –flex-direction: row. - Свойство
flex: 1заставляет элемент заполнять доступное пространство родителя. - Для нескольких блоков с равной высотой применяйте
flex: 1ко всем дочерним элементам. - При комбинировании с
min-heightможно гарантировать минимальную высоту блока на мобильных устройствах. - Используйте
overflow: autoдля прокрутки содержимого внутри растянутого блока без выхода за границы экрана.
Использование grid для полной высоты

CSS Grid позволяет распределять пространство родителя и растягивать блоки на всю высоту контейнера с точным управлением строками и столбцами.
Применение:
- Основные секции страницы с равномерным распределением контента по вертикали.
- Комбинация нескольких блоков одинаковой или адаптивной высоты.
- Создание макета, где один блок растягивается на всю высоту, а соседние занимают минимальное пространство.
Базовый пример:
.grid-container {
display: grid;
grid-template-rows: 1fr;
height: 100vh;
}
.full-height-block {
background-color: #f0f0f0;
}
Рекомендации:
- Используйте
grid-template-rows: 1frдля растягивания одной строки на всю высоту родителя. - Для нескольких строк можно применять
frединицы, чтобы распределять пространство пропорционально. - Комбинируйте
minmax(min, 1fr)для адаптивных блоков с минимальной и растягивающейся высотой. - Для блоков с прокручиваемым контентом используйте
overflow: auto, чтобы содержимое не выходило за границы строки. - Grid хорошо сочетается с медиазапросами, позволяя изменять высоту и структуру строк на разных экранах.
Учет отступов и margin при растяжении

При растяжении блока на всю высоту страницы важно учитывать внутренние (padding) и внешние (margin) отступы, чтобы блок не превышал размеры окна.
Рекомендации:
- Использовать
box-sizing: border-boxдля включения padding и border в общую высоту элемента. - При отрицательных margin или больших отступах блок может выходить за пределы видимой области, особенно на мобильных устройствах.
- Для точного растяжения учитывать сумму верхнего и нижнего padding и margin.
Пример корректировки высоты с учетом отступов:
| Элемент | Высота блока | Padding | Margin | Итоговая высота |
|---|---|---|---|---|
| .full-height | 100vh | 20px сверху и снизу | 10px сверху и снизу | 100vh + 60px |
Решение:
- Использовать
height: calc(100vh - 60px), если суммарные padding и margin составляют 60px. - При flex или grid можно применять
flex: 1или1frдля дочерних блоков, минимизируя влияние margin на общую высоту.
Совмещение с позиционированием absolute и relative

Для растяжения блока на всю высоту страницы можно использовать комбинацию position: relative у родителя и position: absolute у дочернего элемента. Это позволяет точно контролировать размеры и расположение блока независимо от потока документа.
Применение:
- Фоновый блок, занимающий весь экран, с контентом поверх него.
- Секции с фиксированными элементами, которые должны растягиваться по высоте родителя.
- Попапы и модальные окна, которые должны покрывать весь экран.
Пример кода:
.container {
position: relative;
height: 100vh;
}
.full-height-block {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
Рекомендации:
- Обязательно задавать
position: relativeродителю, иначе абсолютное позиционирование привяжется к ближайшему предку с позиционированием или к окну. - Используйте
overflow: autoдля прокручиваемого контента внутри абсолютного блока. - Для адаптивного дизайна комбинируйте
height: 100%иheight: 100vhс медиазапросами, чтобы избежать проблем на мобильных устройствах. - При использовании нескольких абсолютных блоков учитывайте порядок в DOM, чтобы избежать перекрытия нежелательных элементов.
Решение проблем с overflow и прокруткой

При растяжении блока на всю высоту страницы часто возникает переполнение контента, особенно при динамических данных или фиксированных отступах. Управление свойством overflow позволяет контролировать прокрутку и предотвращает выход элементов за границы блока.
Рекомендации:
- Используйте
overflow: autoдля блоков с потенциально большим количеством контента. Появится вертикальная прокрутка только при необходимости. overflow: scrollпринудительно добавляет прокрутку независимо от размера содержимого.overflow: hiddenскрывает лишний контент, но может обрезать важные элементы.- Комбинируйте с
box-sizing: border-box, чтобы padding и border не увеличивали высоту блока сверх 100vh.
Пример применения:
.full-height-section {
height: 100vh;
overflow-y: auto;
box-sizing: border-box;
padding: 20px;
}
Дополнительные рекомендации:
- Для flex-блоков используйте
flex: 1 1 autoиoverflow: auto, чтобы дочерние элементы растягивались и при этом оставалась прокрутка. - При grid-макетах добавляйте
min-height: 0для ячеек, чтобы overflow корректно работал внутри строки сfrединицами. - На мобильных устройствах проверяйте поведение при появлении виртуальной клавиатуры – иногда блоки растягиваются больше видимой области.
