
В этой статье разбираются три практических подхода к прокрутке: через CSS, через нативные якоря и через JavaScript. Для контроля поведения используйте overflow (например, overflow-y: auto) и свойство scroll-behavior: smooth – это даёт плавную прокрутку без скриптов в современных браузерах. Для точной привязки секций применяйте стандартные якоря и методика element.scrollIntoView({ behavior: «smooth», block: «start» }) в тех случаях, когда нужна программная навигация.
При реализации учтите конкретные рекомендации по производительности: цель – не превышать бюджет кадра ~16 мс для плавного скролла при 60 кадрах в секунду; ставьте слушатели событий прокрутки с опцией { passive: true } и используйте IntersectionObserver для ленивой загрузки изображений и контента. Для контроля «перелистывания» на мобильных устройствах рассмотрите overscroll-behavior и touch-action, чтобы избежать нежелательных сдвигов и потерь жестов.
Доступность и настройка для пользователей – обязательные элементы. Отключайте анимации для тех, кто предпочитает сокращённые движения, с помощью медиа-запроса prefers-reduced-motion. При автоматической прокрутке обеспечьте управление фокусом (tabindex и явная установка focus) и добавьте описательные атрибуты aria для важных секций. Для страниц с большим объёмом контента рассматривайте виртуализацию списка (windowing) или incremental rendering, чтобы уменьшить использование памяти и сохранить отклик интерфейса.
Создание вертикальной прокрутки с помощью CSS overflow
Пример:
.scroll-box {
height: 200px;
overflow-y: auto;
border: 1px solid #ccc;
padding: 10px;
}
Контейнер с фиксированной высотой обеспечивает ограничение области видимости текста или элементов. При добавлении большого количества содержимого пользователь может перемещаться внутри блока, не затрагивая всю страницу.
Рекомендуется использовать overflow-y: auto для удобства, так как лишняя полоса прокрутки не будет отвлекать, если текста меньше, чем высота блока.
Организация горизонтальной прокрутки для блоков
Для создания горизонтальной прокрутки достаточно задать контейнеру свойство CSS overflow-x: auto; или overflow-x: scroll;. Первый вариант добавляет полосу прокрутки только при необходимости, второй отображает её постоянно.
Чтобы элементы располагались в одну строку, используется display: flex; или white-space: nowrap;. В первом случае каждый дочерний блок будет выстраиваться по горизонтали, во втором – текстовые и строчные элементы не будут переноситься на следующую строку.
Высота контейнера должна быть зафиксирована, иначе блоки будут смещаться, а прокрутка может не сработать. Для ограничения области просмотра задаётся max-width или width.
Если необходимо убрать вертикальную прокрутку, одновременно указывается overflow-y: hidden;. Это предотвращает появление лишнего пространства и оставляет только горизонтальное перемещение.
При адаптивной верстке стоит проверять удобство навигации на мобильных устройствах. Для этого часто добавляют свойство -webkit-overflow-scrolling: touch;, которое обеспечивает плавность движения при свайпе.
Фиксация шапки сайта при прокрутке страницы

Чтобы закрепить верхнюю часть сайта при прокрутке, используется свойство position: fixed. Оно позволяет закрепить блок в верхней части окна браузера, независимо от того, насколько далеко пользователь прокручивает страницу.
Пример разметки:
<header class="header">Шапка сайта</header>
Пример CSS:
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
}
position: fixed закрепляет блок, top: 0 прижимает его к верхней границе окна, а width: 100% гарантирует, что он займет всю ширину страницы. Свойство z-index используется, чтобы шапка не перекрывалась другими элементами.
Важно учитывать, что фиксированный блок исключается из обычного потока, поэтому основной контент нужно сдвигать вниз с помощью padding-top или margin-top, равного высоте шапки. Это предотвратит наложение текста или изображений на закрепленный элемент.
Альтернативой является использование position: sticky. В отличие от fixed, элемент остается в потоке и фиксируется только при достижении заданной позиции:
.header {
position: sticky;
top: 0;
z-index: 1000;
}
Sticky упрощает адаптацию страницы, так как сохраняет место под элементом, исключая необходимость вручную добавлять отступы.
Использование якорных ссылок для плавной навигации
Якорные ссылки позволяют перемещаться к конкретным частям страницы без перезагрузки. Для этого каждой целевой секции задается уникальный идентификатор через атрибут id, а ссылка указывает на него с помощью символа #.
Пример структуры:
<a href="#contact">Контакты</a>
<div id="contact">
<h3>Контактная информация</h3>
<p>Текст...</p>
</div>
Чтобы прокрутка выполнялась плавно, в CSS используется свойство scroll-behavior:
html {
scroll-behavior: smooth;
}
Рекомендации для применения:
- Использовать короткие и понятные идентификаторы (
about,services,faq). - Размещать якорные ссылки в меню навигации для быстрого доступа к разделам.
- Не дублировать значения
id, чтобы избежать некорректной прокрутки. - Проверять работу на мобильных устройствах, так как плавная прокрутка может отличаться в разных браузерах.
Этот метод подходит для лендингов, одностраничных сайтов и документации, где важен быстрый переход между разделами.
Добавление кастомного скроллбара через CSS

Стандартный вид полосы прокрутки часто не совпадает с дизайном сайта. С помощью CSS можно изменить её внешний вид и сделать более гармоничной с интерфейсом.
Для браузеров на базе WebKit (Chrome, Safari, новые версии Edge) доступны специальные псевдоэлементы:
::-webkit-scrollbar– общий контейнер полосы;::-webkit-scrollbar-thumb– бегунок;::-webkit-scrollbar-track– область, по которой движется бегунок;::-webkit-scrollbar-corner– угловая часть, если видны горизонтальная и вертикальная полосы одновременно.
Пример изменения цвета и формы скроллбара:
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: #f0f0f0;
}
::-webkit-scrollbar-thumb {
background: #888;
border-radius: 5px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
В Firefox используется свойство scrollbar-width и scrollbar-color:
html {
scrollbar-width: thin;
scrollbar-color: #888 #f0f0f0;
}
Рекомендации по применению:
- Использовать контрастные цвета, чтобы бегунок был хорошо виден.
- Избегать слишком узкой ширины, так как это ухудшает удобство.
- Тестировать отображение в разных браузерах, так как поддержка свойств отличается.
Реализация плавной прокрутки с помощью JavaScript

Для создания плавной прокрутки в HTML можно использовать метод scrollTo с опцией behavior: 'smooth'. Он позволяет задать координаты прокрутки и автоматически анимирует перемещение страницы. Пример: window.scrollTo({ top: 500, behavior: 'smooth' }); прокрутит страницу на 500 пикселей вниз.
Если нужно реализовать прокрутку к конкретному элементу, используется метод element.scrollIntoView({ behavior: 'smooth' }). Например, document.getElementById('section2').scrollIntoView({ behavior: 'smooth' }); плавно переместит видимую область к блоку с идентификатором section2.
Для навигационных ссылок удобно добавлять обработчики событий click. При клике отменяется стандартное поведение ссылки через event.preventDefault(), после чего вызывается плавная прокрутка к целевому элементу.
Можно также контролировать скорость прокрутки и создавать более сложные анимации с помощью функции requestAnimationFrame, вычисляя текущую позицию и увеличивая её шаг за шагом до целевой координаты.
Современные браузеры поддерживают встроенную плавную прокрутку, поэтому использование внешних библиотек не требуется, кроме случаев, когда нужна поддержка устаревших версий или дополнительная кастомизация анимации.
Вопрос-ответ:
Как добавить плавную прокрутку к якорным ссылкам на странице?
Для плавной прокрутки якорных ссылок можно использовать CSS или JavaScript. С помощью CSS достаточно добавить к тегу html правило scroll-behavior: smooth;. Если требуется поддержка старых браузеров или более сложные эффекты, используют JavaScript: на событие клика по ссылке назначают функцию, которая с помощью element.scrollIntoView({ behavior: 'smooth' }) плавно перемещает страницу к нужному элементу.
Можно ли создать горизонтальную прокрутку блоков внутри страницы?
Да, горизонтальная прокрутка реализуется с помощью CSS. Контейнер блоков нужно оформить с display: flex; и overflow-x: auto;. Элементы внутри контейнера будут выстраиваться в ряд, а лишние по ширине блоки можно прокручивать. Для удобства можно добавить scrollbar-width или кастомный скроллбар, чтобы управление выглядело аккуратно.
Как закрепить шапку сайта при прокрутке?
Чтобы шапка оставалась видимой при прокрутке, используют CSS-свойство position: sticky; или position: fixed;. Sticky позволяет элементу оставаться в верхней части экрана только после достижения определённого положения, fixed фиксирует его постоянно. Обычно добавляют top: 0; и задают фон, чтобы элементы под шапкой не перекрывались.
Какие есть способы создания вертикальной прокрутки для блока с текстом?
Вертикальная прокрутка создаётся с помощью CSS-свойства overflow-y. Например, overflow-y: auto; добавляет полосу прокрутки только при переполнении содержимого блока, overflow-y: scroll; всегда отображает скроллбар. Также нужно задать фиксированную высоту блока, чтобы браузер понимал, где начинается область прокрутки.