Как сделать прокручивающийся блок css

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

Контейнеры с горизонтальной прокруткой становятся все более популярными. Особенно среди мобильно оптимизированных сайтов, где они используются для уменьшения высоты веб-страниц.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

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

Существует два способа сделать эти div горизонтально прокручиваемыми.

Метод пустого пространства

Вот CSS, который нам нужен. Никаких префиксов и jQuery. Простое использование overflow и еще одного свойства.

Метод Flexbox

Flexbox также может выполнить эту работу.

Мы используем flex-wrap для достижения того же эффекта, что и в предыдущем примере.
Поддержка браузерами решения на основе flexbox лучше. Оно работает в IE и Edge.

Overflow прокрутка

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

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

Полосы прокрутки

По умолчанию контейнер с прокручиваемым контентом будет иметь полосы прокрутки. Но что, если мы не хотим добавлять скроллинг? Такое решение легко реализовать. Хотя работает оно только в браузерах на WebKit.

Заключение

Контейнеры с горизонтальной прокруткой становится все более распространенными.Поэтому лучше сохранить эти примеры:они понадобятся вам в будущем. Также можно обернуть код в медиа-запрос и отобразить горизонтальную прокрутку только для определенных устройств. И никакой головной боли с jQuery!

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

Источник

Прокручиваемый HTML-блок

Создаем блок с прокручиваемым текстом с помощью CSS и HTML

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Прокручиваемый HTML-блок — это блок, в котором, когда его содержимое больше размеров самого блока, справа и снизу появляются полосы прокрутки. Другими словами, если у вас есть блок, в котором может поместиться около 50 слов, и у вас есть текст, состоящий из 200 слов, в прокручиваемом HTML-блоке появятся полосы прокрутки, чтобы вы могли видеть остальные 150 слов. В стандартном HTML-блоке дополнительный текст просто выходит за его границы.

Создать прокручиваемый HTML-блок ( скролл для сайта ) довольно просто.

Что делать с дополнительным текстом?

Когда текста больше, чем может поместиться в доступное пространство макета, у вас есть несколько вариантов:

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

HTML и CSS для этого :

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

Вы можете добавить полосы прокрутки не только для текста

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

В этом примере изображение размером 400 на 509 пикселей размещено внутри абзаца, размер которого составляет 300 на 300 пикселей.

Полосы прокрутки могут использоваться в таблицах

Длинные таблицы могут быть очень трудными для восприятия, но, помещая их в блок div ограниченного размера, а затем, добавляя свойство overflow ( как способ сделать скролл ), можно создавать таблицы с большим количеством данных, которые не займут слишком много пространства на странице,

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

Firefox поддерживает использование overflow для тегов TBODY

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

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

Источник

Как создать div блок с прокруткой?

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css
1. Что такое overflow в CSS?
2. Свойства и значения overflow
3. Принудительная установка вертикальной и горизонтальной прокрутки в блоке CSS
4. Пример div блока с прокруткой

В данной статье мы разберём вопрос создания блока (div) фиксированного размера с возможностью прокрутки по горизонтали и вертикали. Это можно реализовать средствами CSS. За это отвечает свойство overflow.

О полезном свойстве overflow

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

Код CSS

Свойства и значения overflow

Рассмотри пример класса CSS. В width и height устанавливаем нужные нам ширину и высоту блока (за них не будет выходить содержимое блока), а свойством overflow: auto; задаем прокрутку по горизонтали в случае надобности

Код CSS

Принудительная установка прокрутки в блоке CSS

Можно также принудительно создать прокрутку по высоте и ширине. Для этого каждой оси: overflow-y: scroll; (вертикаль) overflow-x: scroll; (горизонталь) укажем параметр scroll, принудительная прокрутка.

Код HTML и CSS

Пример div блока с прокруткой

Код HTML и CSS

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

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

Спасибо за внимание! Надеюсь статья была полезна!

Источник

Практика использования спецификации CSS Scroll Snap

Часто ли у вас возникало желание воспользоваться какой-нибудь возможностью CSS, позволяющей, без лишних усилий, создать элемент-контейнер, поддерживающий прокрутку? CSS, что очень хорошо, даёт нам такую возможность. Я, когда только начинал заниматься фронтенд-разработкой, пользовался для создания прокручиваемых элементов JavaScript-плагинами. Но иногда нужно что-то такое, что позволяет создавать подобные элементы просто и быстро, без привлечения JavaScript. Сделать это можно, воспользовавшись спецификацией CSS Scroll Snap.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Здесь я хочу раскрыть основы практического использования этой спецификации. Я сам только недавно разобрался с CSS Scroll Snap, поэтому рассказывать всё это буду, так сказать, «по горячим следам».

Зачем использовать CSS Scroll Snap?

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

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

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

Основы работы с контейнерами, поддерживающими прокрутку

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Контейнер, поддерживающий прокрутку элементов

Это — база, на основе которой создаются контейнеры, поддерживающие прокрутку. Но для достижения нашей цели одного этого недостаточно. Для того чтобы с подобным контейнером было бы удобно работать, над ним ещё надо потрудиться.

Проблема контейнеров, поддерживающих прокрутку содержимого

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

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Работа с обычным контейнером, поддерживающим прокрутку

Как видите, каждый элемент приходится буквально «вести» на его место, не отрывая палец от экрана. Это — не «свайп» и это очень неудобно с точки зрения пользователя. Но, используя возможности CSS Scroll Snap, мы можем решить эту проблему, просто описав точки привязки (snap point), которые упростят горизонтальную или вертикальную прокрутку содержимого страницы.

Знакомство с CSS Scroll Snap

Для того чтобы воспользоваться возможностями CSS Scroll Snap дочерние элементы должны выводиться внутри контейнера в inline-режиме. Сделать это можно с использованием одного из вышеописанных методов. Я использую для этих целей Flexbox-макет.

Теперь нам, чтобы спецификация CSS Scroll Snap заработала бы, нужно воспользоваться ещё парой свойств. Главный вопрос тут заключается в том, куда именно их нужно добавить.

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Элементы привязаны к началу контейнера

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

▍Свойство scroll-snap-type

▍Оси контейнера

Оси контейнера представляют собой направления прокрутки содержимого этого контейнера. Прокрутка может осуществляться по горизонтали или по вертикали. Значение x указывает на горизонтальную прокрутку, значение y — на вертикальную.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Горизонтальная прокрутка и вертикальная прокрутка

▍Настройка жёсткости привязки

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Элементы жёстко привязаны к началу контейнера

Здесь можно найти видео к этому примеру.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Прокрутка с привязкой

А вот — интерактивный вариант этого примера.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Работа с интерактивным вариантом примера

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Элементы привязаны к началу контейнера менее жёстко

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Последствия использования значения proximity

▍Свойство scroll-snap-align

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Значения свойства scroll-snap-align и их влияние на содержимое, расположенное в контейнере по горизонтали

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Значения свойства scroll-snap-align и их влияние на содержимое, расположенное в контейнере по вертикали

Ниже приведено несколько видеопримеров.

▍Привязка содержимого к началу контейнера

При установке свойства scroll-snap-align в значение start содержимое контейнера привязывается к его началу.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Привязка содержимого к началу контейнера

▍Привязка содержимого к центру контейнера

При установке свойства scroll-snap-align в значение center содержимое контейнера привязывается к его центру.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Привязка содержимого к центру контейнера

▍Привязка содержимого к концу контейнера

При установке свойства scroll-snap-align в значение end содержимое контейнера привязывается к его концу.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Привязка содержимого к концу контейнера

▍Использование свойства scroll-snap-stop

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

При слишком быстрой прокрутке некоторые элементы можно пропустить

Вот соответствующие стили:

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Браузер не позволяет пропускать элементы

В результате пользователь, выполнив одно движение, может прокрутить список лишь на один элемент. Благодаря этому можно предотвратить пропуск важных элементов. При таком подходе каждая точка привязки будет напоминать знак «STOP».

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Точки привязки — это, при использовании значения always, то же самое, что и знаки «STOP»

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Эксперименты со свойством scroll-snap-stop

▍Внутренние отступы и свойство scroll-padding

Вот стили, соответствующие сценарию горизонтальной прокрутки:

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Использование свойства scroll-padding при реализации горизонтальной прокрутки

То же самое применимо и к контейнерам с вертикальной прокруткой:

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Использование свойства scroll-padding при реализации вертикальной прокрутки

▍Внешние отступы и свойство scroll-margin

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Использование свойства scroll-margin

Способы использования CSS Scroll Snap

▍Список изображений

CSS Scroll Snap отлично подходит для создания списка изображений. Благодаря этому работать с таким списком будет гораздо удобнее, чем с использованием обычной прокрутки.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Прокручиваемый список изображений

Вот интерактивный вариант этого примера.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Эксперименты со списком изображений

▍Список друзей

Список друзей — это ещё один отличный способ использования CSS Scroll Snap. Нижеприведённый пример взят с Facebook (то есть — перед нами — реальный пример).

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Вот CSS-код к этому примеру:

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Без использования свойства padding-bottom тень выводится не полностью

▍Список аватаров

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Этот подход хорош для тех случаев, когда нужно, чтобы аватар располагался бы по центру контейнера.

Здесь с этим примером можно поэкспериментировать.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Эксперименты со списком аватаров

▍Список разделов, занимающих всю доступную высоту области просмотра страницы

Использование спецификации CSS Scroll Snap может пригодиться и при реализации сценариев вертикальной прокрутки элементов. Например — при организации работы с элементами, занимающими всю высоту области просмотра страницы.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Элементы, занимающие всю высоту области просмотра страницы

Вот разметка к этому примеру:

Здесь можно найти рабочий вариант этого примера.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Элементы, занимающие всю доступную высоту области просмотра страницы

▍Значения inline и block свойства scroll-snap-type

В данном примере значение inline представляет горизонтальное измерение в горизонтальных режимах вывода данных, например — в английском языке. А для языков вроде японского значение inline будет представлять вертикальное измерение.

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

▍Доступность

При применении спецификации CSS Scroll Snap стоит помнить о доступности контента. Вот пример плохого использования этой спецификации. Здесь настройки прокрутки мешают пользователю свободно читать выводимые материалы.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Неудачное использование CSS Scroll Snap

Пожалуйста, постарайтесь так не делать!

Пользуетесь ли вы возможностями CSS Scroll Snap в своих проектах?

Источник

Практика CSS Scroll Snapping

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Браузерная поддержка и базовое использование

С тех пор, как CSS Scroll Snap был представлен в 2016 году, поддержка браузерами существенно улучшилась. К 2018 году Google Chrome (69+), Firefox, Edge, и Safari поддерживали какую-либо версию этого модуля. Согласно CanIUse, на данный момент технология поддерживается всеми современными браузерами.

Примечание от переводчика
Работоспособность приведённых в статье примеров CodePen проверена в мобильных браузерах Firefox и Chrome Canary (в Chrome Stable некоторые еще не сработали)

Использование Scroll Snapping заключается в установке свойства scroll-snap-type для элемента-контейнера и свойства scroll-snap-align для дочерних элементов. Прокрутка элемента-контейнера осуществляться с привязкой к дочерним элементам, которые вы определили. В этом самом простом случае это будет выглядеть следующим образом:

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

Вы можете использовать оба этих метода (если ваш макет позволяет это) для поддержки старых версий браузеров:

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

Свойства контейнера

Как и в случае с любым другим свойством, неплохо бы познакомиться со значениями, которые оно принимает. Свойства из спецификации » scroll snap » применяются как к родителю, так и к дочерним элементам, с определёнными значениями для каждого. Подобно тому, как в Flexbox или CSS Grid родитель становится «flex-» или «grid-» контейнером, можно сказать, что здесь родитель становится scroll-контейнером.

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

scroll-snap-type: «mandatory» vs «proximity»

Значение » mandatory » определяет поведение, при котором всякий раз, когда пользователь прекращает прокрутку, браузер должен возвращать её к точке привязки.

Значение » proximity » менее строгое – оно означает, что браузер может возвращаться к точке привязки, если ему это покажется уместным. Из моего опыта, если задано это значение, срабатывание происходит, если прокрутка остановилась в пределах нескольких сотен пикселей от точки привязки.

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

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

scroll-padding

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

Свойства дочерних элементов

Теперь давайте перейдём к свойствам дочерних элементов

scroll-snap-align

Данное свойство позволяет указать, какая сторона элемента должна прижиматься к контейнеру. У свойства есть три возможных значения: » start «, » center » и » end «.

Как сделать прокручивающийся блок css. Смотреть фото Как сделать прокручивающийся блок css. Смотреть картинку Как сделать прокручивающийся блок css. Картинка про Как сделать прокручивающийся блок css. Фото Как сделать прокручивающийся блок css

Значения определяются относительно направления прокрутки. Если вы прокручиваете элемент по вертикали, » start » подразумевает верхний край элемента, если по горизонтали – левый. Значения » center » и » end » работают по тому же принципу. Для каждого направления прокрутки можно устанавливать своё значение, разделив их пробелом.

scroll-snap-stop: «normal» vs «always»

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

Это поведение можно изменить, задав любому дочернему элементу свойство » scroll-snap-stop: always «. Это заставляет прокручиваемый контейнер остановиться на этом элементе, прежде чем пользователь сможет продолжить скролить.

Давайте рассмотрим несколько примеров использования технологии «Scroll Snap».

Пример 1: Вертикальный список

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

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

Пример 2: Горизонтальный слайдер

Чтобы сделать горизонтальный слайдер, мы говорим контейнеру привязываться к элементам при прокрутке по оси X. Дополнительно используем свойство » scroll-padding «, чтобы убедиться, что дочерние элементы привязаны к центру контейнера.

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

Пример 3: Вертикальная прокрутка полноэкранных блоков

Мы можем установить точки привязки непосредственно на элементе:

Затем мы задаем каждому блоку размер области видимости и определяем точку привязки по верхнему краю блока:

Пример 4: Горизонтальная прокрутка полноэкранных блоков

Здесь используется та же концепция, что и в версии с вертикальной прокруткой, но с установкой точек привязки на оси X.

Пример 5: Двухмерная сетка изображений

Привязка прокрутки (scroll snapping) может работать в двух измерениях одновременно. И снова-таки, мы можем установить непосредственно на элементе:

Затем мы определяем левый верхний угол каждой плитки как точку привязки:

Некоторые мысли об удобстве для пользователей

Связывать с прокруткой – опасное занятие. Поскольку это один из основных способов взаимодействия с приложением, любое изменение этого поведения может вызывать раздражение – термин «scrolljacking» используется для обозначения подобного рода явлений.

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

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

По моим личным ощущениям, это работает достаточно хорошо, особенно на мобильных устройствах. Возможно, из-за того, что «scroll snapping» уже является частью встроенного в мобильные платформы UI. Вспомните главный экран на iOS и Android устройствах – это, по сути, горизонтальный слайдер с точками привязки. Взаимодействие в Chrome на Android особенно приятно, потому что воспринимается как обычная прокрутка, но область видимости всегда останавливается на точке привязки:

Для реализации такого поведения, определённо нужно проводить некоторые математические вычисления. Благодаря CSS Scroll Snapping мы добиваемся такого же результата без этого.

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

Заключение

Если относиться к этому ответственно, привязка прокрутки может стать полезным инструментом. Точки привязки CSS позволяют вам включиться во встроенный в браузер процесс работы с прокруткой без ущерба плавности интерфейса. С появлением JavaScript API (потенциально на горизонте) они станут еще более мощными.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *