📗Parallax

Parallax - это техника, при использовании которой элементы на заднем плане при прокрутке движутся медленнее, чем на переднем. Данный эффект дает ощущение глубины пространства и достигается использованием оси z, направленной “вглубь” экрана.

Довольно часто параллакс реализуется с помощью javascript, но данное решение приводит ко многим проблемам. В их числе привязка к событию scroll, из-за чего браузер вынужден постоянно обновлять страницу, что сильно затормаживает работу сайта и приводит к сбоям на мобильных устройствах. Также возможны проблемы с поддержкой кода отдельными браузерами.

Использование CSS в данном случае решает эти проблемы, делая эффект плавнее и менее ресурсозатратным, что положительно сказывается на скорости отрисовки.

Простой parallax

Свойство background-attachment: fixed является простейшим способом создания parallax-эффекта. Оно применяется к той секции, фоновое изображение которой мы хотим зафиксировать. В итоге при скролле контент будет прокручиваться, а фон останется на месте.

HTML

<body>
    <section class="parallax">
        <p class="parallax__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
    </section>

    <section class="static"></section>
</body>

CSS

.parallax {
    height: 80vh;
    background: url(https://www.desktopbackground.org/download/3840x2160/2010/06/01/26317_download-wallpapers-3840x2400-marmalade-sugar-candy-backgrounds_3840x2400_h.jpg) center/cover no-repeat;
    background-attachment: fixed;
}

.static {
    height: 80vh;
}

.parallax__text {
    font-size: 42px;
    padding-top: 200px;
    text-align: center;
}

Результат:

parallax

Открыть пример на Codepen

Создание сложного parallax-эффекта с помощью CSS

Начнем с html-разметки. Создадим контейнер и два элемента внутри, расположенные на разном расстоянии от экрана.

HTML

CSS

Результат:

parallax

Разберемся, что здесь происходит.

Высота контейнера с классом .parallax равна высоте экрана, дочерние элементы относительно него абсолютно позиционированы и имеют верхний и нижний отступ в 70vh.

Свойство perspective задает глубину просмотра, значение шкалы оси z. От него мы будем отталкиваться при задавании расстояния между элементами.

У первого элемента значение смещения по оси Z равно нулю. Он никак не меняет свою скорость при прокрутке страницы.

У второго элемента смещение в -1px. Он находится дальше, выглядит меньше и движется при прокрутке медленнее.

Для того, чтобы второй элемент приобрел стандартный размер, увеличим его, задав большее значение scale:

parallax2

Примечание:

Формула для подсчета необходимого значения scale: 1 + (translateZ * -1) / perspective

Добавим третий элемент:

HTML

CSS

Третий элемент находится в два раза дальше, чем второй.

parallax3

Открыть пример на CodePen

Фон с использованием parallax

Чаще всего параллакс используется в отдельных частях страницы. Создадим новую разметку с тремя секциями и плавно скользящим фоном.

HTML

Поскольку теперь присутствуют несколько секций с параллакс-эффектом, назначаем свойства .parallax-контейнера из предыдущего примера на body с классом main-page:

CSS

Перейдем к секциям:

Каждая секция по ширине и высоте теперь равна размерам экрана. Свойство overflow: hidden не дает возможности содержимому разных секций перекрыть друг друга.

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

Отрицательный z-index "подкладывает" псевдоэлемент под контент. translateZ(-150px) в три раза превышает размер перспективы, замедляя прокрутку фона. Чем больше разница между ними, тем медленнее прокручивается элемент. Scale(4) найден по формуле, приведенной выше: 150/50 + 1. Таким образом, фон сохраняет первоначальный размер и качество.

Оформление контента внутри секций:

Результат:

parallax-4

Открыть пример на CodePen

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

Уменьшим среднюю секцию и добавим вокруг неё две обычных:

HTML

CSS

Напоследок приведем в движение контент внутри подвижных секций и немного отдалим его от экрана:

Результат:

parallax5

Открыть пример на CodePen

Поддерживаемость браузерами

Parallax на CSS поддерживается всеми популярными браузерами (Chrome, Safari, Opera, Firefox), кроме Internet Explorer.

Last updated