Простая техника эффекта параллакса. Плохо: обновление background-position

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

Но есть проблема - сделать параллакс без тормозов и дерганий может стать сложной задачей для начинающего (и не очень) веб-мастера.

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

Для начала давайте отметим несколько важных пунктов:

  • Не используйте события scroll либо background-position для создания параллакс анимации.
  • Используйте CSS 3D трансформации для создания более точного эффекта параллакса.
  • Для мобильного браузера Safari используйте position: sticky чтобы эффект параллакса гарантированно размножился.

Вы можете зайти в репозиторий Github – примеры UI элементов и вытащить от туда Parallax helper JS ! Вы можете посмотреть живое демо параллакс скролла в репозитории Github.

Проблемы параллакс эффекта

Для начала давайте рассмотрим 2 основных пути для достижения параллакс эффекта, и в частности почему они не подходят для наших целей.

Плохо: использование событий scroll

Ключевое требование для параллакса в том, чтобы он был scroll зависимым. При каждой прокрутке скролла позиция элементов параллакса должна обновляться. Хотя это звучит просто, важным механизмом современных браузеров является их способность работать асинхронно. В нашем конкретном случае это относится к событию прокрутки.

Во многих браузерах события прокрутки предоставляются низкого качества и нет гарантии доставки их к каждому кадру анимации прокрутки!

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

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

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

Плохо: обновление background-position

Другая ситуация, которую мы должны избежать это отрисовка каждого кадра. Многие решения пытаются изменить background-position обеспечить вид параллакса, что приводит к перерисовке испорченных частей страницы при прокрутке и это может привести к ненужной анимации.

Если мы хотим выполнить обещанное параллакс перемещение, нам необходимо что-то такое, что может быть применено в качестве ускорителя (что на сегодняшний день означает придерживаться transforms и opacity), и которое не полагается на события scroll.

3D в CSS

Scott Kellum и Keith Clark провели значительную работу в области использования CSS 3D для достижения параллакс перемещения. Они эффективно используют следующий технический прием:

  • Установить scroll для содержимого элемента с overflow-y: scroll (и вероятно overflow-x: hidden).
  • К тому же элементу добавить значение perspective , и для perspective-origin установить top left или 0 0 .
  • Потомкам того элемента применить сдвиг по оси Z, и масштабировать резервную копию таким образом, чтобы параллакс движение не затрагивало их размер на экране.

CSS для такого подхода выглядит так:

css Настройка масштаба для perspective

Сдвиг дочернего элемента назад может стать причиной уменьшения пропорционально значению perspective. Вы можете рассчитать до какого значения масштабировать с помощью следующего уравнения: (perspective - distance) / perspective . Так как мы скорее всего хотим сместить элемент, но при появлении его в том размере, в котором мы ему указали, его необходимо масштабировать таким образом, чтобы не сдвинуть его в лево.

В нашем случае в коде выше perspective равен 1 px, Z дистанция parallax-child равна -2px. Это означает, что элемент нужно 3х кратно увеличить, в коде вы можете наблюдать это как следующую запись scale(3).

Для любого контента, у которого не будет задана величина translateZ Вы можете заменить ее на 0. Это значит масштаб будет (perspective - 0) / perspective, что даются сетку из 1 значения, что значит невозможность ни увеличить ни уменьшить масштаб. Реально удобно.

Как работает данный подход

Важно чтобы было ясно почему это работает, поскольку мы будем использовать эти знания в ближайшее время. Скроллинг это фактически transform, именно поэтому он может быть ускорен; это в основном включается себя смещение слоев вокруг с помощью GPU. В типичной прокрутке, которая не имеет представление о perspective, прокрутка происходит в соотношении 1 к 1 когда сравнивают прикручиваемые элементы и их потомки. Если прокрутить элементы на 300 px вниз, то предки трансформируются на верх на те же 300 px.

Однако применение значения perspective к прокручиваемым элементам вносит путаницу с этим процессом; это меняет матрицу, которая лежит в основе преобразование скролла. Сейчас прокрутка на 300px может сдвинуть потомка на 150px, в зависимости от того какие Вы выбрали значения perspective и translateZ. Если какой-то элемент имеет значение translateZ равным 0 он будет прокручиваться в масштабе 1 к 1(как раньше), но потомок оттолкнутый по оси Z от начального perspective будет скролится с другой скоростью. Чистый результат: параллакс перемещение. И что немало важно, это регулировка происходит внутренним механизмом браузеров автоматически, что значит отсутствие необходимости прислушиваться к событиям scroll или менять background-position.

Ложка дегтя в бочке меда: мобильный Safari

Есть много предостережений к каждому эффекту, и один из важным для transforms это сохранение 3D эффектов для потомков. Если есть элементы в иерархии, между элементом и его параллакс потомком, 3D perspective имеет значение “flattened”, что означает эффект потерян.

html

Однако в случае мобильного Safari все немного запутаннее. Применение overflow-y: scroll к элементу контейнера технически работает, но за счёт швыряния прокручиваемых элементов. Решением будет добавить -webkit-overflow-scrolling: touch , но он также сгладит perspective и мы не получим никакого параллакса.

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

В помощь position: sticky!

Существует, на самом деле, некоторая помощь в виде position: sticky, это нужно чтобы элементы “придерживались” к верху от viewport либо учитывали родительский элемент в время прокрутки. Спецификация, как и многие из них, довольно большая, но она содержит в себе маленькую полезную жемчужину:

Блок с позиционированием stick позиционируется аналогично блоку с позиционированием relative, но смещение вычисляется с ссылкой на ближайшего предка с ползунком прокрутки или viewport если нет предка с ползунком прокрутки. - CSS Positioned Layout Module Level 3.

Это может показаться не таким уж значимым на первый взгляд, но ключевой момент в том выражении в том, как вычисляется параметр элемента stick: “смещение вычисляется с ссылкой на ближайшего предка с ползунком прокрутки”. Другими словами, расстояние движения элементов со значением stick (для того чтобы казаться прикрепленным к другому элементу или к видимой части экрана) высчитывается до применения каких-либо других трансформаций, а не после. Это значит, очень похоже на пример приведенный ранее, если смещение было рассчитано на 300px, это новая возможность использования значений perspective (или иного transform) для того чтобы влиять на значение перемещения на 300px до того как оно будет применено к любому элементу со значением stick.

Применяя position: -webkit-sticky для элемента с параллаксом мы можем фактически получить “обратное” эффекту от -webkit-overflow-scrolling: touch. Это гарантирует, что элемент с параллаксом ссылается на ближайшего предка с ползунком прокрутки, в данном случае это.container . Далее также как и до этого добавляем значение perspective к.parallax-container, которое изменяет рассчитанное перемещение скролла и создает эффект параллакса.

html

css

Container {

overflow-y : scroll;

Webkit-overflow-scrolling : touch;

Parallax-container {

perspective : 1px ;

Parallax-child {

position : -webkit-sticky;

top : 0px ;

transform : translate (-2px) scale (3);

Это восстанавливает эффект параллакса для мобильного Safari, что является отличной новостью для всех!

Предостережения для позиционирования sticky

Тем не менее тут есть различие: position: sticky изменяет механизм параллакса. Позиционирование sticky пытается, полностью, приклеить элемент к прокручиваемому контейнеру, в то время как версия без sticky этого не делает.

  • С position: sticky , чем ближе элемент к z = 0 тем меньше он двигается.
  • Без position: sticky , чем ближе элемент к z = 0 тем больше он двигается.

Если все это кажется немного абстрактным, Посмотрите демо от Роберта Флака, которое демонстрирует разницу в поведении элементов с позиционированием sticky и без. Чтобы видеть разницу Вам нужен Chrome Canary (версия 58 на момент написания статьи) или Safari.

Демо Роберта Флака показывает как position: sticky влияет на параллакс прокручивание.

Разные ошибки и способы их устранения

Как всегда есть бугорки и неровности, которые нужно сгладить:

  • Поддержка sticky противоречива. Поддержка реализована в Chrome, Edge не поддерживает полностью, а FireFox имеет баги отрисовки при совместном использовании sticky и transforms: perspective. В таких случаях стоит добавить небольшой код только лишь для того чтобы подключить position: sticky (с префиксом -webkit-) когда это необходимо, это нужно только для мобильного Safari.
  • Данный эффект совсем не работает в Edge . Edge пытается обработать прокручивание на уровне ОС, что в общем хорошая вещь, но в данном случае это препятствует обнаружения перспективных изменений во время прокрутки. Чтобы исправить это Вы можете добавить элемент с позиционированием fixed, как это выглядит в переходе Edge к методу обработки без ОС, что гарантирует учет перспективных изменений.
  • Контент страницы просто огромен! Многие браузеры не берут в расчет масштаб при решении на сколько большой контент страницы, но к сожалению Chrome и Safari не учитывают перспективы. Поэтому если скажем применить масштаб 3Х к элементу, мы можем увидеть полосы прокрутки и тому подобное, даже при масштабе 1Х после применения perspective. Есть возможность обойти эту проблему масштабируя элементы относительно правого нижнего угла (transform-origin: bottom right). Это работает благодаря тому, что негабаритные элементы перерастут в “отрицательные области” (обычно с права с верху) относительно прокуриваемой области; Прокручиваемые области никогда не покажут либо не прокрутят контент до отрицательной области.
Заключение

Параллакс это забавный эффект если использовать его вдумчиво. Как Вы видите это можно реализовать таким образом, чтобы было произвотдельно, скролл зависимо и кроссбраузерно. Поскольку это требует небольшого математического выверта, а также небольшого шаблона для получения желаемого эффекта, мы подключим небольшую вспомогательную библиотеку и образец, которые вы можете найти в нашем репозитории GitHub - примеры UI элементов .

Оригинал: https://developers.google.com/web/updates/2016/12/performant-parallaxing

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

Каким бывает параллакс

Параллакс-скроллинг может использоваться вертикально, а также по прямой линии. В качестве примера больше всего подходит Nintendo. Многие из нас с ностальгией вспоминают компьютерные игры, представленные движением главных героев с левой части экрана направо. Также возможно перемещение вниз, осуществляемое по расположенной вертикально прямой. в сети часто используется. Для создания вертикального слайдера можно воспользоваться JavaScript или CSS 3.

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

Не стоит думать, что параллакс - это исключительно возможность создания эффекта 3D. На странице можно перемещать имеющиеся иконки. Тем более, это выглядит достаточно привлекательно. Особенно удачным вариантом является применение индивидуальной траектории для каждой из них. В этом случае используются различные иконки, перемещаемые по различным траекториям. Подобное оформление привлекает внимание.

Оживающая картинка

Сложно найти сайт без изображений. Качественно выполненные и показательные рисунки привлекают посетителей. Но наибольшее внимание вызывают разного рода динамичные изображения. Действительно, если при посещении сайта отмечается движение, то это привлекает внимание. Существенно увеличивается вероятность возвращения посетителя ресурса к динамичному изображению. А показалось перемещение или нет? Поэтому для привлечения посетителей на сайт стоит изучить такое понятие, как параллакс-эффект.

Примеры сайтов с движущимися изображениями:

  • hvorostovsky.com;
  • www.kagisointeractive.com.

Как показано в примерах, восприятие улучшает раскрывающееся на подпункты меню. Подобный элемент экономит время посетителей, поэтому привлекателен для них.

Библиотека jQuery

Термином jQueryParallax определяют одноимённую библиотеку. Благодаря ей несложно добиться эффекта движения в формате 3D. В библиотеке jQuery трёхмерное восприятие создаётся различными способами. Один из них состоит в горизонтальном одновременном перемещении фоновых объектов с разной скоростью. Для этой библиотеки свойственно наличие большого количества разного рода свойств. И описанное здесь смещение представляет собой лишь небольшую часть её возможностей.

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

  • www.grabandgo.pt;
  • www.fishy.com.br;
  • www.noleath.com;
  • buysellwebsite.com.

jParallax представлен слоями, перемещающимися при движении мыши. Для динамичных элементов свойственно абсолютное ;). Каждый из них характеризуется собственным размером и движением с индивидуальной скоростью. Это может быть текст или изображение (по желанию создателей ресурса).

Восприятие посетителя сайта

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

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

Любимые старые игры

Понятие «параллакс» должно быть знакомо всем поклонникам приставок 80-90-х годов. Это касается игр:

  • Mario Bros.
  • Mortal Kombat.
  • Streets of Rage.
  • Moon Patrol.
  • Turtles in Time.
  • То есть параллакс - это методика, которая используется достаточно продолжительный период. Указанные игры действительно вспоминаются с некоторой ностальгией. Ведь они словно проникнуты характером того периода.

    Изображения на экране созданы с использованием такой техники, как параллакс-скроллинг. Нет ничего удивительного в том, что указанная методика обрела заслуженную популярность. Этот дизайнерский концепт достаточно тепло воспринимается теми, кто играл в 80-90 годы или наблюдал за досугом друзей.

    Параллакс-скроллинг

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

    Параллакс-скроллинг довольно успешно был использован в компании Nike. Разработкой оригинального сайта компании занимались дизайнеры Weiden and Kennedy. Но этот дизайн не сохранился. Ресурс постепенно обновили, в соответствии с тенденциями современности. Activatedrinks.com - пример сайта, дизайн которого напоминает оформление, используемое маркетологами Nike указанного периода.

    Динамики не должно быть много

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

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

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

    Как создать перемещение на сайте

    Как сделать параллакс? Этот вопрос интересует очень многих создателей сайтов. Необязательно знать тонкости написания тегов. Очень удобно использовать специальные ресурсы в интернете. Из большого числа имеющихся предложений можно выделить следующих помощников:

  • Plax - программа, являющаяся достаточно простой в использовании. Ей свойственно придавать странице подвижность благодаря перемещению мыши.
  • jQuery Parallax Image Slider - плагин jQuery используется, чтобы создавать слайдеры изображений.
  • Jquery Image Parallax - подходит для оформления прозрачных рисунков. Благодаря его использованию PNG, GIF приобретают глубину, оживляясь движением.
  • Curtain.js применяется для создания страницы, оснащённой фиксированными панелями. В этом случае наблюдается эффект открытия штор.
  • Scrolling Parallax: A jQuery Plugin состоит в создании эффекта параллакса при прокручивании колесика мышки.
  • Еще несколько полезных плагинов

    Как известно, наибольшую ценность имеет информация. И чем большее количество способов достижения желаемого известно, тем ближе вероятность получения правильного результата. Полезные плагины, используемые для создания динамики:

  • jQuery Scroll Path - применяется для размещения объектов на указанном пути.
  • Scrollorama - jQuery-плагин. Он используется как инструмент для привлекательного оформления материала. Позволяет за счёт удобного прокручивания «оживить» имеющийся на странице текст.
  • Scrolldeck - jQuery-плагин. Представляет собой замечательное решение, используемое в качестве презентации для сайтов, оформленных в виде одной страницы.
  • jParallax представляет перемещение слоёв в зависимости от перемещения указателя мыши.
  • Stellar.js - плагин, с помощью которого любой элемент оформляется с добавлением эффекта параллакс-скроллинга.
  • Параллакс с привязкой к курсору

    Достаточно эффектно выглядит такой параллакс. Неподвижные на первый взгляд объекты страницы сайта перемещаются при приближении Оно словно оживает и следует за перемещаемым элементом.

    Сначала следует остановиться на рисунке. Необходимое изображение помещается в рамку, при этом его края нужно скрыть. Метод очень простой, а полученный таким образом рисунок смотрится достаточно привлекательно.

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

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

    Параллакс почти всегда обрабатывается с помощью JavaScript и, чаще всего, этот процесс сопровождается очень не производительными методами с нарушениями события scroll, изменениями DOM -модели непосредственно в заголовке и запуском не нужных перекомпоновки и раскраски.

    Все это происходит не синхронно с рендерингом, вызывает выпадение кадров и «заикание » прокрутки. Лучшее решение для использования паралакс — эффекта — requestAnimationFrame , который полностью изменяет принцип работы – но как нам полностью избавиться от использования JavaScript ?

    Создавая эффект параллакса посредством CSS вы убираете все эти вопросы и позволяете браузеру использовать аппаратное ускорение, в результате чего почти всю тяжелую работу делает компьютер пользователя. Результатом является плавная прокрутка. Все кадры остаются на месте.

    Вы также можете комбинировать эффект с другими функциями CSS , такими как media queries или supports – кому респонсивный паралакс?

    Демо-режим Теория

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

    ... ... ...

    И некоторые базовые детали стиля:

    Parallax { perspective: 1px; height: 100vh; overflow-x: hidden; overflow-y: auto; } .parallax__layer { position: absolute; top: 0; right: 0; bottom: 0; left: 0; } .parallax__layer--base { transform: translateZ(0); } .parallax__layer--back { transform: translateZ(-1px); }

    Класс parallax это то место, где происходит чудо. Свойства элемента height и perspective зафиксируют перспективу в центре, создавая начальную точку в 3D -области просмотра.

    Свойство overflow-y: auto позволит скролить контент в обычном режиме, но теперь элементы-потомки будут отображаться относительно фиксированной перспективы. Это ключ к созданию паралакс-эффекта.

    Далее класс parallax__layer . Как предполагает имя, он определяет слой содержимого, к которому будет применен эффект. Элемент извлекается из потока контента и настраивается для заполнения пространства контейнера.

    И, наконец, у нас есть классы модификаторов — parallax__layer—base и parallax__layer—back . Они используются для определения скорости прокрутки элемента параллакса, переводя его вдоль оси Z (перемещение дальше или ближе относительно области просмотра ).

    Для краткости я определил только две скорости слоя. Мы добавим еще несколько скоростей чуть позже.

    Демо-режим Коррекция глубины

    Так как эффект параллакса создан при помощи 3D -преобразования, перемещение элемента вдоль оси Z имеет побочный эффект — его размеры меняются в зависимости от того, как мы передвигаем его ближе или дальше от области просмотра.

    Чтобы избежать этого, мы применим трансформацию элемента с помощью метода scale() , чтобы он отображался в оригинальном размере:

    Parallax__layer--back { transform: translateZ(-1px) scale(2); }

    Коэффициент масштабирования может быть рассчитан с помощью формулы 1 + (translateZ * -1) / perspective) . Для примера, если perspective области просмотра равен 1px и мы перемещаем элемент на — 2px вдоль оси Z коэффициент масштабирования будет равен scale(3) :

    Parallax__layer--deep { transform: translateZ(-2px) scale(3); }

    Демо-режим с коррекцией глубины Управление скоростью слоя

    Скоростью слоя управляет сочетание значений перспективы и Z -оси. Элементы с отрицательными значениями Z -оси будет прокручиваться медленнее, чем элементы, с положительным значением.

    Элементы с отрицательными значениями по оси Z будут прокручиваться медленнее, чем элементы, которые имеют положительные значения. Чем дальше значение находится от 0, тем более выражен паралакс — эффект (например translateZ(-10px) будет скролится медленнее, чем translateZ(-1px)) .

    Создание различных разделов страницы параллакса

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

    Во-первых, нам нужен элемент parallax__group , чтобы сгруппировать элементы в группы:

    ... ... ...

    Вот код CSS для элемента группы:

    Parallax__group { position: relative; height: 100vh; transform-style: preserve-3d; }

    В этом примере, я хочу, чтобы каждая группа заполняла область просмотра. Устанавливаем значение height: 100vh . Однако при необходимости произвольные значения могут быть установлены для каждой группы.

    Свойство transform-style: preserve-3d предотвращает сплющивание браузером, а элементы parallax__layer и position: relative используются, чтобы потомки элемента parallax__layer позиционировались относительно элементов группы.

    Одно важное правило, которым стоит руководствоваться при группировке элементов — мы не можем обрезать содержимое группы. Установка overflow: hidden для parallax__group будет блокировать эффект.

    Необрезанное содержимое приведет к ошибке переполнения элементов-потомков, потому нам нужно позаботиться о значениях z-index для группы, чтобы обеспечить правильное отображение/скрытие контента при прокрутке документа.

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

    Parallax__group { transform: translate3d(700px, 0, -800px) rotateY(30deg); }

    Посмотрите на следующий пример и обратите внимание на опцию отладки!

    Демо-режим Поддержка браузерами
    • Firefox, Safari, Opera и Chrome поддерживают этот эффект;
    • В Firefox все работает, но в настоящее время существует незначительная проблема с выравниванием;
    • Internet Explorer еще не поддерживает preserve-3d (появление поддержки вскоре ожидается ), потому паралакс — эффект не поддерживается. Для этого браузера вам придется создать контент без данного эффекта. Но, прогресс не стоит на месте! Дерзайте!

    Перевод статьи «Pure CSS parallax scrolling websites » был подготовлен дружной командой проекта

    P arallax эффект стал популярным после того, как Nike запустил свой сайт «Nike Better World «. Сайт получил множество положительных отзывов от разных ресурсов за свой замечательный эффект параллакс-прокрутки и веб-дизайн.

    Параллакс-эффект существовал с 1980-х годов и использовался в видеоиграх, а потом на сайтах.

    Примеры сайтов с параллакс-эффектом: что такое параллакс-прокрутка?

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

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

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

    Посмотрите на примеры:



    Учимся создавать дизайн сайта с параллакс-эффектом

    Существует четыре метода, которые могут быть использованы для создания сайта с parallax эффектом j Q uery .

    • Послойный метод – использование нескольких фоновых изображений, которые могут независимо перемещаться горизонтально или вертикально, и расположены одно над другим.
    • Метод спрайтов – использование одного большого изображения, составленного из нескольких, и отображение только части большого изображения в различных позициях. Часто используется в меню навигации.
    • Метод повторяющегося шаблона – контент для прокрутки строится из отдельных плиток, которые могут перемещаться над повторяющимся слоем фона.
    • Растровый метод – линии пикселей изображения скомбинированы и обновляются сверху вниз с небольшой задержкой между прорисовкой линий.
    Руководство по разработке сайта с параллакс-прокруткой

    Посмотрите пример

    Что вам понадобится для реализации этого примера параллакс-прокрутки:

    • Wellfleet (шрифт Google);
    • Arvo (шрифт Google );
    • Oswald (шрифт Google );
    • Goudy Bookletter 1911 (шрифт Google) ;
    • Изображения, использованные в этом примере ;
    • Рождественские изображения в высоком разрешении. Вы можете загрузить бесплатные изображения отсюда или использовать изображения из архива, ссылка на который приведена выше.
    Файловая структура

    Для файловой структуры parallax эффект примера мы создадим три папки и один HTML-файл :

    • html – будет главным файлом. Весь дизайн будет расположен в этом файле;
    • Папка js – для скриптов JavaScript/jQuery ;
    • Папка img – для изображений;
    • папка css – для CSS-стилей .


    HTML -разметка

    В файл index.html сначала добавим объявление типа документа HTML5 , а также группу ссылок в заголовок . Туда будет включена ссылка на файл CSS , шрифты Google , а также файл библиотеки jQuery .

    Creating a Simple Parallax Scrolling Website

    Пропустим код parallax эффекта jQuery и обсудим его позже. А пока продолжим работу с HTML-элементами . Мы добавим тэг header с логотипом и навигацией внутри. Навигация будет вести на определённые слайды. Позже мы добавим эффект плавной прокрутки, чтобы это смотрелось красиво.

    PARALLAX

    • Slide 1
    • Slide 2
    • Slide 3
    • Slide 4
    • Slide 5

    Теперь добавим слайды для parallax эффекта в блоке . Мы пометим каждый из них атрибутом ID , который будет соответствовать его порядковому номеру. Внутрь слайда мы поместим блок с классом content, чтобы выровнять элементы по центру.

    MERRY CHRISTMAS HAPPY NEW YEAR “Then the Grinch thought of something he hadn"t before! What if Christmas, he thought, doesn"t come from a store. What if Christmas...perhaps...means a little bit more!” Dr. Seuss “I truly believe that if we keep telling the Christmas story, singing the Christmas songs, and living the Christmas spirit, we can bring joy and happiness and peace to this world.” Norman Vincent Peale “Christmas doesn"t come from a store, maybe Christmas perhaps means a little bit more....” Dr. Seuss “My idea of Christmas, whether old-fashioned or modern, is very simple: loving others. Come to think of it, why do we have to wait for Christmas to do that?” Bob Hope Copyright 1stwebdesigner.com

    Теперь, когда мы поместили все HTML-элементы на страницу, сайт выглядит вот так.


    CSS— стили

    Начнём с добавления стилей parallax эффекта для тега body , а также заголовков H1 , H2 и H3 . Мы установим шрифт “Arvo ” для заголовков H1-H2 .

    body{ margin: 0; padding: 0; width: 100%; } h1 { font-family: "Arvo"; font-weight: normal; font-size: 55px; text-align: center; color: #fff; margin: 0; padding: 0; } h2 { font-family: "Arvo"; font-weight: normal; font-size: 40px; text-align: center; color: #fff; margin: 0; padding: 0; } h3 { font-family: Oswald; font-weight: normal; font-size: 16px; text-align: center; margin: 5px 0; padding: 0; z-index: 1; position: relative; }

    Затем добавим основные стили для позиционирования элементов на экране и контента в слайдах.

    Center { margin: 0 auto; } .content{ margin: 0 auto; width: 960px; } .clear { clear: both; }

    Теперь стилизуем секцию заголовка parallax эффект примера . Добавим изображение с чёрным фоном и прозрачностью в 60% в заголовок, который будет содержать логотип и навигацию. Логотип разместим слева, а навигацию – справа.

    #header { width: 100%; background: url("../img/header-bg.png"); height: 80px; position: fixed; margin-top: 30px; } #nav { width: 410px; float: right; margin-top: 20px; } #logo a { color: #fff; text-decoration: none; float: left; font-size: 30px; margin-top: 20px; color: #fff; font-family: "Wellfleet"; font-weight: bold; } #nav ul{ list-style: none; display: block; margin: 0 auto; list-style: none; } #nav li{ margin-top: 9px; float: left; padding-left: 21px; } #nav li a { color: #fff; opacity:0.6; font-size: 16px; text-decoration: none; font-family: "Wellfleet"; } #nav li a.active { color: #fff; opacity:1; border-bottom: 2px solid #fff; } #nav li a:hover { color: #fff; opacity:1; }

    Quotes { font-family: "Goudy Bookletter 1911", serif; font-weight: normal; font-size: 30px; text-align: left; margin: 50px auto; }
    .author_name_white { font-family: "Wellfleet"; margin: 70px 0 0 75px; color: #fff; font-size: 20px; } .author_name_gray { font-family: "Wellfleet"; margin: 70px 0 0 75px; color: #94a4a4; font-size: 20px; } .quotes_container { width: 800px; margin: 0 auto; } #christmas_tree { background: url("../img/christmas-tree.png") no-repeat; width: 48px; height: 77px; margin: 0 auto; position: relative; bottom: -35px; } #divider { background: url("../img/divider.png") no-repeat; width: 300px; height: 35px; margin: 0px auto 27px auto; } #ribbon { background: url("../img/ribbon.png") no-repeat; width: 251px; height: 48px; margin: 0 auto; display: block; position: relative; top: -38px; } #snowflakes1 { background: url("../img/snowflakes.png") no-repeat; width: 24px; height: 21px; margin: 0 auto; display: block; position: relative; bottom: -54px; left: -102px; } #snowflakes2 { background: url("../img/snowflakes.png") no-repeat; width: 24px; height: 21px; margin: 0 auto; display: block; position: relative; bottom: -33px; right: -100px; }

    Каждый слайд в parallax эффекте jQuery будет иметь фоновое изображение или белый фоновый цвет с фиксированной позицией. Также нужно добавить небольшие отступы к каждому слайду, чтобы выровнять элементы по центру.

    #slide1, #slide2 { width: 100%; } #slide1 { background:url("../img/slide1.jpg") 50% 0 no-repeat fixed; color: #fff; height: 600px; margin: 0; padding: 200px 0 260px 0; background-size: cover; } #slide2 { background-color: #fff; color: #333333; height: 300px; margin: 0 auto; overflow: hidden; padding: 200px 0; } #slide3 { background: url(../img/slide3.jpg) 50% 0 no-repeat fixed; color: #fff; height: 600px; padding: 170px 0 0 0; background-size: cover; } #slide4 { background-color: #fff; color: #333333; height: 300px; padding: 200px 0; } #slide5 { background: url(../img/slide5.jpg) 50% 0 no-repeat fixed; height: 200px; margin: 0 auto; padding: 250px 0; color: #fff; background-size: cover; }

    #copyright { color: #fff; font-family: "Wellfleet"; font-size: 14px; margin-top: 100px; text-align: center; } #copyright a { text-decoration: none; color: #fff; }

    Код jQuery

    Вдохнём жизнь в наш сайт с parallax эффектом . В раздел head добавим следующий код jQuery .

    $(document).ready(function() { $("a").each(function() { if (location.pathname.replace(/^//,"") == this.pathname.replace(/^//,"") && location.hostname == this.hostname && this.hash.replace(/#/,"")) { var $targetId = $(this.hash), $targetAnchor = $(""); var $target = $targetId.length ? $targetId: $targetAnchor.length ? $targetAnchor: false; if ($target) { var targetOffset = $target.offset().top; $(this).click(function() { $("#nav li a").removeClass("active"); $(this).addClass("active"); $("html, body").animate({scrollTop: targetOffset}, 1000); return false; }); } } }); });

    В этой части parallax эффекта jQuery мы создаём обработчик нажатия на любую из ссылок, имеющих символ “# ” где-либо в атрибуте href . В следующей строке мы проверяем, ведёт ли ссылка на ту же страницу, ища совпадения в location.pathname . Так мы уверены, что код будет работать как со ссылками, включающими в себя полный URL , так и с теми, которые состоят только из идентификатора.

    $(document).ready(function() { $("a").each(function() { if (location.pathname.replace(/^//,"") == this.pathname.replace(/^//,"") && location.hostname == this.hostname && this.hash.replace(/#/,"")) { var $targetId = $(this.hash), $targetAnchor = $(""); var $target = $targetId.length ? $targetId: $targetAnchor.length ? $targetAnchor: false; if ($target) { var targetOffset = $target.offset().top;

    В этой части кода обрабатывается нажатие пользователя на ссылку в меню. При этом класс active удаляется из текущей активной ссылки меню и добавляется к той ссылке, по которой перешел пользователь. Также произойдёт прокрутка страницы к соответствующему блоку.

    $(this).click(function() { $("#nav li a").removeClass("active"); $(this).addClass("active"); $("html, body").animate({scrollTop: targetOffset}, 1000); return false; }); } } });
    });

    Совет : Можно делать скорость эффекта прокрутки быстрее или медленнее, меняя значение 1000 (1000 миллисекунд ). Можно попробовать значения “fast ” (200 миллисекунд ) или “slow ” (600 миллисекунд ). Обратите внимание, что значение по умолчанию 400 миллисекунд .

    $("html, body").animate({scrollTop: targetOffset}, 1000);

    Этот эффект можно сделать самому.

    Заключительные слова о параллакс-эффекте

    В этом руководстве мы расскажем, как ставить и снимать флажки в input type checkbox с помощью JavaScript. Пользователь сможет одним кликом включить или выключить все элементы…

    jQuery эффекты всплывающих подписей присутствуют в Интернете уже давно. Существует много библиотек JQuery, которые могут быть использованы для получения крутых и…

    Как вы, наверное, знаете, Параллакс, это визуальный эффект, где позиции объектов выглядят по-разному, когда мы рассматриваем их с разных позиций. Прокрутка с параллакс – эффектом создает иллюзию, что два объекта, которые находятся в прямой видимости, но на расстоянии друг от друга, движутся с различными скоростями. Этот эффект мы видим повсюду, когда мы в движении: когда мы идем по улице, мы видим, что все ближние вещи двигаться гораздо быстрее, чем дальние, когда мы едем за рулём, мы можем видеть, что деревья и кустарники возле дороги проносятся мимо очень быстро, а пейзаж на заднем плане, например горы, движется очень медленно. Этот эффект называется параллакс движения.

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

    Шаг 1 – HTML Section 1 Simple title 1

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tempus id nunc ut gravida. Vestibulum ac...

    Section 2 Simple title 2

    Nam imperdiet posuere bibendum. Aliquam nec consectetur metus. Aliquam egestas a elit at malesuada...

    Section 3 Simple title 3

    Proin tempor urna vitae tortor porttitor, ac malesuada elit lacinia. Nulla ac tellus nulla. Donec iaculis...

    Как вы видите, HTML разметка не сложная, она включает в себя 6 альтернативных разделов: три из них содержат фоновые изображения (разделы с классом parallax), три содержат текст (секции с классом content).

    Шаг 2 – Изображения

    Все фоновые изображения имеют фиксированный размер 1600 × 600 пикселей. Это позволит нам использовать изображения на большинстве разрешений экрана (респонсивный макет(responsive layout)). Все наши блоки параллакса имеют одинаковую фиксированную высоту (600px).

    Шаг 3 – CSS

    Теперь нам нужно расширить изображения, чтобы заполнить всё доступное пространство, для этого мы поставили значение background-size: cover , а затем мы устанавливаем background-attachment: fixed , чтобы зафиксировать фон.

    Container { max-width: 960px; margin: 0 auto; } section.section:last-child { margin-bottom: 0; } section.section h2 { margin-bottom: 40px; font-family: "Roboto Slab", serif; font-size: 30px; } section.section p { margin-bottom: 40px; font-size: 16px; font-weight: 300; } section.section p:last-child { margin-bottom: 0; } section.section.content { padding: 40px 0; } section.section.parallax { height: 600px; background-position: 50% 50%; background-repeat: no-repeat; background-attachment: fixed; background-size: cover; } section.section.parallax h1 { color: rgba(255, 255, 255, 0.8); font-size: 48px; line-height: 600px; font-weight: 700; text-align: center; text-transform: uppercase; text-shadow: 0 0 10px rgba(0, 0, 0, 0.2); } section.section.parallax-1 { background-image: url("../imgages/1.jpg"); } section.section.parallax-2 { background-image: url("../imgages/2.jpg"); } section.section.parallax-3 { background-image: url("../imgages/3.jpg"); } @media all and (min-width: 600px) { section.section h2 { font-size: 42px; } section.section p { font-size: 20px; } section.section.parallax h1 { font-size: 96px; } } @media all and (min-width: 960px) { section.section.parallax h1 { font-size: 160px; } }