Сегодня мы рассмотрим пошаговый процесс создания впечатляющей технологии, которую можно использовать для создания эффекта, очень похожего на параллакс, не используя при этом ни строчки Javascript; она может быть достигнута с помощью очень простого способа и на чистом CSS.
Прежде чем продолжить чтение, посмотрите на демо-результат, чтобы сразу оценить, что мы будет изучать в данной статье (чтобы увидеть эффект, вам необходимо воспользоваться настольным компьютером или ноутбуком).
Данный прием может быть применен для создания страниц с описанием продукта или даже для своего рода презентаций типа Powerpoint/Keynote. В этом приеме кроется большой потенциал для создания иллюстрированных online-страниц.
Ниже описан способ, как можно добиться такого результата.
Это все CSS
Основой данного приема является CSS-свойство
1
background-attachment: fixed
, которое доступно для использования веб-разработчиками, начиная с версии CSS2.1. Любое фоновое изображение, к которому применено данное свойство, начинает занимать фиксированное положение относительно окна браузера. Мы воспользуемся данным свойством для того, чтобы зафиксировать иллюстрации страницы в определенном месте, в то время как весь остальной контент будет перемещаться при прокрутке.
Стоит обратить внимание на пару моментов относительно данного CSS-свойства - оно применяется для фоновых изображений и задает им фиксированное положение относительно окна браузера; на изображение с данным свойством не оказывают влияние CSS-свойство margin, как если бы это было с обычными фоновыми изображениями.
Также необходимо помнить, что данное CSS-свойство прекрасно работает в десктопных версиях браузеров; однако в мобильной версии браузера Chrome оно работает некорректно, а в остальных мобильных браузерах возможно отображение страницы рывками. Поэтому, несмотря на то, что посетители с мобильных устройств будут прекрасно видеть все изображения на странице, сам эффект скроллинга лучше всего смогут оценить пользователи настольных систем.
Основные шаги
Основные шаги, которые нужно выполнить, чтобы получить тот результат, который был на демо-странице, следующие:
Создать элемент-контейнер и наполнить его содержимым
Задать для контейнера (в нашем случае это блок
1
div
) с одной стороны padding, равный 50%-м от ширины контейнера, таким образом сдвинув весь контент в противоположную сторону
Добавить на страницу фоновое изображение шириной, равной 50%-м от ширины контейнера и поместить его на противоположной стороне от контента
Задать для фонового изображения CSS-свойство
1
background-attachment: fixed;
и любоваться результатом!
Давайте шаг за шагом детально разберемся с тем, как все это делается. Для статьи подготовлены исходные материалы, которые вы можете получить по данной ссылке, так что в вашем распоряжении уже будут готовые изображения нужного размера.
1. Основная настройка
Для начала давайте создадим папку проекта и добавим в нее индексный файл
1
index.html
, а также папку
1
css
с вложенным в нее файлом стилей
1
style.css
. Скопируйте и поместите четыре изображения из скачанного архива в папку с именем
1
images
.
Добавьте следующую HTML-разметку в файл
1
index.html
:
Данным действием мы создали основной HTML-каркас страницы, подключили к нему файл CSS-стилей и шрифт Roboto с сервиса Google Fonts. Внутри HTML-каркаса мы создали первый блок-контейнер
1
div
с содержимым, к которому будем применять CSS-свойства.
Блок-контейнер div имеет три класса:
1
.content
- служит для задания CSS-свойств, общих для всех блоков-контейнеров;
1
.right
- задает контейнеру правило для смещения его содержимого вправо (немного позже мы будет создавать контейнеры со смещенным влево контентом);
1
.illustration_01
- создает правило для использования конкретного фонового изображения и для задания фонового цвета блока-контейнера.
Стилизация
Теперь у нас все готово для создания CSS-стилей нашей страницы. Начнем с добавления в файл style.css основных правил сброса стилей и форматирования шрифта:
В этом классе заключена почти вся магия нашего примера. Для текста задаем размер шрифта и цвет. Для фона блока-контейнера задаем свойство
1
background-size: 49% auto;
.
Это означает, что фоновое изображение блока будет всегда растягиваться или сжиматься в своем размере, стремясь заполнить 49% от ширины страницы; высота изображения при этом будет изменяться пропорционально. В нашем примере мы используем значение 49% вместо 50%, потому что браузер Firefox иначе будет отображать артефакт в виде странной линии по середине окна браузера.
Затем мы задаем правило
1
background-attachment: fixed;
, которое, как вы уже знаете из предыдущего описания, заставляет фоновое изображение занимать фиксированное положение относительно окна браузера.
И наконец, мы задаем правило
1
background-repeat: no-repeat;
чтобы наше изображение повторялось только один раз на странице.
Теперь добавим в стили еще один класс
1
.right
:
Этот последний класс помещает текст контейнера в одной половине экрана, а фоновое изображение - в другой половине.
Правило
1
background-position: 0 50%;
задает для фонового изображения нулевую позицию относительно левого края окна браузера и выравнивает его точно по центру по вертикали окна.
Наконец, для класса
1
.illustration_01
добавляем следующее содержимое:
Таким образом задается конкретное изображение и фоновый цвет контейнера.
Проверим нашу страницу - мы должны увидеть следующий результат:
Когда вы будете прокручивать страницу вниз, то увидите, что содержимое этой страницы будет перемещаться, в то время как изображение будет оставаться на своем месте.
Добавляем второй контейнер
Давайте добавим еще один контейнер, в котором содержимое будет смещено влево. Добавьте HTML-контейнер ниже последнего блока
1
div
:
Обратите внимание, что на этот раз мы используем класс
1
.left
вместо класса
1
.right
; также изменяем порядковый номер класса
1
.illustration_01
на
1
.illustration_02
.
Добавляем два новых класса в таблицу стилей:
На этот раз мы добавляем padding, равный 50%, с правой стороны блока-контейнера так, чтобы контент внутри блока смещался влево; фоновое изображение позиционируем по горизонтали на 100% - другими словами, вправо до упора. Также добавляем другой цвет для фоновой заливки блока и меняем файл изображения для фоновой картинки.
Снова проверим результат нашей работы и прокрутим страницу вниз в окне браузера. Когда мы достигнем нижнего края первого блока-контейнера то увидим, как начнет появляться верхний край второго блока, постепенно скрывая при этом первое фоновое изображение и открывая второе:
Добавляем блок-разделитель
Наш пример будет гораздо эффектнее смотреться, если мы добавим блок-разделитель между двумя блоками-контейнерами. Давайте так и поступим.
Между двумя блоками div вставляем следующий HTML-код:
И для него в таблице стилей создаем отдельный класс с несколькими правилами:
Теперь, если обновить нашу страницу-пример, то мы заметим, как между двумя контейнерами появился замечательный блок-разделитель:
Третий и четвертый контейнеры
Пример почти готов и мы можем добавить в него оставшиеся блоки-разделители и блоки-контейнеры. Для этого вставим нижеследующий HTML-код в индексную страницу index.html:
И добавим в таблицу стилей классы для двух оставшихся фоновых изображений:
Теперь потребуется вся ширина монитора для того, чтобы отобразились третий и четвертый блоки-контейнеры:
Прокручиваем страницу до конца и видим последний блок-разделитель:
Делаем страницу адаптивной
Последний штрих, который нам необходимо выполнить - это учесть вариант отображения нашей страницы на экранах устройств с разными размерами. Когда область просмотра страницы становится слишком маленькой для того, чтобы вмешать фоновые изображения, нам необходимо сделать так, чтобы картинки страницы из фоновых становились встраиваемыми (через тег
1
img
).
Для этого в начале каждого из блоков-контейнеров вставим еще один блок
1
figure
с классом
1
.smallscreen
, внутри которого поместим тег
1
img
для вставки тех же самых изображений, которые мы использовали для фона нашей страницы.
Для первого блока-контейнера добавим в его начало:
Второй блок-контейнер будет содержать:
Начало третьего блока-контейнера:
Четвертый контейнер:
Класс
1
.smallscreen
мы будем использовать для того, чтобы по умолчанию скрывать изображения
1
<image src="images/miniblack.png">
, но показывать их, когда размер экрана становиться маленьким.
Для этого добавим в таблицу стилей следующее правило:
И затем добавим медиа-запросы, которые будут отвечать за то, отображать ли на странице изображение как фоновую картинку или же как встроенную (обычную) картинку. Они также будут отвечать за то, чтобы пропорционально уменьшать размер текста страницы и расстояния в разметке таким образом, чтобы ширина страницы точно отвечала различной ширине области просмотра экрана устройств.
Для этого добавим медиа-запросы в таблицу стилей:
В приведенном выше коде первые четыре медиа-запроса просто уменьшают размер теста страницы и padding внутри блоков-контейнеров таким образом, чтобы ширина страницы соответсвовала ширине экрана.
В пятом медиа-запросе с правилом
1
max-width: 50rem
мы включаем код, который делает класс
1
.smallscreen
видимым, удаляет 50%-ый padding у содержимого блока-контейнера и скрывает фоновое изображение на странице. Когда медиа-запрос “обнаруживает”, что большое фоновое изоражение больше не вписывается в размер окна, он заменяет фоновое изображение на обычное, которое помещается в начале контента блока-контейнера.
Теперь после обновления уменьшаем страницу и в результате получаем плавно изменяемую ширину, которая подстаивается под различные размеры областей просмотра, до тех пор, пока размер не станет самым маленьким:
Заключение
Даже после многих лет работы с CSS я не устаю удивляться все увеличивающемуся количеству потрясающих вещей, которые можно сделать с помощью CSS. И чем проще прием, тем более впечатляющий получается результат.
Попробуйте сами создать описанный выше прием - это быстро и легко и должно вам понравиться!
В Visual Studio Code по умолчанию стоит настройка, которая отображает на владке Explorer вложенные папки таким образом:![VSC - Default Vi...… Continue reading