Исправляем прыжки фона при скрытии адресной строки на мобильных

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

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

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

Хотите устранить скачки фонового изображения в процессе изменения размеров окна браузера? Используйте CSS свойства background-attachment: fixed; и background-size: cover;. Они позволят вам зафиксировать положение фонового изображения и обеспечить его равномерное распределение по всему доступному пространству.

CSS
Скопировать код
.element {
  background-image: url('image.jpg');
  background-attachment: fixed;
  background-size: cover;
}

Применив указанные стили к элементам, вы обеспечите неизменность позиции фона даже при движении адресной строки.

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

Способ преодоления проблемы подскакивающей высоты с помощью JavaScript

Проблему с высотой vh в iOS можно решить при помощи JavaScript, динамически подстраивающего высоту элементов. Данный скрипт оперативно корректирует размеры, учитывая изменения в области просмотра.

JS
Скопировать код
function resizeBackground() {
  var extraHeight = 60; // Добавляем немного свободного пространства для компенсации изменяемости адресной строки
  document.getElementById('bg1').style.height = window.innerHeight + extraHeight + "px";
  document.getElementById('bg2').style.height = window.innerHeight + extraHeight + "px";
}

window.addEventListener('resize', resizeBackground); // Отслеживаем изменения размеров окна
resizeBackground(); // Инициализируем функцию

Данный код эффективно контролирует изменения размеров окна, быстро реагирует на внезапные изменения и предотвращает визуальные смещения.

Гарантируем плавность движений – плавные переходы

Если применить CSS-property transition, то можно существенно смягчить эффект внезапных изменений расположения элементов на странице. Задержка внесет минимальные коррекции в расположение элементов.

CSS
Скопировать код
.element {
  transition: height 999999s; // Движение настолько плавное, что почти неразличимо
}

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

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

Вот какая проблема подскакивающего фонового изображения может возникнуть в процессе прокрутки страницы, особенно при том, что мобильный браузер скрывает или показывает адресную строку:

Markdown
Скопировать код
Адресная строка видна:
📱======================
| 🖼️                     |
| Фон стабилен           |
| (Не трясется)          |
=========================

Адресная строка скрыта:
📱
| 🖼️                     | <- Фон подскакнул вверх
| Фоновое изображение    |
| (Следует за видимой областью) |
=========================

Используя предложенные CSS-приемы, фон можно зафиксировать на месте, как якорь судно:

Markdown
Скопировать код
📱======================
| 🖼️🔒                  |
| Фоновое изображение    |
| (Не подскакивает)         |
=========================
// Свойство `background-attachment: fixed` надежно "приклеивает" фон на месте.

Целью является сделать так, чтобы фон не подскакивал, а оставался неизменным независимо от того, что происходит с адресной строкой.

SOLID подход к учету особенностей мобильных браузеров

Принимаем во внимание разнообразие соотношений сторон

Устройства с различными соотношениями сторон могут вести себя по-разному, поэтому используйте медиа-запросы CSS для адаптации под специфические размеры и формы экранов.

CSS
Скопировать код
@media (aspect-ratio: 16/9) {
  .element {
    /* Специальный стиль для экранов 16:9 */
  }
}

@media (aspect-ratio: 3/2) {
  .element {
    /* Персонализированные правила для экранов 3:2 */
  }
}

Тестируйте ваш дизайн на различных устройствах, чтобы обеспечить его корректное отображение.

Обеспечиваем плавный пользовательский опыт на мобильных устройствах

Создайте плавный и стабильный пользовательский опыт, контролируя поток содержимого с помощью свойств overflow для элементов html и body.

CSS
Скопировать код
html {
  overflow: hidden; // Запрещаем прокрутку
}
body {
  overflow-y: scroll; // Включаем вертикальную прокрутку
}

Такой подход эффективно устраняет смещения фоновых изображений, которые могут возникнуть внезапно.

Используем альтернативные подходы к дизайну

Если нет возможности реализовать идеальное решение, рассмотрите возможность изменения мобильного дизайна в пользу более адаптивных и удобных вариантов. Это может быть отказ от использования фоновых изображений на всю страницу или изменение расположения визуальных элементов для увеличения гибкости интерфейса.

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

  1. background-attachment – CSS: Cascading Style Sheets | MDN — Статья на МDN о свойстве background-attachment.
  2. Cumulative Layout Shift (CLS) | Articles | web.dev — Статья от Google о принципах восприятия и улучшения совокупного сдвига макета.
  3. Speed Up Google Fonts – Harry Roberts – Web Performance Consultant — Методы ускорения загрузки Google Fonts, влияющие на стабильность макета.
  4. Web Design Experiments by Jen Simmons — Коллекция экспериментальных веб-дизайнов для вдохновения.
  5. Most Reliable App & Cross Browser Testing Platform | BrowserStack — Сервис для тестирования вашего сайта на различных устройствах и платформах.
  6. Creating Intrinsic Ratios for Video – A List Apart — Советы по сохранению соотношения сторон видео с целью избежать неожиданных изменений в макете.