Генератор CSS-скроллбара

Далее

Кастомные скроллбары раньше были кошмаром из вендорно-префиксных псевдоэлементов. Сегодня scrollbar-color и scrollbar-width покрывают типичные случаи во всех современных браузерах, узкая или обычная ширина и двухцветное (бегунок + дорожка) оформление. Для контроля на уровне пикселей (отступы дорожки, скругление бегунка, состояния hover) старые псевдоэлементы ::-webkit-scrollbar все еще работают в Chrome и Safari. Этот генератор выводит оба, корректно каскадируя.

Как оформить скроллбар

  1. 1

    Выберите ширину

    Auto (стандартная ширина платформы), thin (уже) или конкретное значение в пикселях через webkit-правила.

  2. 2

    Задайте цвета бегунка и дорожки

    Современный `scrollbar-color` принимает два цвета. Webkit-правила дают отдельные цвет, скругление и состояния hover.

  3. 3

    Добавьте эффект hover (опционально)

    Бегунок светлеет при наведении. Работает через `::-webkit-scrollbar-thumb:hover`.

  4. 4

    Определите область применения

    Примените к `html` / `body` (вся страница) или только к конкретному прокручиваемому контейнеру.

  5. 5

    Скопируйте CSS

    Совмещенные современные + webkit-правила: работают в каждом современном браузере с плавным откатом.

Современные стандартные свойства (2023+)

/* Применяется к элементу, который прокручивается */
html {
  scrollbar-width: thin;           /* auto | thin | none */
  scrollbar-color: #4f46e5 #e5e7eb; /* бегунок дорожка */
}

Поддержка браузерами (2024):

  • scrollbar-width: Chrome 121+, Safari 18.2+, Firefox 64+.
  • scrollbar-color: Chrome 121+, Safari 18.2+, Firefox 64+.
  • scrollbar-gutter: stable: Chrome 94+, Safari 14+, Firefox 97+. Резервирует место под скроллбар, даже когда оно не нужно, предотвращая сдвиг макета.

Webkit-псевдоэлементы (Chrome, Safari, старый Edge)

::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
::-webkit-scrollbar-track {
  background: #e5e7eb;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
  background: #3730a3;
}

Более детальный контроль. width задает ширину вертикального скроллбара; height задает высоту горизонтального скроллбара. Добавьте оба для контейнеров, которые могут прокручиваться в любом направлении.

Каскадирование двух подходов

Сначала укажите современные правила, затем webkit как улучшение для браузеров, которые отрисовывают оба:

.scroll-area {
  scrollbar-width: thin;
  scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar       { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 4px;
  border: 2px solid #e5e7eb;
}

Firefox учитывает только современные правила scrollbar-*. Chrome и Safari учитывают webkit-правила (которые переопределяют современные, поэтому поведение согласовано).

scrollbar-gutter предотвращает сдвиг контента

Без зарезервированного желоба контент перетекает, когда появляется скроллбар (частое явление в динамических списках). Решение:

html { scrollbar-gutter: stable; }
/* или */
html { scrollbar-gutter: stable both-edges; }

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

Полностью скрыть скроллбары

.no-scrollbar {
  scrollbar-width: none;           /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; }  /* Chrome, Safari */

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

Особенности мобильных

На iOS и Android скроллбары появляются лишь на мгновение во время прокрутки. Ваш кастомный CSS скроллбара все равно применяется, но пользователи могут так и не увидеть его дольше секунды. Проектируйте соответственно, не вкладывайтесь сильно в визуальные изыски, которые редко появляются.

Доступность

  • Контраст: бегунок относительно дорожки должен соответствовать 3:1 для нетекстового контраста (WCAG 1.4.11).
  • Ширина: тонкие скроллбары трудно захватить мышью, особенно пользователям с моторными нарушениями. Обычная ширина, более безопасный дефолт.
  • Никогда не убирайте скроллбар на прокручиваемых областях, не предоставив другой способ прокрутки. Пользователи, полагающиеся на скроллбар, окажутся в тупике.

Часто задаваемые вопросы

Да, с современными свойствами scrollbar-width и scrollbar-color. Firefox не поддерживает webkit-псевдоэлементы, поэтому для согласованного вида в разных браузерах сначала используйте современные свойства, а webkit-правила добавляйте как улучшение.

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

Обычно да, потому что скроллбар смотрится неуместно и конкурирует с контентом. Добавьте видимые точки пагинации или элементы управления-стрелки, чтобы пользователи все равно знали, что контент прокручивается. Учитывайте prefers-reduced-motion, если используете scroll-snapping.

Может. Очень тонкие или низкоконтрастные скроллбары трудно использовать пользователям с моторными нарушениями и слабым зрением. Держите скроллбар шириной не менее 8-10 px для комфортного захвата и сохраняйте контраст 3:1 между бегунком и дорожкой.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор цветовой палитры

Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.