Css3 параллакс: параллакс, «липкий» футер и другие / Блог компании Skillbox / Хабр
Параллакс-эффект на чистом CSS — Блог HTML Academy
В этой статье показано, как с помощью CSS-трансформаций, перспективы и небольших хитростей с масштабированием сделать параллакс-эффект на чистом CSS.
Параллакс чаще всего делается на JavaScript, и почти всегда он реализован плохо: отлавливается событие прокрутка, изменения в DOM вносятся напрямую в обработчике и вызываются лишние перерасчёты и перерисовки. Всё это происходит асинхронно с потоковым рендерингом браузера, в результате чего некоторые кадры пропускаются и эффект выглядит прерывистым. Впрочем, это не так уж страшно — requestAnimationFrame
и отложенное обновление DOM позволяют управлять внешним видом сайтов с параллакс-эффектом. Но что если вы могли бы совсем не зависеть от JavaScript?
Перенос параллакс-эффекта на CSS избавит вас от упомянутых проблем и позволит браузеру положиться на аппаратное ускорение — почти всё будет обрабатываться компоновщиком. В результате вы получите согласованную частоту кадров и гладкую прокрутку страницы. Кроме того, можно сочетать этот эффект с другими CSS-приёмами, такими как медиавыражения и поддержка CSS-свойств. Как насчёт отзывчивого параллакс-эффекта?
Посмотреть демонстрацию
Теория
Прежде чем говорить о принципе работы, давайте выполним базовую разметку:
А вот основные стили:
Именно класс .parallax
содержит всю магию параллакс-эффекта. Указав для элемента свойства height
и perspective
, мы привяжем построение перспективы от центра этого элемента, создав тем самым исходный фиксированный 3D вьюпорт. Благодаря свойству overflow-y: auto
контент внутри элемента будет прокручиваться как обычно, но элементы-потомки теперь будут отображаться относительно фиксированной точки. Это ключевой принцип создания параллакс-эффекта.
Далее — класс .parallax__layer
. Как можно понять из названия класса, он определяет слой контента, к которому будет применяться параллакс-эффект; элемент выпадает из основного потока и заполняет собой всё пространство контейнера.
И наконец, у нас есть классы-модификаторы .parallax__layer—base
и .parallax__layer—back
. Они определяют скорость прокрутки параллакс-элемента посредством перемещения его по оси Z (отодвигая его от вьюпорта или приближая к нему). Для краткости я установил только две скорости слоя — позже добавим ещё.
Попробовать
Коррекция глубины
Поскольку параллакс-эффект создаётся при помощи 3D-трансформаций, сдвиг элемента по оси Z имеет побочный эффект: по мере того, как он приближается к вьюпорту или отодвигается от него, его реальный размер меняется. Чтобы компенсировать это, мы должны применить трансформацию scale()
к этому элементу — так он будет отображаться в оригинальном размере:
Коэффициент масштабирования (scale) можно вычислить с помощью формулы: 1 + (translateZ * -1) / perspective
. Например, если свойство perspective
нашего вьюпорта равно 1px
, и мы перемещаем элемент по оси Z на -2px
, то коэффициент масштабирования будет равен 3:
Пример с коррекцией глубины
Управление скоростью движения слоя
Скорость движения слоя определяется сочетанием значений перспективы и перемещения по оси Z. Элементы с отрицательным значением translateZ
прокручиваются медленнее, чем с положительным. Чем дальше это значение от 0, тем более выраженным получится параллакс-эффект (то есть при translateZ(-10px)
прокрутка происходит медленнее, чем при translateZ(-1px)
).
Разделы страницы с параллакс-эффектом
Предыдущие примеры демонстрировали основные приёмы, используя очень простой контент, но страницы большинства сайтов состоят из отдельных блоков-разделов, к которым можно применять разные эффекты. Вот как это делается.
Для начала нам понадобится элемент .parallax__group
, чтобы сгруппировать наши слои:
Вот CSS-стили для группового элемента:
В этом примере мне нужно, чтобы каждая группа заполняла вьюпорт, поэтому я указал height: 100vh
, однако при необходимости можно указывать разные значения для каждой группы. Значение transform-style: preserve-3d
не даёт браузеру производить слияние слоёв элементов .parallax__layer
, а position: relative
позволяет расположить дочерние элементы parallax__layer относительно группового элемента.
При группировке элементов важно помнить одно правило: нельзя обрезать содержимое группы. Если применить свойство overflow: hidden
к элементу .parallax__group
, параллакс-эффект не будет работать. Если не обрезать контент, элементы-потомки будут выходить за его границы, поэтому придётся проявить изобретательность и использовать разные значения z-index
для групп, чтобы обеспечить правильное скрытие/отображение контента при прокрутке документа.
Не существует чётких правил для решения проблемы с позиционированием слоёв — в разных проектах может быть разная реализация. Гораздо проще устранить неполадки в слоях, если понимать, как работает параллакс-эффект — чтобы увидеть картину яснее можно применить трансформацию к групповым элементам:
Посмотрите на следующий пример — обратите внимание на опцию debug!
Пример с группами
Поддержка браузерами
- Firefox, Safari, Opera и Chrome поддерживают этот эффект.
- В Firefox в данный момент присутствует небольшая проблема с выравниванием, хотя в целом всё работает.
- IE пока не поддерживает свойство
preserve-3d
(скоро будет), так что параллакс-эффект в этом браузере не работает. Но это не страшно, так как ваш дизайн всё равно должен работать и без параллакс-эффекта — сами знаете: прогрессивное улучшение и всё такое!
javascript — Как сделать параллакс показа текста в css?
Решить задачу можно с помощью анимации маски SVG.
- Нижний слой будет красный прямоугольник с текстом.
- Верхний слой будет фиолетовый прямоугольник, к которому применена маска с набором окружностей, у которых
fill="black"
При закраске чёрным цветом маска прорезает верхний слой и становится виден нижний красный слой сквозь эти отверстия.
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <!-- Маска --> <mask> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS</text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" /> </svg>
Теперь можно сделать параллакс
Для этого нужно просто двигать маску:
#1. Горизонтальный параллакс
Начало анимации после клика
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <mask> <g> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> <!-- Анимация движения маски --> <animateTransform attributeName="transform" type="translate" begin="svg1.click" dur="4s" values="0 0;400 0" fill="freeze" restart="whenNotActive" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS</text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" > </rect> </svg>
#2. Вертикальный параллаксм
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <mask> <g> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> <!-- Анимация движения маски --> <animateTransform attributeName="transform" type="translate" begin="svg1.click" dur="4s" values="0 0;0 100" fill="freeze" restart="whenNotActive" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS</text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" > </rect> </svg>
#3. Вертикальный параллакс с возвратом
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <mask> <g> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> <!-- Анимация движения маски --> <animateTransform attributeName="transform" type="translate" begin="svg1.click" dur="4s" values="0 0;0 100;0 100;0 0;0 0" repeatCount="indefinite" restart="whenNotActive" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS</text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" > </rect> </svg>
Update
Анимация движения текста
В этих примерах маска неподвижна, двигается сам текст
#1. По горизонтали
<!-- Анимация движения текста -->
<animateTransform
attributeName="transform"
type="translate"
begin="svg1.click"
dur="6s"
values="0 0;300 0;0 0"
fill="freeze"
restart="whenNotActive" />
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <mask> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS <!-- Анимация движения текста --> <animateTransform attributeName="transform" type="translate" begin="svg1.click" dur="6s" values="0 0;300 0;0 0" fill="freeze" restart="whenNotActive" /> </text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" > </rect> </svg>
#2. По вертикали
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 100" > <mask> <rect fill="white" /> <g fill="black"> <circle cx="0" cy="5" r="30" /> <circle cx="100" cy="90" r="30" /> <circle cx="200" cy="-25" r="80" /> <circle cx="320" cy="50" r="32" /> <circle cx="405" cy="90" r="30" /> </g> </mask> <!-- Красный фон с текстом --> <rect fill="#FE5F55" /> <text x="200" y="65" text-anchor="middle" font-size="48px" font-weight="700" fill="white">BIOS <!-- Анимация движения текста по вертикали --> <animateTransform attributeName="transform" type="translate" begin="svg1.click" dur="4s" values="0 0;0 50;0 -30" fill="freeze" restart="whenNotActive" /> </text> <!-- Синий маскирующий прямоугольник --> <rect mask="url(#msk)" fill="#8E5DF8" > </rect> </svg>
Параллакс. CSS3 для веб-дизайнеров
Параллакс
Если вновь обратиться к сайту-примеру с Луной, можно увидеть, как множественные фоновые изображения используются на элементе body, чтобы создать составное космическое пространство. Вместо одного плоского изображения используются четыре полупрозрачные PNG, поставленные одна поверх другой. Каждой выставлено свое положение по горизонтали, чтобы создать эффект анимации, когда меняется размер окна браузера (рис. 5.01).
Рис. 5.01. Фон на сайте– примере с Луной, где четыре PNG совмещены, чтобы создать эффект космоса
Этот прием быстрой смены слоев обрел название «параллакс», который наши друзья из Википедии определяют так:
Особенная техника прокрутки в компьютерной графике, впервые появившаяся в аркаде 1982 года Moon Patrol. В этой псевдотрехмерной технике «камера» двигает фоновые изображения медленнее, чем изображения на переднем плане. Так в двухмерной графике создается иллюзия глубины и погружения. Техника основана на многоплановых камерах, которые используются в традиционной анимации с 1940-х годов.[12]
В последние годы появилось много великолепных примеров того, как параллакс используется на вебе. Один из моих любимых – сайт Silverback (http://silverbackapp.com), удобное приложение для юзабилити-тестирования от ребят из Clearleft (рис. 5.02).
Рис. 5.02. Измените размер окна браузера на сайте Silverback и насладитесь трехмерным пользовательским опытом
Изменяя размер окна, можно видеть, как ниспадающие виноградные лозы двигаются туда и обратно с разной скоростью, создавая ощущение объема. (Я просидел на этом сайте час, когда впервые увидел его.)
Разумеется, не все увидят это – но те, кто испытает это, увидят замечательную особенность и улучшенный пользовательский опыт: он не может не сделать зрителя чуточку более счастливым.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРесКак создать эффект параллакса с помощью CSS?
Уже довольно давно очень популярны сайты с так называемым эффектом параллакса. Если вы еще не слышали о параллаксе и не очень-то представляете, что это такое, в двух словах его можно описать как эффект, позволяющий прокручивать разные слои в разных направлениях или с разной скоростью. Параллакс очень здорово справляется с созданием оптической глубины, привлекая и удерживая внимание посетителя сайта.
Смотреть пример
В веб-дизайне проще всего достичь эффекта параллакса использованием плагина jQuery. Однако, это связано с некоторыми неудобствами. Этот плагин чаще всего способствует возникновению проблем со scroll-ингом объектов. Чтобы прокрутка была плавной, JavaScript должен обрабатывать тонны событий (а это влечет за собой проблемы с отображением; стоит хорошо подумать, прежде чем использовать его). Для того, чтобы слои перемещались, и при этом перемещались плавно, нужно провести массу вычислений и пересчетов относительно размещения объектов и элементов, а это, в свою очередь, вынуждает проводить огромное количество манипуляций с DOM.
Короче говоря: параллакс на базе JavaScript гарантированно влечет за собой проблемы с плавным скроллингом сайта.
background-position: fixed спешит на помощь!
Немногие знают, что создать эффект параллакса можно с помощью CSS. Смотрите, к примеру:
Пример использования эффекта параллакса на Codeopen
Для получения эффекта параллакса, фоновые изображения должны быть размещены в различных элементах. Эти элементы дополнительно должны быть определены как background-attachment: fixed. Используя background-attachment, поведение и расположение любого фонового изображения возможно будет изменить.
Основной интерес представляет прокрутка, которая, как правило, подразумевает, что расположение изображения фиксировано относительно его элемента. В этом нет ничего фантастически нового, мы все знаем, как это работает. Пользователь прокручивает сайт, элементы двигаются вверх и вниз, и фоновые изображения также двигаются вверх и вниз.
Всё становится гораздо интереснее, когда мы используем background-attachment в свойстве fixed. fixed означает, что фоновые изображения не фиксируются относительно элементов, а закреплены относительно области просмотра. То есть, независимо от прокрутки изображение остается на своей позиции.
Всё это приводит к созданию прекрасного параллакс-эффекта.
Давайте очень кратко рассмотрим, как это работает, на практике:
<!— Four containers for setting the background images —> <div> <div>foo</div> <div>bar</div> <div>baz</div> <div>bazz</div> </div> // setting base styles to image containers [class*=»bg__»] { height: 50vh; |
/* fix background */ background-attachment: fixed; |
/* center it */ background-position: center center; |
/* Scale it nicely to the element */ background-size: cover; |
/* just make it look a bit better 😉 */ &:nth-child(2n) { box-shadow: inset 0 0 1em #111; } } |
.bg__foo { background-image: url( https://s3-us-west-2.amazonaws.com/s.cdpn.io/30354/parallax1.jpg ); } |
.bg__bar { background-image: url( https://s3-us-west-2.amazonaws.com/s.cdpn.io/30354/parallax2.jpg ); } |
.bg__baz { background-image: url( https://s3-us-west-2.amazonaws.com/s.cdpn.io/30354/parallax3.jpg ); } |
.bg__bazz { height: 100vh; |
background-image: url( https://s3-us-west-2.amazonaws.com/s.cdpn.io/30354/parallax1.jpg ); } |
Быстрая проверка кода относительно поддержки работы браузерами на MDN показывает практически глобальную совместимость. Кроме того, он поддерживается IE9 и Android 2.1.
Подведем итог
Лично я отдаю предпочтение CSS перед JavaScript при создании параллакс-эффекта, и, кажется, теперь легко понять, почему. Нет никаких дополнительных логических задач и манипуляций с DOM, — это очень существенный плюс, согласитесь. Помнить нужно только одно.
Даже работая над созданием параллакса в CSS, остается масса задач для браузера. background-attachment: fixed – нужно делать дополнительную прорисовку для браузера, которая может снизить плавность скроллинга и очень уменьшить ваш FPS. Поэтому не забывайте следить за счетчиком FPS, например, в Chrome, — это значительно облегчит вашу работу.
Возможно, Вам будет интересно ↓↓↓
Новогодний параллакс для сайта на JS и CSS3 — IT портал
В предвкушении нового года мы бы хотели поделиться праздничным эффектом, который можно применить у себя на сайте в качестве шапки. При этом добавить замечательный эффект параллакса, который так цениться нашими пользователями, и весьма приятно воспринимается посетителями сайтов. Нам понадобиться немного стилей и магии скриптов, и в результате мы получим эффект движение елок и текста при движении курсора мыши. Давайте посмотрим, что у нас получилось в канун нового года.
Такая заглушка станет отличным дополнением, разместите его на сайте и порадуйте посетителей предновогодним настроением.
Шаг 1. HTML
У нас будут заранее подготовлены изображения, которые мы последовательно будем подключить к нашему документу, у каждого изображения будет свой класс, который отвечает за параметр картинки и ее движение на странице.
</style> <nav> <div> <div></div></div> </nav> <section> <h2>C Новым годом от Rudebox , ребятки!</h2> <div> <ul> <lidata-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> </ul> </div> </section>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
</style> <nav> <div> <div></div></div> </nav> <section> <h2>C Новым годом от Rudebox , ребятки!</h2> <div> <ul> <lidata-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> <li data-depth=»1.00″><img src=»img/layer.png»></li> </ul> </div> </section> |
Нам необходимо добавить несколько слоев, чтобы создать эффект глубины изображения. Это поможет нам немного оживить изображение. Также мы добавили тригер для снега, он будет появляться при нажатии на кнопку.
Данным примером мы хотели добавить немного новогоднего настроения, надеемся вы найдете применение данному эффекту. Остальную часть кода можно просмотреть в исходниках.
Вот и все. Готово!
Похожие материалы:
YouInRoll | Изучай науки просто смотря видео Как сделать параллакс эффект на CSS HTML jQuery. Туториал // Как это сделать? // Фрилансер по жизни
YouInRoll | Изучай науки просто смотря видео Как сделать параллакс эффект на CSS HTML jQuery. Туториал // Как это сделать? // Фрилансер по жизни | онлайн или прямые трансляции
Let your friends enjoy it also!
Условия сообщества и cookie
Privacy policyAccept and close40+ последних бесплатных эффектов прокрутки параллакса на чистом JavaScript и CSS
locomotive-scroll — это современная библиотека JS, которая применяет плавный, тонкий, настраиваемый эффект прокрутки параллакса к элементам при прокрутке в поле зрения.
ДемоСкачать Теги: параллакс, анимация прокруткиБиблиотека JavaScript, которая применяет эффект плавной прокрутки параллакса к фоновым изображениям.
ДемоСкачать Теги: параллаксМертвый простой и сверхлегкий плагин JavaScript, который применяет тонкий эффект прокрутки параллакса к фиксированному фоновому изображению.
ДемоСкачать Теги: параллаксПростая библиотека JavaScript, которая добавляет эффект параллакса к фону, изменяя положение фоновых изображений при прокрутке страницы.
ДемоСкачать Теги: параллаксМаленькая, быстрая, настраиваемая библиотека параллакс-скроллинга для фонов.
ДемоСкачать Теги: параллаксСтильная трехмерная карточка продукта с интерактивной трехмерной параллакс-анимацией движения мыши, как вы видели на Apple TV.
ДемоСкачать Теги: параллаксДвижок анимации Javascript для создания довольно крутых эффектов частиц (например,грамм. пламя, фейерверки, пули, взрывы и т. д.) в современном веб-приложении.
ДемоСкачать Теги: параллаксМинимальная ванильная библиотека JavaScript для реализации тонкого эффекта параллакс-прокрутки любых элементов в документе.
ДемоСкачать Теги: параллаксshadowllax — это крошечная библиотека параллакса JavaScript, которая применяет тонкий эффект прокрутки параллакса к одному или нескольким слоям.
ДемоСкачать Теги: параллаксЕще одна ванильная реализация на JavaScript эффекта плавной прокрутки параллакса для изображений.
ДемоСкачать Теги: параллаксКак создать простой эффект стиля параллакса с помощью CSS
Добавление эффекта стиля параллакса на нашу веб-страницу может действительно выделить ее.
Вы могли видеть этот эффект при прокрутке веб-страниц или приложений.
Он в основном включает фон, в нашем случае изображение, которое прокручивается с другой скоростью, чем остальной контент поверх него.
Вы можете найти рабочий пример кода здесь:
Есть много вариантов для достижения аналогичного эффекта, и многие используют Javascript, но мы собираемся сделать простую версию только для CSS.
- РЕДАКТИРОВАТЬ: Некоторые люди отметили, что это не настоящий параллакс, пожалуйста, не помечено как стиль параллакса и предназначено для быстрого и простого эффекта CSS.
Как? Давайте взглянем.
Во-первых, нам нужен HTML-контент:
<раздел>
~ Прокрутите вниз ~
<раздел>
Классный оверлейный текст ...
<раздел>
~ Прокрутите вверх ~
Это даст нам 3 раздела, верхний и нижний, которые являются нашим «обычным» контентом. И средний раздел, содержащий изображение.
Теперь о CSS, для начала, это будет простой стиль, не связанный с параллаксом:
.top, .bottom {
фон: светлый серый;
высота: 100vh;
}
раздел {
/ * выравниваем текст * /
дисплей: гибкий;
justify-content: center;
align-items: center;
}
Это придаст серый фон верхней и нижней секциям, и вскоре эти секции будут перемещаться по средней секции.
Чтобы параллакс работал, нам нужно добавить фоновое изображение для прокрутки:
.parallax {
/ * устанавливаем изображение для фона * /
background-image: url ('https://res.cloudinary.com/djn1ticju/image/upload/v1594285691/parallax-background.jpg');
/ * изображение в полную высоту * /
высота: 100vh;
/ * начальная позиция изображения - например. сверху, справа, слева, снизу * /
background-position: center;
/ * размер изображения, например, 50%, 3rem, 500 пикселей и т. д.
cover = масштабирует изображение как можно больше без растяжения
* /
размер фона: обложка;
}
В результате мы получим довольно обычный веб-сайт с 3 разделами, которые прокручиваются вместе:
Чтобы получить желаемый эффект, ключевая часть — установить фиксированное фоновое изображение
.parallax {
/ * ... в остальной части кода в этом селекторе .parallax: * /
/ * Чтобы получить желаемый эффект, ключевой частью является установка фиксированного фонового изображения * /
background-attachment: исправлено;
}
А теперь попробуйте прокрутить в браузере и посмотреть эффект!
10 лучших эффектов прокрутки параллакса (обновление 2021)
Что такое эффект параллакс-прокрутки?
Parallax scrolling — это потрясающий эффект прокрутки, который заставляет элемент прокручиваться с другой скоростью, чем прокрутка страницы.
Эффект прокруткиParallax обычно используется в современном веб-дизайне, где фоновое изображение прокручивается медленнее, чем передний план, когда пользователь прокручивает веб-страницу вниз.
Лучший плагин для параллакс-прокрутки
В этом посте вы найдете 10 лучших решений на JavaScript и чистом CSS, которые помогут вам реализовать эффект прокрутки параллакса для элементов при прокрутке страницы вниз или вверх. Я надеюсь тебе понравится.
Первоначально опубликовано 17 ноября 2017 г., обновлено 15 января 2021 г.
Содержание:
- Плагины jQuery Parallax Scrolling
- Библиотеки прокрутки с параллаксом Vanilla JS
- Эффекты прокрутки Parallax на чистом CSS
Плагины jQuery Parallax Scrolling:
Высокопроизводительный фоновый эффект параллакса с jQuery и CSS3 — jarallax
Добавление эффекта плавной прокрутки параллакса к изображениям, фоновым изображениям, видео Youtube / Vimeo / HTML5 и любым элементам HTML с помощью преобразований CSS3 3D (translate3d).
[Демо] [Скачать]
Эффекты горизонтальной / вертикальной прокрутки параллакса в jQuery — paroller.js
paroller.js — это плагин jQuery, который применяет эффекты горизонтальной / вертикальной прокрутки параллакса к фону или переднему плану любого элемента DOM.
[Демо] [Скачать]
Библиотека JavaScript с эффектом прокрутки параллакса изображения — SimpleParallax
Простой и легкий плагин Vanilla JavaScript, который применяет тонкий эффект прокрутки параллакса к любым изображениям в документе, используя масштабирование CSS3 и свойства перевода.
[Демо] [Скачать]
Эффект параллакса фона при прокрутке или движении мыши — jQuery parallaxBackground
Еще один плагин фонового параллакса jQuery, который применяет тонкую анимацию (поворот, сдвиг и масштабирование) к фоновым изображениям при прокрутке веб-страницы (или запускаемой движением мыши).
[Демо] [Скачать]
Подключаемый модуль Tiny Parallax Background в JavaScript — Parlx.js
parlx — это чрезвычайно легкий плагин jQuery, используемый для создания эффектов параллаксной прокрутки путем изменения положения фона с помощью преобразований CSS3 2D (translateY).
[Демо] [Скачать]
Библиотеки эффектов прокрутки Vanilla JS Parallax:
локомотив-улитка
locomotive-scroll — это современная библиотека JS, которая применяет плавный, тонкий, настраиваемый эффект прокрутки параллакса к элементам при прокрутке в поле зрения.
Demo Скачать
Универсальный параллакс
Небольшой плагин JavaScript для реализации плавного, удобного для мобильных устройств эффекта параллакс-прокрутки в вашем веб-приложении.
Demo Скачать
Легкая ванильная библиотека параллаксов JavaScript — rellax
rellax — это небольшая ванильная библиотека JavaScript, которая обеспечивает плавный эффект прокрутки параллакса для любых элементов DOM.
[Демо] [Скачать]
Эффекты прокрутки Parallax на чистом CSS:
Фоновые изображения Parallax на чистом CSS
Чрезвычайно простое решение CSS для применения эффектов прокрутки параллакса к фоновым изображениям при прокрутке веб-страницы вниз.
Demo Скачать
Эффект прокрутки параллакса с фиксированным положением на чистом CSS
Решение на чистом CSS для реализации эффекта параллакса с фиксированной позицией на фоновых изображениях при прокрутке веб-страницы вниз. Работает как на мобильных, так и на настольных компьютерах.
Demo Скачать
Заключение:
Хотите больше плагинов jQuery или библиотек JavaScript для создания потрясающих ротаторов текста в Интернете и на мобильных устройствах? Ознакомьтесь с разделами jQuery Parallax Scrolling и JavaScript / CSS Parallax Scrolling.
См. Также:
- 10 лучших эффектов прокрутки параллакса JavaScript и CSS
- 10 лучших компонентов Parallax Scroll для приложений React и React Native
- Назад: 10 лучших (линейных) компонентов индикатора выполнения в JavaScript и CSS (2020)
- Далее: Еженедельные новости веб-дизайна и разработки: Collective # 215
Создание простой прокрутки параллакса с помощью CSS3 и jQuery
Как веб-разработчик, в какой-то момент вас попросят сделать параллакс, и есть много плагинов там вы можете выбрать из.Проблема с этими плагинами заключается в том, что некоторые из них не обновляются годами, вы можете провести некоторое исследование, прежде чем рассматривать какой-либо из них.
Если вы не хотите попасть в устаревшую «ловушку», в этой статье показано, как создать простое решение с помощью CSS3 и jQuery. С помощью CSS3 background-size: cover
и background-attachment: fixed
мы можем создать «псевдо» параллакс на чистом CSS, для примера и примера из w3schools.
Я называю их «псевдо» параллаксом, потому что они не совсем правильные, так как фон является фиксированным при прокрутке страницы вверх и вниз.Чтобы получить правильный эффект параллакса, фон должен двигаться с разной скоростью, когда движется передний план . Существует метод с использованием CSS и преобразования
для достижения чистого параллакса CSS, ознакомьтесь с этим руководством. Но мне сложно управлять макетом с помощью этой техники, поэтому мое решение — использовать JavaScript, чтобы помочь мне выполнить две вещи для создания этого параллакса.
- Чтобы проверить, находится ли элемент в области просмотра:
функция isInViewport (узел) {
var rect = node.getBoundingClientRect ()
возвращаться (
(rect.height> 0 || rect.width> 0) &&
rect.bottom> = 0 &&
rect.right> = 0 &&
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.left <= (window.innerWidth || document.documentElement.clientWidth)
)
}
- Для расчета коэффициента прокрутки каждого элемента.
$ (окно) .scroll (function () {
var scrolled = $ (окно) .scrollTop ()
$ ('.параллакс '). each (function (index, element) {
var initY = $ (это) .offset (). вверх
var height = $ (это) .height ()
var endY = initY + $ (это) .height ()
// Проверяем, находится ли элемент в области просмотра.
var visible = isInViewport (это)
if (visible) {
var diff = scrolled - initY
var ratio = Math.round ((разница / высота) * 100)
$ (this) .css ('background-position', 'center' + parseInt (- (ratio * 1.5)) + 'px').
}
})
})
Заключение
В результате получается простой параллакс, и у вас больше контроля над кодом и компоновкой.Вы можете увидеть, как это работает, здесь. Вы можете скачать рабочий образец выше на GitHub. Сообщите мне, что вы думаете, и каковы были бы ваши решения. Все предложения, пожалуйста, оставьте комментарий ниже. Надеюсь это поможет.
Кодовые ссылки
- https://www.w3schools.com/howto/howto_css_parallax.asp
- https://codepen.io/lemagus/pen/RWxEYz
- http://www.hnldesign.nl/work/code/check-if-element-is-visible/
Создание эффекта параллакса CSS
с Джереми Осборном
В сегодняшнем дубле 5 вы создадите эффект прокрутки фонового изображения, как показано здесь.Этот эффект похож на эффект параллакса, который можно найти во многих местах в Интернете, например в этом.
Ваша версия будет использовать CSS background-size: cover
и background-attachment: fixed
features, а также небольшую высоту окна просмотра, или vh
единиц. Вот проект на CodePen, с которым вы будете работать, и вот URL, ссылка на который вы также можете найти в разделе Resources этого видео.
В вашем HTML вы увидите три div
, каждый из которых имеет класс bg
и индивидуальное имя идентификатора - bg-1
, bg-2
и bg-3
.И есть также четвертый div
с содержанием класса
.
В CSS стиль div
имеет тонкую черную рамку, чтобы помочь вам визуализировать div
s, а высота установлена на 200 пикселей. В классе bg
для этого значения background-repeat
установлено значение no-repeat , что означает, что изображения отображаются только один раз. И наконец, обратите внимание, что каждый идентификатор указывает на фоновое изображение.
Теперь я специально установил высоту div
на 200 пикселей.Я хотел показать вам, что не очевидно, что высота всех фоновых изображений на самом деле составляет 550 пикселей.
Увеличьте высоту div
s до 300 пикселей, чтобы отобразить больше изображения.
Увеличьте его до 600 пикселей, и вы увидите все изображение, а также дополнительные 50 пикселей.
Вы вернетесь к этой высоте через секунду, но сначала отцентрируйте изображения в стиле bg, набрав: background-position: center center;
.
Затем добавьте свойство background-size
и присвойте ему значение cover .Свойство background-size
со значением cover масштабирует изображение как можно больше без увеличения ширины или высоты.
Если вы используете эту технику, вот некоторые вещи, о которых следует остерегаться. Если вы возьмете небольшое изображение почтовой марки, подобное этому, и увеличите его до полной страницы, оно будет выглядеть как мусор.
С другой стороны, если вы используете изображение с высоким разрешением, оно будет отлично смотреться в полном размере, но ваш пользователь платит за производительность, будучи вынужденным загружать излишне большие изображения.Поэтому, пожалуйста, найдите время, чтобы найти правильный баланс между качеством изображения и размером изображения для ваших проектов.
Вернувшись в свой проект, вы можете увидеть, как изображения теперь покрывают весь диапазон div
в максимально возможной степени. Продолжайте и добавьте это дополнительное свойство высоты и значение после исходного - height: 90vh;
.
Значение 600 пикселей оставлено по причинам возврата. Современный браузер будет использовать устройство vh
, потому что он последний по порядку.Более старый браузер, который не поддерживает единицы vh
, проигнорирует единицы vh
и будет использовать значение 600 пикселей. Возможно, вы не привыкли к устройствам vh
, поэтому сохраните свой проект и перейдите в полноэкранный режим, пока я буду объяснять.
Один блок vh
равен 1% начального содержащего блока окна просмотра. Это означает, что 90vh
устанавливает высоту вашего div
s на 90% области просмотра или окна браузера.
Вы можете увидеть это в режиме просмотра всей страницы.Если вы прокрутите до самого верха, вы увидите, что нижняя часть первого div
заканчивается здесь на высоте 90%. Оставшиеся 10% - это верхняя часть вашего второго div
. Прокрутив вниз, вы увидите, что все ваши div и
будут иметь одинаковую высоту.
Итак, вернемся к редактору. И вы добавите настоящую звезду шоу. Идите вперед и введите: background-attachment: fixed;
. Фиксированное значение заставляет фоновые изображения оставаться на месте.Если вы сохраните документ и перейдете в полноэкранный режим, вы увидите, как это происходит.
Так что это немного дезориентирует, но в то же время круто. Фактически происходит то, что блоки div и
движутся, а фоновые изображения - нет. Имейте в виду, что это просто декоративные фоновые изображения. Внутри вашего div
s нет содержимого.
У нас нет времени исследовать, что еще вы могли бы с этим сделать, но в качестве быстрого примера скопируйте самый последний div
и вставьте его между div
s 2 и 3.Затем продолжайте и сохраняйте и просматривайте в полном виде.
Теперь одна важная проблема, о которой следует помнить, - это большая проблема с большинством мобильных браузеров и с этим эффектом. На caniuse.com вы можете увидеть, что комбинация background-attachment: fixed
и background-size: cover
просто не работает на iOS.
Есть несколько обходных путей для решения этой проблемы, но у нас нет времени описывать их в этом видео. Однако, если вам нужно погрузиться в эти исправления, обратитесь за помощью в наш раздел Ресурсы . На этом пока все. Спасибо за просмотр. Если вам нравится это видео и вы хотите узнать больше о CSS, не забудьте посмотреть другие наши видеоролики Take 5, а также остальную часть каталога курсов в Gymnasium.
Прокрутка параллакса с помощью CSS (пример)
Есть несколько способов создания эффекта прокрутки параллакса. Большинство примеров, которые вы найдете при поиске в StackOverflow и т. Д., Содержат примеры перемещения отдельных слоев или div с помощью jQuery, запускаемых событием onscroll в документе.В этом блоге описан более эффективный способ решения этой проблемы, который означает лучшую производительность, более простой код в сопровождении и более семантическое значение самой разметки.
Демо
Рабочая демонстрация в webkit - технология поддерживается во всех основных браузерах с поддержкой HTML5 (IE10 +, Safari, Chrome и Firefox). Демонстрация прямо сейчас оптимизирована для Webkit, но я планирую сделать так, чтобы она работала и во всех других браузерах:
Демо
Но сначала несколько слов о Parallax Scroll
Parallax Scroll - это старая техника имитации глубины обзора в компьютерных играх, популярная с 1982 года, когда первая игра Moon Patrol представила ее в играх.Основная идея состоит в том, что объекты, которые находятся дальше, перемещаются медленнее по отношению к объектам впереди, и, имитируя этот эффект, мы получаем ощущение трехмерности на нашем двумерном экране.
HTML5 и flash
ПрокруткаParallax использовалась в Интернете уже несколько лет, и старый сайт Iteams, выпущенный в 2010 году, был основан исключительно на этом эффекте. Несколько лет назад мы не могли хорошо смоделировать этот эффект с помощью стандартного HTML, и нам потребовалось множество уловок, таких как установка положения фона, откат на flash и т. Д.
Добро пожаловать в CSS3 и TranslateZ
Теперь у нас есть мощные инструменты, встроенные в CSS3, которые позволяют нам напрямую общаться с графическим процессором, и вместо использования Javascript для управления размещением наших элементов по отдельности мы можем перемещать их все вместе, что повышает производительность и открывает новые возможности.
Мобильная проблема
К сожалению, пока нет хороших способов воспроизвести эффект на мобильном устройстве, и причина этого в том, что события прокрутки запускаются только после остановки прокрутки, в то время как прокрутка происходит только путем перемещения растрового изображения с помощью графического процессора.Если кто-нибудь знает какие-нибудь хитрости, я обновлю этот блог - было бы здорово также поддерживать мобильные устройства семантическим способом.
Решение
Основной трюк состоит в том, чтобы каждый элемент располагался с правильной позицией Z относительно вашей нормальной глубины, которая составляет 0,
. translateZ: -30px
Примените некоторую перспективу к вашему телу
кузов {
-webkit-перспектива: 500;
-webkit-перспектива-происхождение: 0 0;
}
Теперь вы просто обновляете исходную точку перспективы всякий раз, когда пользователь прокручивает страницу.Это означает, что все элементы будут перемещаться графическим процессором индивидуально, и никакие циклы ЦП не будут тратиться зря на их отслеживание. Поскольку вы фактически перемещаете перспективу, вы также можете использовать это, чтобы показать реальные 3D-объекты, такие как графики, метки на карте, тени, отражения или другие интересные вещи, которые вы могли бы придумать.
После того, как вы применили правильную глубину к своим элементам, просто добавьте эту строку, чтобы скорректировать перспективу:
<сценарий>
window.onscroll = function () {
документ.body.style.webkitPerspectiveOrigin =
window.scrollX + "px" +
window.scrollY + «пикс»;
}
10+ {ОБНОВЛЕНО} Чистые эффекты параллакса CSS
Эффекты параллакса CSS - Вы ищете эффекты параллакса CSS? Если да, то в этом посте я собираюсь поделиться отобранными вручную эффектами параллакса CSS для вас. Эффект параллакса уже много лет используется в классических видеоиграх, но стал трендом в мире веб-дизайна. Этот классный эффект теперь обычно используется как часть функции прокрутки веб-страницы.Он использует несколько фонов, которые, кажется, движутся с разной скоростью, чтобы создать ощущение глубины (создавая эффект искусственного 3D) и интересного просмотра. Термин происходит от греческого «параллаксис», что означает «изменение». Вы можете использовать эти CSS Parallax Effects в своих следующих веб-проектах.
Эффекты параллакса на чистом CSS
Ниже приведен список популярных эффектов параллакса на чистом CSS.
Галерея изображений Parallax
- ДЕМО / КОДСкрипт галереи изображений Parallax , созданный с помощью HTML / CSS / JavaScript и написанный Booligoosh .
3D CSS Parallax Depth Effect
- DEMO / CODE3D CSS Parallax Depth Effect script, созданный с помощью HTML / CSS (SCSS) / JavaScript (Babel) и написанный dazulu .
Mouse Move Parallax
- ДЕМО / КОДСценарий Mouse Move Parallax , созданный с помощью HTML / CSS / JavaScript и написанный oscicen .
Сценарий Parallax Grid , созданный с помощью HTML / CSS / JavaScript и написанный пользователем caseycallis .
Image Cutout, Parallax Effect: CSS + SVG
- DEMO / CODEImage Cutout, Parallax Effect: CSS + SVG script, сделанный с HTML / CSS и написанный alexoneal .
Фон параллакса
- ДЕМО / КОДФон параллакса скрипт, созданный с помощью HTML (Pug) / CSS (SCSS) и написанный ravid7000 .
CSS-Only Parallax Effect
- DEMO / CODECSS-Only Parallax Effect script, созданный с использованием HTML (Pug) / CSS и написанный yagoestevez .
Только CSS Скрипт Parallax , созданный с помощью HTML (Pug) / CSS (SCSS) и написанный пользователем silvandiepen .
Page Top Скрипт Parallax , созданный с помощью HTML / CSS (SCSS) / JavaScript (TypeScript) и написанный jakob-e .