Содержание статьи

При создании интерфейсов часто требуется, чтобы элемент занимал всю доступную высоту экрана, независимо от содержания. Например, это нужно для стартовых экранов, всплывающих окон или макетов с минималистичным дизайном.
Использование свойства height: 100vh для растягивания блока

Единица измерения vh обозначает процент от высоты видимой области окна браузера. Значение 100vh делает блок равным по высоте экрану, независимо от содержимого страницы. Это решение подходит для полноэкранных секций, фонов или стартовых экранов.
Чтобы применить его, достаточно задать в CSS: height: 100vh;. Браузер автоматически рассчитает высоту элемента, основываясь на текущем размере окна. При прокрутке или изменении масштаба блок сохранит пропорции до обновления высоты.
На мобильных устройствах возможны искажения из-за динамических панелей браузера. Для стабильного отображения используют JavaScript для пересчёта высоты: element.style.height = window.innerHeight + ‘px’. Такое решение гарантирует корректную адаптацию при изменении ориентации экрана или вызове клавиатуры.
В ситуациях, где блок должен растягиваться на всю высоту без учёта системных панелей, допустимо комбинировать height: 100vh с функцией calc(), например: height: calc(100vh — 20px). Это позволяет учесть отступы и сохранить точность отображения.
Свойство 100vh удобно при разработке полноэкранных секций, но требует проверки в разных браузерах, особенно на мобильных устройствах. Такой подход обеспечивает предсказуемую высоту блока и контроль над визуальным пространством страницы.
Как учесть высоту шапки и подвала при вычислении полной высоты
Если страница содержит фиксированную шапку и подвал, блок с контентом не должен перекрывать их и при этом сохранять полную высоту видимой области. Чтобы добиться этого, высоту блока рассчитывают с учётом размеров этих элементов.
В CSS удобно использовать функцию calc(). Например, при высоте шапки 80 px и подвала 60 px можно записать: height: calc(100vh — 140px);. Таким образом, оставшееся пространство между ними будет занято центральным блоком.
Если шапка или подвал имеют динамическую высоту, точнее управлять параметрами можно через JavaScript. Код может вычислять фактическую высоту элементов с помощью offsetHeight и обновлять значение для контентного блока при изменении размеров окна:
content.style.height = window.innerHeight — header.offsetHeight — footer.offsetHeight + ‘px’;
Такой подход гарантирует, что содержимое не выйдет за границы доступной области, независимо от масштабирования или адаптации под разные экраны. При этом блок всегда занимает ровно оставшееся пространство между шапкой и подвалом.
Растягивание блока с помощью flex-контейнера

Технология Flexbox позволяет распределять пространство внутри контейнера без точных значений высоты. Это удобно, когда требуется, чтобы один из блоков заполнял всю оставшуюся высоту между другими элементами страницы.
Для создания такого макета нужно выполнить следующие шаги:
- Оборачивающий элемент задать как display: flex и направление оси flex-direction: column.
- Шапке и подвалу указать фиксированную или автоматическую высоту.
- Основному блоку назначить свойство flex-grow: 1 – это заставит его занимать всё доступное пространство между другими элементами.
Пример структуры:
- header – фиксированная высота, располагается сверху.
- main – гибкий элемент, растягивается по высоте.
- footer – фиксированная высота, располагается снизу.
CSS-код для реализации:
body { display: flex; flex-direction: column; min-height: 100vh; }
main { flex-grow: 1; }
Такое решение обеспечивает автоматическое распределение высоты, корректно работает при масштабировании и не требует дополнительных вычислений через JavaScript.
Применение grid для выравнивания блока по высоте окна

Сетка CSS Grid даёт возможность точно управлять размерами строк и столбцов, что удобно при построении макетов с фиксированной шапкой и подвалом. С помощью единицы fr можно задать, чтобы центральный блок занимал всё оставшееся пространство окна.
Базовый пример структуры страницы:
container { display: grid; grid-template-rows: auto 1fr auto; height: 100vh; }
main { background: #f2f2f2; }
В этой схеме первая строка предназначена для шапки, последняя – для подвала, а центральная строка с единицей 1fr автоматически растягивается на всю доступную высоту. Это гарантирует равномерное заполнение вертикального пространства без дополнительного кода.
Пример распределения строк можно представить в таблице:
| Элемент | Роль | Высота |
|---|---|---|
| header | Шапка сайта | auto |
| main | Основной контент | 1fr |
| footer | Подвал страницы | auto |
Grid подходит для адаптивных макетов, где необходимо точное выравнивание элементов по высоте окна. Он обеспечивает стабильное распределение пространства и корректно работает при изменении размеров экрана.
Настройка адаптивного поведения блока при изменении размера окна

При изменении размеров окна браузера важно, чтобы блок сохранял пропорции и оставался в пределах видимой области. Для этого применяются относительные единицы измерения, медиазапросы и пересчёт высоты через скрипты.
Если используется свойство height: 100vh, на мобильных устройствах возможны смещения при появлении адресной строки. Чтобы устранить это, применяют JavaScript с динамическим обновлением высоты: element.style.height = window.innerHeight + ‘px’. Скрипт следует вызывать при загрузке страницы и на событии resize.
Дополнительный контроль обеспечивают медиазапросы. Например, можно уменьшить отступы или изменить высоту блока для экранов с небольшой диагональю:
@media (max-height: 700px) { section { min-height: 90vh; } }
Для макетов на flex или grid адаптивность достигается за счёт автоматического перераспределения пространства. Эти технологии корректно реагируют на изменение размеров окна и не требуют пересчёта через скрипты.
Тестирование адаптивного поведения следует проводить в разных браузерах и при повороте экрана, чтобы исключить обрезание или появление полос прокрутки. Такой контроль обеспечивает стабильное отображение высоты блока при любых размерах окна.
Типичные ошибки при задании высоты и как их избежать

При использовании 100vh на мобильных устройствах часто возникают смещения из-за динамических панелей браузера. Чтобы избежать этого, рекомендуется применять JavaScript для пересчёта высоты или использовать min-height: 100vh с корректировкой через calc().
Игнорирование шапки и подвала приводит к тому, что контент перекрывает другие элементы. Решение – учитывать их высоту через calc(100vh — headerHeight — footerHeight) или распределять пространство с помощью flex или grid.
Ещё одна ошибка – фиксирование высоты в пикселях для всех устройств. Это приводит к обрезанию контента на экранах с меньшей высотой. Вместо этого используют относительные единицы (vh, fr) и медиазапросы для адаптации под разные размеры окна.
Проверка отображения в разных браузерах и на устройствах разной диагонали помогает выявить скрытые проблемы и корректно настроить растягивание блока по всей высоте страницы.
Вопрос-ответ:
Как использовать height: 100vh, чтобы блок занимал всю высоту экрана?
Свойство height: 100vh задаёт элементу высоту, равную 100% видимой области окна браузера. Достаточно добавить в CSS: height: 100vh;. На мобильных устройствах динамические панели могут уменьшать доступную высоту, поэтому иногда используют JavaScript для пересчёта: element.style.height = window.innerHeight + ‘px’.
Можно ли растянуть блок с учётом шапки и подвала?
Да, для этого используют функцию calc(). Например, если шапка имеет высоту 80px, а подвал 60px, центральный блок можно задать так: height: calc(100vh — 140px);. Это гарантирует, что блок займёт оставшееся пространство между шапкой и подвалом.
Как применить flex-контейнер для растяжения блока по высоте?
Необходимо обернуть элементы страницы в контейнер с display: flex и направлением колонок flex-direction: column. Шапке и подвалу задают фиксированную высоту, а основному блоку — flex-grow: 1. Это заставит центральный блок занимать всё доступное пространство без точных числовых значений.
Можно ли использовать CSS Grid для выравнивания блока по высоте окна?
Да, с помощью grid-template-rows можно распределять строки по высоте. Например: grid-template-rows: auto 1fr auto;. Первая и последняя строки — для шапки и подвала, центральная строка с 1fr растягивается на всё оставшееся пространство.
Как сделать так, чтобы блок корректно адаптировался при изменении размера окна?
Для адаптации используют медиазапросы и относительные единицы (vh, fr). Если применён 100vh, мобильные браузеры могут отображать блок некорректно при появлении адресной строки. Решение — пересчёт высоты через JavaScript на события resize и orientationchange, а также настройка минимальной и максимальной высоты через CSS.
Как правильно растянуть блок на всю высоту страницы, чтобы он корректно отображался на всех устройствах?
Для растягивания блока на всю высоту экрана используют несколько подходов. Самый простой — height: 100vh, который задаёт элементу высоту, равную высоте окна браузера. На мобильных устройствах это может давать погрешности из-за динамических панелей, поэтому часто применяют JavaScript для пересчёта: element.style.height = window.innerHeight + ‘px’. Если на странице есть шапка и подвал, высоту основного блока можно задать через calc(100vh — headerHeight — footerHeight) или распределить пространство с помощью flexbox или CSS Grid. Flex-контейнер с flex-direction: column и flex-grow: 1 для основного блока позволяет автоматически заполнять оставшуюся высоту, а grid с grid-template-rows: auto 1fr auto распределяет строки между шапкой, контентом и подвалом. Для адаптивного поведения используют медиазапросы и пересчёт высоты на события resize и orientationchange, чтобы блок оставался корректного размера при изменении окна или повороте экрана.
