Пользовательские полосы прокрутки в CSS

Пользовательские полосы прокрутки в CSS
На чтение
26 мин.
Просмотров
22
Дата обновления
06.11.2024

Пользовательские полосы прокрутки в CSS

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

 

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

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

Пользовательские полосы прокрутки в CSS

Дорожка — это основа полосы прокрутки, а ползунок — это то, что пользователь перетаскивает для прокрутки страницы или раздела.

Следует иметь в виду одну важную вещь: полосу прокрутки можно расположить горизонтально или вертикально, в зависимости от дизайна. Кроме того, он может измениться при работе с многоязычным веб-сайтом, который работает как слева направо (LTR), так и справа налево (RTL).

Пользовательские полосы прокрутки в CSS

Настройка дизайна долосы прокрутки

Раньше настраиваемая полоса прокрутки использовалась только для webkit, поэтому она не использовалась в Firefox и IE. Теперь у нас есть новый синтаксис, который работает только в Firefox и облегчит нашу жизнь при полной поддержке. Я пройдусь по старому синтаксису Webkit, а затем по новому.

Старый синтаксис

Ширина полосы прокрутки

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

CSS .section :: — полоса прокрутки webkit {width: 10px; }

1 2 3 .section :: — полоса прокрутки webkit {width: 10px; }

 

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

Дорожка полосы прокрутки

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

CSS .section :: — webkit-scrollbar-track {цвет фона: темно-серый; }

1 2 3 .section :: — webkit-scrollbar-track {цвет фона: темно-серый; }

 

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

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

CSS .section :: — webkit-scrollbar-thumb {box-shadow: inset 0 0 6px rgba (0, 0, 0, 0.3); }

1 2 3 .section :: — webkit-scrollbar-thumb {box-shadow: вставка 0 0 6px rgba (0, 0, 0, 0.3); }

 

Поэтому мы рассмотрели старый способ стилизации настраиваемой полосы прокрутки в CSS. Давайте исследуем новый синтаксис.

Новый синтаксис

Ширина полосы прокрутки

Как упоминалось выше, это определение ширины полосы прокрутки и наиболее важных для нас значений: auto и thin. К сожалению, мы не можем определить конкретное число, как в синтаксисе webkit.

CSS .section {ширина полосы прокрутки: тонкая; }

1 2 3 .section {ширина полосы прокрутки: тонкая; }

 

Цвет полосы прокрутки

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

CSS .section {цвет полосы прокрутки: # 6969dd # e0e0e0; ширина полосы прокрутки: тонкая; }

1 2 3 4 .section {цвет полосы прокрутки: # 6969dd # e0e0e0; ширина полосы прокрутки: тонкая; }

 

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

Определение области пользовательской полосы прокрутки

важно знать, где установить полосу прокрутки. Вы хотите, чтобы стиль был единообразным и работал на всех полосах прокрутки на вашем веб-сайте? Или вы хотите настроить только некоторые разделы?

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

CSS :: — полоса прокрутки webkit {width: 10px; } :: — webkit-scrollbar-track {цвет фона: темно-серый; } :: — webkit-scrollbar-thumb {box-shadow: inset 0 0 6px rgba (0, 0, 0, 0.3); }

1 2 3 4 5 6 7 8 9 10 11 :: — полоса прокрутки webkit {width: 10px; } :: — webkit-scrollbar-track {цвет фона: темно-серый; } :: — webkit-scrollbar-thumb {box-shadow: inset 0 0 6px rgba (0, 0, 0, 0.3); }

 

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

CSS .section :: — полоса прокрутки webkit {width: 10px; } .section :: — webkit-scrollbar-track {цвет фона: темно-серый; } .section :: — webkit-scrollbar-thumb {box-shadow: вставка 0 0 6px rgba (0, 0, 0, 0.3); }

1 2 3 4 5 6 7 8 9 10 11 .section :: — полоса прокрутки webkit {width: 10px; } .section :: — webkit-scrollbar-track {цвет фона: темно-серый; } .section :: — webkit-scrollbar-thumb {box-shadow: вставка 0 0 6px rgba (0, 0, 0, 0.3); }

 

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

CSS html {цвет полосы прокрутки: # 6969dd # e0e0e0; ширина полосы прокрутки: тонкая; }

1 2 3 4 html {цвет полосы прокрутки: # 6969dd # e0e0e0; ширина полосы прокрутки: тонкая; }

 

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

Настройка дизайна полосы прокрутки

Пример 1

Пользовательские полосы прокрутки в CSS

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

След полосы прокрутки имеет левую и правую границу со сплошным цветом фона.

Полоса прокрутки закруглена и окружена пробелом с левой и правой сторон.

Для Windows дела обстоят немного иначе.

Пользовательские полосы прокрутки в CSS

Вот как мы можем настроить полосу прокрутки на основе макета выше.

CSS .section :: — полоса прокрутки webkit {width: 16px; } .section :: — webkit-scrollbar-track {цвет фона: # e4e4e4; край-радиус: 100 пикселей; } .section :: — webkit-scrollbar-thumb {цвет фона: # d4aa70; край-радиус: 100 пикселей; }

1 2 3 4 5 6 7 8 9 10 11 12 13 .section :: — полоса прокрутки webkit {width: 16px; } .section :: — webkit-scrollbar-track {цвет фона: # e4e4e4; край-радиус: 100 пикселей; } .section :: — webkit-scrollbar-thumb {цвет фона: # d4aa70; край-радиус: 100 пикселей; }

 

Вам нужно добавить радиус кромки как к дорожке, так и к ползунку, так как это не сработает для c :: webkit-scrollbar.

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

Практический курс по адаптивной верстке сайта с нуля!

Пройдите курс и узнайте, как создавать современные веб-сайты на HTML5 и CSS3

CSS .section {цвет полосы прокрутки: # D4AA70 # e4e4e4; }

1 2 3 .section {цвет полосы прокрутки: # D4AA70 # e4e4e4; }

 

Примечание. Следующие примеры работают только с синтаксисом webkit. Для реального проекта вы можете добавить как webkit, так и новый синтаксис.

Пример 2

В этом примере дизайн немного сложнее, поскольку он содержит тени и тени это возможно? Да, мы можем применить внутренние тени и градиенты для имитации этого эффекта. Посмотрим как!

Пользовательские полосы прокрутки в CSS

CSS .section :: — webkit-scrollbar-thumb {background-image: linear-gradient (180deg, # D0368A 0%, # 708AD4 99%); box-shadow: вставка 2px 2px 5px 0 rgba (#fff, 0.5); радиус края: 100 пикселей; }

1 2 3 4 5 .section :: — webkit-scrollbar-thumb {background-image: linear-gradient (180deg, # D0368A 0%, # 708AD4 99%); box-shadow: вставка 2px 2px 5px 0 rgba (#fff, 0.5); край-радиус: 100 пикселей; }

 

Пример 3

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

Пользовательские полосы прокрутки в CSS

CSS .section :: — webkit-scrollbar-thumb {border-radius: 100px; фон: # 8070D4; граница: 6px сплошной RGB (0,0,0,0.2); }

1 2 3 4 5 .section :: — webkit-scrollbar-thumb {радиус границы: 100 пикселей; фон: # 8070D4; граница: 6px сплошной RGB (0,0,0,0.2); }

 

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

Пользовательские полосы прокрутки в CSS

Пример 4

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

Пользовательские полосы прокрутки в CSS

По умолчанию, когда элемент имеет фон и границу, браузер обрезает рамку. Рассмотрим следующий пример:

Пользовательские полосы прокрутки в CSS

CSS .button {минимальная ширина: 100 пикселей; граница: сплошная 6px # 000; размер коробки: рамка-рамка; цвет фона: # 5749d2; }

1 2 3 4 5 6 .button {минимальная ширина: 100 пикселей; граница: сплошная 6px # 000; размер коробки: рамка-рамка; цвет фона: # 5749d2; }

 

У нас есть кнопка с черной рамкой в ​​6 пикселей. Предполагая, что размер поля установлен на border-box, граница будет включена в размер кнопки. В результате граница появляется над фоном.

 

Теперь, когда мы применяем background-clip: content-box, фон будет появляться только вокруг содержимого.

CSS .button {минимальная ширина: 100 пикселей; граница: сплошная 6px # 000; размер коробки: коробка границы; цвет фона: # 5749d2; фоновый клип: поле содержимого; }

1 2 3 4 5 6 7 .button {минимальная ширина: 100 пикселей; граница: сплошная 6px # 000; размер коробки: рамка-рамка; цвет фона: # 5749d2; фоновый клип: поле содержимого; }

 

Пользовательские полосы прокрутки в CSS

Надеюсь, идея понятна. Вернемся к ползунку полосы прокрутки. Чтобы смоделировать эффект, нам нужно добавить следующее:

CSS .section :: — webkit-scrollbar-thumb {border: transparent solid 5px; край-радиус: 100 пикселей; цвет фона: # 8070d4; фоновый клип: поле содержимого; }

1 2 3 4 5 6 .section :: — webkit-scrollbar-thumb {граница: 5 пикселей прозрачное твердое тело; край-радиус: 100 пикселей; цвет фона: # 8070d4; фоновый клип: поле содержимого; }

 

И мы закончили.

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

Можно ли добавить эффекты наведения?

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

CSS / * Старый синтаксис * / .section :: — webkit-scrollbar-thumb: hover {background-color: # 5749d2; } / * Новый синтаксис * / .section {scrollbar-color: # d4aa70 # e4e4e4; переход: цвет полосы прокрутки 0,3 с, легкий выход; } .section: hover {цвет полосы прокрутки: # 5749d2; }

1 2 3 4 5 6 7 8 9 10 11 12 13 14 / * Старый синтаксис * / .section :: — webkit-scrollbar-thumb: hover {background-color: # 5749d2; } / * Новый синтаксис * / .section {scrollbar-color: # d4aa70 # e4e4e4; переход: цвет полосы прокрутки 0,3 с, легкий выход; } .section: hover {цвет полосы прокрутки: # 5749d2; }

 

В новом синтаксисе мы можем добавлять переходы, а в старом — нет. Мне все равно.

Показываем полосу прокрутки, когда это необходимо

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

Пользовательские полосы прокрутки в CSS

CSS. Раздел {переполнение-у: авто; }

1 2 3 раздел {переполнение-у: авто; }

 

Проблемы доступности

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

Пользовательские полосы прокрутки в CSS

Цвет курсора еле заметен. Пользователю не очень полезно использовать прокрутку курсора.

Спасибо за прочтение!

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий