Различия высоты 100% и 100vh в CSS: проблемы и решения

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Свойство CSS height: 100vh; обеспечивает заполнение всей высоты видимого экрана элементом, не зависимо от его родительских блоков. В свою очередь, height: 100%; работает на основе высоты родительского элемента и не гарантирует полное заполнение видимой области. Использование 100vh предпочтительнее для заполнения всего экрана, т.к. это исключает вероятность ошибок в расчётах.

CSS
Скопировать код
/* Элемент займёт всю видимую область экрана, вне зависимости от родительских элементов */
.full-screen {
  height: 100vh;
}

Однако, на мобильных устройствах значение 100vh может быть изменено при скрытии адресной строки. На десктопе полоса прокрутки может влиять на параметр vw, вызывая сдвиги в черновике вашего проекта.

Кинга Идем в IT: пошаговый план для смены профессии

Разъяснение различий

Единицы измерения видимой области и их зависимость от родительского элемента

Единицы измерения vw, vh, vmin, vmax основываются на величине видимой области экрана. Свойство height: 100% требует чтобы родительский элемент имел установленную высоту 100% на всех уровнях, вплоть до <html> и <body>.

Адаптивный дизайн

Единицы vw и vh прекрасно подходят для адаптивного дизайна, позволяя элементам корректно масштабироваться под разные размеры экрана:

CSS
Скопировать код
/* Размер текста масштабируется в зависимости от размеров окна просмотра */
.body-text {
  font-size: calc(.5vh + .5vw);
}

Но значение 100vh на мобильных устройствах может изменяться при изменении ориентации или появлении панели инструментов.

Учет содержимого, превышающего видимую область экрана

Использование height: 100vh может привести к невозможности прокрутки, если содержимое больше по размеру, чем видимая область экрана. В этом случае необходимо обеспечить контроль прокрутки с помощью CSS либо динамическую корректировку высоты через window.innerHeight в JavaScript.

Визуализация

Сравним каждый подход с картиной на мольберте: HTML это фиксированный эскиз, BODY – картина, адаптирующаяся под восприятие зрителя.

plaintext
Скопировать код
HTML (🖼️🎨): 
▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓    <-- Части картины остаются скрытыми, если стена (элемент <html>) не достаточно "высока".
▓▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓▓▓▓▓▓
plaintext
Скопировать код
BODY (🖼️🎨): 
▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓    <-- Пропорции элемента подстраиваются в пределах видимой области, позволяя увидеть полностью всю картину.
▓▓▓▓▓▓▓▓
▓▓▓▓▓▓▓▓

Свойство Height 100vh гарантирует отображение всей картины без прокрутки, будто это универсальный холст для всех ситуаций.

Практическое использование

Захватывающие пользователей секции на весь экран

100vh идеально подойдет для создания приветственных экранов или герой-блоков, которые заполняют полностью весь экран, создавая сильное визуальное впечатление.

Вложенные конструкции

Для вложенных элементов в сложных дизайнах более подходящим является использование height: 100%, что обеспечивает логическое наследование размеров и соответствие содержимого размерам родительских элементов.

Панели инструментов на мобильных устройствах

Изменения в видимой области экрана на мобильных устройствах требуют динамической коррекции высоты или использования специальных функций CSS, чтобы сохранить пропорции, с учетом особенностей и съемных панелей в операционной системе iOS.

Прокрутка допустима

При создании прокручиваемого контейнера в пределах элемента на весь экран использование 100vh в сочетании с overflow: auto решает проблемы с переполнением, сохраняя размеры контейнера в рамках видимой области.

Полезные материалы

  1. Использование единиц окна просмотра для создания отзывчивой типографики
  2. Анализ точности вычислений при работе с CSS и Sass
  3. Руководство по адаптации шрифтов под разные размеры экрана
  4. Решения для корректного соотношения сторон встроенного контента
  5. Руководство по использованию размерных параметров в CSS
  6. Обсуждение поведения 100vh на мобильных устройствах на Stack Overflow
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какое значение высоты в CSS гарантирует заполнение всей видимой области экрана?
1 / 5