
Полоса прокрутки в HTML используется для управления видимой областью контента, превышающего размеры блока. Она может быть реализована с помощью CSS-свойств overflow и scroll, что позволяет пользователю прокручивать содержимое вертикально или горизонтально.
Вертикальная прокрутка применяется в блоках фиксированной высоты, когда текст или изображения превышают заданный размер. Горизонтальная полоса полезна для таблиц и графических элементов, которые выходят за пределы ширины контейнера. Комбинация overflow-x и overflow-y обеспечивает гибкое управление направлением прокрутки.
Для изменения внешнего вида полосы прокрутки в современных браузерах применяются CSS-псевдоклассы ::-webkit-scrollbar, ::-webkit-scrollbar-thumb и ::-webkit-scrollbar-track. Это позволяет задавать ширину, цвет, форму и анимацию ползунка, создавая интерфейс, соответствующий дизайну сайта.
В статье приведены рабочие примеры кода, демонстрирующие создание вертикальной и горизонтальной полосы прокрутки, настройку её размеров и цветов, а также способы скрытия полосы без потери функциональности. Практические рекомендации помогут быстро внедрить прокрутку в любой блок контента.
Использование CSS для изменения цвета полосы прокрутки

Для изменения цвета полосы прокрутки в HTML применяют псевдоклассы CSS ::-webkit-scrollbar, ::-webkit-scrollbar-thumb и ::-webkit-scrollbar-track. Первый задает общую область полосы, второй – ползунок, третий – фон полосы.
Пример базового кода:
div::-webkit-scrollbar { width: 12px; }
div::-webkit-scrollbar-thumb { background-color: #4CAF50; border-radius: 6px; }
div::-webkit-scrollbar-track { background-color: #f0f0f0; }
Цвет ползунка выбирают контрастным к фону, чтобы обеспечить видимость. Радиус скругления делает ползунок более плавным визуально.
Для разных элементов можно задавать индивидуальные стили, добавляя селекторы по классам или идентификаторам. Например, #content::-webkit-scrollbar-thumb { background-color: #FF5722; }.
В современных браузерах для Firefox используют свойства scrollbar-color и scrollbar-width:
scrollbar-color: #4CAF50 #f0f0f0;
scrollbar-width: thin;
Такой подход позволяет изменить цвет ползунка и фона без использования webkit-псевдоклассов и улучшает кроссбраузерность.
Для динамического изменения цвета можно использовать переменные CSS и менять их через JavaScript, что позволяет адаптировать полосу прокрутки под тему страницы.
Настройка ширины и формы скроллбара с помощью CSS
Ширина и форма полосы прокрутки напрямую влияют на удобство взаимодействия пользователя с содержимым страницы. В современных браузерах применяются различные свойства для детальной настройки скроллбаров.
Для изменения ширины вертикального или горизонтального скроллбара в WebKit-браузерах используют псевдоклассы:
::-webkit-scrollbar– сам скроллбар.::-webkit-scrollbar-thumb– ползунок.::-webkit-scrollbar-track– дорожка, по которой движется ползунок.
Пример установки ширины и формы скроллбара:
::-webkit-scrollbar {
width: 12px; /* ширина вертикального скроллбара */
height: 12px; /* высота горизонтального скроллбара */
}
::-webkit-scrollbar-thumb {
border-radius: 8px; /* закругление углов ползунка */
background-color: #888;
}
::-webkit-scrollbar-track {
border-radius: 10px; /* закругление дорожки скроллбара */
background-color: #f1f1f1;
}
Свойство border-radius позволяет создавать скроллбар с округлыми углами или полностью овальный. Для прямоугольной формы достаточно оставить значение 0.
Для кроссбраузерной поддержки можно применять свойство scrollbar-width в Firefox:
auto– стандартная ширина.thin– тонкий скроллбар.none– скрытие скроллбара.
Пример настройки для Firefox:
/* Firefox */
.element {
scrollbar-width: thin;
scrollbar-color: #888 #f1f1f1; /* ползунок и дорожка */
}
Для комплексного управления формой и размером скроллбара рекомендуется сочетать ::-webkit-scrollbar для Chrome, Edge, Safari с scrollbar-width и scrollbar-color для Firefox. Это обеспечивает единообразное отображение на большинстве платформ.
Добавление горизонтальной прокрутки к блочным элементам
Для создания горизонтальной прокрутки на блочном элементе используется свойство CSS overflow-x. Оно принимает значения auto, scroll или hidden. Значение auto добавляет полосу прокрутки только при необходимости, а scroll отображает её постоянно.
Пример применения к контейнеру с фиксированной шириной:
div.container { width: 300px; overflow-x: auto; white-space: nowrap; }
Использование white-space: nowrap предотвращает перенос содержимого на новую строку, что позволяет элементам внутри располагаться горизонтально и вызывать прокрутку при превышении ширины контейнера.
Для отдельных элементов внутри контейнера удобно задавать display: inline-block или фиксированную ширину, чтобы контролировать их расположение и гарантировать появление горизонтальной прокрутки при необходимости.
Пример блока с несколькими элементами:
<div class="container">
<div class="item">Элемент 1</div>
<div class="item">Элемент 2</div>
<div class="item">Элемент 3</div>
</div>
CSS для элементов:
div.item { display: inline-block; width: 150px; margin-right: 10px; }
Такой подход позволяет управлять количеством видимых элементов и оставлять остальное для горизонтальной прокрутки, обеспечивая удобное взаимодействие с контентом на ограниченной ширине.
Создание вертикальной прокрутки для контейнера с ограниченной высотой

Для создания вертикальной прокрутки необходимо ограничить высоту контейнера и включить автоматическое отображение полосы прокрутки при превышении содержимого. Это выполняется с помощью свойства overflow-y в CSS.
Пример базовой разметки:
<div class="scroll-container">
<p>Пункт 1</p>
<p>Пункт 2</p>
<p>Пункт 3</p>
<p>Пункт 4</p>
<p>Пункт 5</p>
<p>Пункт 6</p>
</div>
CSS для контейнера:
.scroll-container {
height: 200px; /* Ограничение высоты */
overflow-y: auto; /* Вертикальная прокрутка появляется при переполнении */
border: 1px solid #ccc; /* Для наглядности границы */
padding: 10px;
}
Рекомендации по использованию:
- Высоту контейнера устанавливайте в пикселях, процентах или
emв зависимости от макета. - Свойство
overflow-y: autoгарантирует, что полоса прокрутки появится только при необходимости. - Если нужно скрыть прокрутку, используйте
overflow-y: hidden, а для постоянного отображения –overflow-y: scroll. - Добавление отступов и границ помогает визуально отделить контейнер с прокруткой от остального контента.
Для улучшения восприятия можно комбинировать с настройкой ширины полосы прокрутки и цветовой схемы через свойства CSS scrollbar-width и scrollbar-color в современных браузерах.
Скрытие стандартной полосы прокрутки и создание кастомной

Для скрытия стандартной полосы прокрутки используется свойство CSS overflow совместно с псевдоклассами для WebKit-браузеров. Например, можно применить overflow: hidden; к контейнеру, чтобы полностью убрать стандартный скролл, а затем реализовать кастомный с помощью вложенного блока.
Создание кастомной полосы прокрутки выполняется через CSS. В WebKit-браузерах можно задать свойства ::-webkit-scrollbar, ::-webkit-scrollbar-thumb и ::-webkit-scrollbar-track для изменения ширины, цвета и формы ползунка и дорожки. Например, width: 8px; задаёт толщину, background-color определяет цвет, а border-radius придаёт скруглённые края.
Для кросс-браузерной поддержки используется комбинация скрытия стандартного скролла через overflow: hidden и управления прокруткой с помощью вложенного блока с overflow-y: scroll;. При этом внешний контейнер задаёт фиксированную высоту, а внутренний блок получает ширину, превышающую область видимости, если требуется горизонтальный скролл.
Для более точной стилизации можно использовать свойства scrollbar-color и scrollbar-width, поддерживаемые в Firefox. scrollbar-color: thumb track; позволяет изменить цвет ползунка и фона дорожки, а scrollbar-width: thin; уменьшает ширину стандартного скролла.
Комбинируя эти методы, можно полностью контролировать внешний вид полосы прокрутки, сохраняя функциональность и совместимость с разными браузерами.
Применение псевдоклассов ::-webkit-scrollbar для стилизации

Псевдоклассы ::-webkit-scrollbar и связанные с ним элементы позволяют изменять визуальный вид полос прокрутки в браузерах на основе движка WebKit, таких как Chrome и Safari. Основные элементы для стилизации включают:
::-webkit-scrollbar – контейнер всей полосы прокрутки.
::-webkit-scrollbar-thumb – ползунок, который перемещается при прокрутке.
::-webkit-scrollbar-track – область, по которой движется ползунок.
::-webkit-scrollbar-button – кнопки для пошаговой прокрутки вверх/вниз.
Пример простого применения для вертикальной полосы прокрутки:
CSS код:
div::-webkit-scrollbar {
width: 12px;
}
div::-webkit-scrollbar-thumb {
background-color: #555;
border-radius: 6px;
}
div::-webkit-scrollbar-track {
background-color: #f0f0f0;
}
В этом примере ширина полосы установлена в 12 пикселей, ползунок окрашен в тёмно-серый цвет с закруглёнными краями, а фон трека светло-серый. Для горизонтальных полос прокрутки используется height вместо width в псевдоклассе ::-webkit-scrollbar.
Для динамического эффекта можно применять состояние :hover к ползунку:
div::-webkit-scrollbar-thumb:hover {
background-color: #333;
}
Такое решение позволяет визуально выделять ползунок при наведении, повышая интерактивность интерфейса. Настройка границ и теней через свойства border и box-shadow даёт возможность создавать более сложные стили, например, объёмные или прозрачные ползунки.
Контроль прокрутки с помощью JavaScript и событий scroll
Событие scroll позволяет отслеживать изменение позиции прокрутки элементов или окна браузера. Для глобальной прокрутки страницы используется window.addEventListener('scroll', callback), а для отдельных контейнеров – element.addEventListener('scroll', callback).
Методы scrollTop и scrollLeft возвращают текущую вертикальную и горизонтальную позицию прокрутки соответственно. Эти значения можно использовать для динамического изменения содержимого, анимации элементов или подгрузки данных по мере прокрутки.
Для программного управления прокруткой применяются методы scrollTo(x, y) и scrollBy(dx, dy). scrollTo устанавливает точную позицию прокрутки, а scrollBy смещает текущую позицию на заданное расстояние. Обе функции поддерживают объект с опцией behavior: 'smooth' для плавного перемещения.
Для оптимизации производительности обработку события scroll часто выполняют с использованием requestAnimationFrame или функций throttle/debounce, чтобы уменьшить нагрузку при частых вызовах и обеспечить плавность интерфейса.
Пример отслеживания прокрутки контейнера и изменения его фона:
const container = document.querySelector('.scroll-container');
container.addEventListener('scroll', () => {
const scrollPosition = container.scrollTop;
if (scrollPosition > 100) {
container.style.backgroundColor = '#f0f0f0';
} else {
container.style.backgroundColor = '#ffffff';
}
});
Пример плавной прокрутки к определенному элементу:
const target = document.querySelector('#target');
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
Совместимость кастомных скроллбаров с разными браузерами

Поддержка кастомных скроллбаров зависит от движка браузера. В Chrome, Edge, Opera и Safari применяются псевдоклассы ::-webkit-scrollbar, ::-webkit-scrollbar-thumb и ::-webkit-scrollbar-track. Firefox использует свой синтаксис через scrollbar-width и scrollbar-color, который ограничен по возможностям стилизации.
IE и старые версии Edge (до перехода на Chromium) поддерживают только scrollbar-face-color и другие устаревшие свойства, полностью кастомизировать их невозможно. Для кроссбраузерной совместимости рекомендуется использовать сочетание стандартных CSS-свойств и JavaScript-библиотек, таких как SimpleBar или OverlayScrollbars.
Пример базовой совместимости через CSS:
| Браузер | Поддержка | Примечание |
| Chrome, Edge, Safari, Opera | Полная | Используются ::-webkit-scrollbar псевдоклассы |
| Firefox | Частичная | scrollbar-width и scrollbar-color для цвета и ширины |
| IE, старый Edge | Ограниченная | Только устаревшие свойства, кастомизация ограничена |
Для единообразного отображения на всех платформах рекомендуется проверять визуальный результат в основных браузерах и, при необходимости, использовать JavaScript-решения для подмены скроллбара.
Вопрос-ответ:
Как создать кастомную полосу прокрутки в HTML и CSS для конкретного контейнера?
Для кастомизации полосы прокрутки используйте псевдоклассы ::-webkit-scrollbar, ::-webkit-scrollbar-thumb и ::-webkit-scrollbar-track. Пример: задайте контейнеру фиксированную высоту и overflow: auto, затем определите стили для полосы прокрутки: ширину, цвет фона и цвет бегунка. Это позволит изменить визуальное оформление, не затрагивая функциональность прокрутки.
Почему кастомная полоса прокрутки может работать в Chrome, но не отображаться в Firefox?
Стилизация через ::-webkit-scrollbar поддерживается только браузерами на основе движка WebKit или Blink, такими как Chrome, Edge и Safari. Firefox использует собственные свойства scrollbar-width и scrollbar-color. Чтобы обеспечить видимость кастомной полосы в Firefox, нужно добавить эти свойства к контейнеру, например: scrollbar-width: thin; scrollbar-color: #888 #f0f0f0.
Можно ли скрыть стандартную полосу прокрутки и оставить прокрутку доступной?
Да, это можно сделать с помощью CSS. Для WebKit-браузеров установите ::-webkit-scrollbar { display: none; }. Для кроссбраузерного решения можно использовать overflow: auto на контейнере и позиционировать кастомный элемент поверх стандартной полосы, управляя его перемещением через JavaScript. Такой подход сохраняет функциональность прокрутки для пользователя.
Как добавить горизонтальную прокрутку к блочному элементу?
Для горизонтальной прокрутки задайте блочному элементу фиксированную ширину и overflow-x: auto. Внутри контейнера разместите элементы, суммарная ширина которых превышает ширину контейнера. При необходимости можно использовать white-space: nowrap; для предотвращения переноса строк и обеспечения скроллинга по горизонтали.
Можно ли управлять положением полосы прокрутки с помощью JavaScript?
Да, положение можно менять программно. Для вертикальной прокрутки используйте element.scrollTop = значение, для горизонтальной — element.scrollLeft. Для отслеживания прокрутки применяют событие scroll: container.addEventListener(‘scroll’, function() { … }). С помощью этих методов можно синхронизировать прокрутку с другими элементами или создавать плавное перемещение.