Как скрыть вертикальный скроллбар: техники для всех браузеров

Пройдите тест, узнайте какой профессии подходите
Сколько вам лет
0%
До 18
От 18 до 24
От 25 до 34
От 35 до 44
От 45 до 49
От 50 до 54
Больше 55

Для кого эта статья:

  • Веб-разработчики и программисты
  • Дизайнеры пользовательских интерфейсов (UI/UX)
  • Студенты и начинающие специалисты в области веб-дизайна и разработки

    Полоса прокрутки — необходимый элемент интерфейса, который, однако, может заметно нарушать целостность минималистичного дизайна. Работая над премиальным проектом, я не раз сталкивался с просьбой заказчика: "А можно убрать эту полосу справа? Она портит всю композицию!" И действительно, с точки зрения UX и эстетики аккуратно скрытый скроллбар часто становится той финальной деталью, которая превращает хороший дизайн в безупречный. Давайте разберем, как стилизовать или полностью скрыть вертикальный скроллбар, сохраняя функциональность прокрутки и обеспечивая корректное отображение во всех браузерах 🔍

Хотите не просто скрывать скроллбары, но полностью освоить веб-разработку? На курсе Обучение веб-разработке от Skypro вы изучите не только CSS-трюки, но и все аспекты современного фронтенда — от HTML до React.js. Уже через 9 месяцев вы сможете претендовать на позицию Junior-разработчика и создавать сайты любой сложности с идеальной стилизацией и безупречной функциональностью!

Основные методы скрытия вертикального скроллбара в CSS

Скрытие скроллбара — это не просто косметическое улучшение. Это способ создать более чистый, современный дизайн без ущерба для функциональности. В арсенале разработчика есть несколько базовых подходов к решению этой задачи.

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

Рассмотрим основные методы скрытия скроллбара:

  • Метод overflow + padding: скрывает скроллбар за пределами видимой области
  • CSS-псевдоэлементы: применяются для браузеров на движке WebKit
  • scrollbar-width: современное CSS-свойство для Firefox и других браузеров
  • -ms-overflow-style: специфичное свойство для Microsoft Edge

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

CSS
Скопировать код
.no-scroll {
overflow: hidden;
}

Для сохранения функциональности прокрутки при скрытии скроллбара подходит метод "маскировки". Создаём контейнер с фиксированной шириной и вложенный элемент с большей шириной и отрицательным отступом:

CSS
Скопировать код
.container {
width: 300px;
overflow: hidden;
}

.content {
width: 317px; /* Ширина контента + ширина скроллбара */
overflow-y: scroll;
padding-right: 17px; /* Ширина скроллбара */
}

Метод Преимущества Недостатки
overflow: hidden Простота реализации Блокирует прокрутку
overflow + padding Сохраняет функцию прокрутки Требует точной настройки размеров
CSS-псевдоэлементы Гибкие возможности стилизации Ограничены WebKit-браузерами
scrollbar-width Стандартизированное свойство Неполная поддержка браузерами

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

Пошаговый план для смены профессии

Скрытие полосы прокрутки для WebKit-браузеров

Алексей Петров, Frontend Team Lead Разрабатывая премиальный интернет-магазин для ювелирного бренда, столкнулся с задачей создать ощущение бесконечного элегантного скроллинга в галерее изделий. Клиент настаивал на идеально чистом дизайне, без единого лишнего элемента интерфейса. Браузеры на WebKit решали эту задачу без проблем благодаря ::-webkit-scrollbar, но с Firefox возникли сложности. Только комбинируя все доступные методы, мы достигли идеального результата. Особенно клиенту понравилось, что при наведении появлялся тонкий, почти невидимый индикатор прокрутки — этот небольшой UX-штрих добавил сайту изысканности.

Браузеры на движке WebKit (Chrome, Safari, Opera) поддерживают специальные псевдоэлементы для стилизации скроллбара. Это дает разработчикам максимальную гибкость в кастомизации полос прокрутки или их полном скрытии. 🎨

Для скрытия скроллбара используется псевдоэлемент ::-webkit-scrollbar:

CSS
Скопировать код
.hide-scrollbar::-webkit-scrollbar {
width: 0; /* Ширина вертикального скроллбара */
height: 0; /* Высота горизонтального скроллбара */
background: transparent; /* Прозрачный фон */
}

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

  • ::-webkit-scrollbar-track — стилизация трека скроллбара
  • ::-webkit-scrollbar-thumb — стилизация ползунка
  • ::-webkit-scrollbar-button — стилизация кнопок прокрутки
  • ::-webkit-scrollbar-corner — стилизация угла между полосами прокрутки

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

CSS
Скопировать код
.custom-scrollbar::-webkit-scrollbar {
width: 5px;
}

.custom-scrollbar::-webkit-scrollbar-track {
background: #f1f1f1;
}

.custom-scrollbar::-webkit-scrollbar-thumb {
background: rgba(136, 136, 136, 0.5);
border-radius: 5px;
}

.custom-scrollbar::-webkit-scrollbar-thumb:hover {
background: rgba(85, 85, 85, 0.8);
}

Для динамического отображения скроллбара только при прокрутке можно использовать комбинацию CSS и JavaScript:

CSS
Скопировать код
.dynamic-scrollbar::-webkit-scrollbar {
width: 0;
transition: width 0.3s ease;
}

.dynamic-scrollbar.scrolling::-webkit-scrollbar {
width: 5px;
}

С соответствующим JavaScript для отслеживания состояния прокрутки:

JS
Скопировать код
const element = document.querySelector('.dynamic-scrollbar');

element.addEventListener('scroll', function() {
element.classList.add('scrolling');

// Убираем класс после окончания прокрутки
clearTimeout(element.scrollTimeout);
element.scrollTimeout = setTimeout(function() {
element.classList.remove('scrolling');
}, 1000);
});

Важно помнить, что решения на основе ::-webkit-scrollbar работают только в браузерах на движке WebKit и требуют дополнительных методов для обеспечения кроссбраузерности.

Решения для Firefox и Edge: универсальные подходы

Firefox и Edge требуют особого подхода для скрытия полосы прокрутки, поскольку они не поддерживают WebKit-специфические псевдоэлементы. К счастью, CSS предлагает альтернативные решения, которые работают в этих браузерах. 🦊

Для Firefox начиная с версии 64 доступно специальное свойство scrollbar-width, которое является частью W3C спецификации CSS Scrollbars:

CSS
Скопировать код
.hide-scrollbar-firefox {
scrollbar-width: none; /* Полностью скрывает скроллбар */
}

Для более тонкой настройки можно использовать значение thin, которое делает полосу прокрутки уже:

CSS
Скопировать код
.thin-scrollbar-firefox {
scrollbar-width: thin;
}

В Microsoft Edge (на движке EdgeHTML) применяется собственное свойство -ms-overflow-style:

CSS
Скопировать код
.hide-scrollbar-edge {
-ms-overflow-style: none; /* Скрывает скроллбар в IE и Edge */
}

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

CSS
Скопировать код
.universal-hide-scrollbar {
/* Для Firefox */
scrollbar-width: none;

/* Для IE и Edge */
-ms-overflow-style: none;

/* Для WebKit */
&::-webkit-scrollbar {
display: none;
}
}

Также существует альтернативный подход с использованием обертки и абсолютного позиционирования:

CSS
Скопировать код
.scroll-container {
position: relative;
width: 300px;
height: 200px;
overflow: hidden;
}

.scroll-content {
position: absolute;
top: 0;
left: 0;
right: -17px; /* Скрываем ширину скроллбара */
bottom: 0;
overflow-y: scroll;
}

Браузер Специфичное свойство Версии поддержки Пример кода
Firefox scrollbar-width 64+ scrollbar-width: none;
Edge (EdgeHTML) -ms-overflow-style Все версии -ms-overflow-style: none;
Edge (Chromium) ::-webkit-scrollbar 79+ ::-webkit-scrollbar { width: 0; }
Internet Explorer -ms-overflow-style 10+ -ms-overflow-style: none;

С учетом того, что новые версии Edge теперь работают на движке Chromium, для них также будет работать решение с ::-webkit-scrollbar. Это существенно упрощает кроссбраузерную совместимость в современной веб-разработке.

Кроссбраузерные комбинированные техники для скроллбара

Создание по-настоящему кроссбраузерного решения для скрытия скроллбара требует комбинирования различных техник под специфику каждого браузера. Вот самое полное решение, которое работает во всех современных браузерах 🔄

Сначала определим базовый CSS-класс, который объединяет все необходимые свойства:

CSS
Скопировать код
.hide-scrollbar {
/* Базовая функциональность прокрутки */
overflow-y: scroll;

/* Firefox */
scrollbar-width: none;

/* Internet Explorer и старые версии Edge */
-ms-overflow-style: none;
}

/* WebKit и Blink (Chrome, Safari, новые версии Edge, Opera) */
.hide-scrollbar::-webkit-scrollbar {
display: none; /* Или width: 0; */
}

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

CSS
Скопировать код
.scroll-wrapper {
position: relative;
width: 100%;
height: 300px;
overflow: hidden;
}

.scroll-content {
position: absolute;
top: 0;
left: 0;
right: -20px; /* Компенсация ширины скроллбара */
bottom: 0;
overflow-y: scroll;
padding-right: 20px; /* Возврат нормального отображения контента */
}

При создании компонентов с прокруткой может потребоваться определение направления прокрутки. Вот универсальное решение для контроля направления прокрутки без отображения полос:

CSS
Скопировать код
.scroll-x-only {
overflow-y: hidden;
overflow-x: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}

.scroll-x-only::-webkit-scrollbar {
height: 0;
width: 0;
}

.scroll-y-only {
overflow-x: hidden;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}

.scroll-y-only::-webkit-scrollbar {
height: 0;
width: 0;
}

Для более сложных случаев, когда требуется условное отображение скроллбара, можно использовать CSS-переменные и JavaScript:

CSS
Скопировать код
.dynamic-scrollbar {
--scrollbar-width: 0px;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}

.dynamic-scrollbar::-webkit-scrollbar {
width: var(--scrollbar-width);
transition: width 0.3s ease;
}

.dynamic-scrollbar.show-scrollbar {
--scrollbar-width: 8px;
scrollbar-width: thin;
-ms-overflow-style: auto;
}

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

Вот список проблем, которые могут возникнуть при скрытии скроллбаров, и их решения:

  • Проблема с шириной контента: при скрытии вертикального скроллбара может появиться горизонтальный из-за изменения доступной ширины. Решение: добавьте overflow-x: hidden или корректируйте ширину с учетом скроллбара.
  • Проблема с iOS Safari: некоторые старые версии iOS Safari игнорируют скрытие скроллбаров. Решение: используйте обертку с overflow: hidden и внутренний контейнер с отрицательным отступом.
  • Проблема с прокруткой на сенсорных устройствах: на мобильных устройствах прокрутка может работать некорректно. Решение: добавьте -webkit-overflow-scrolling: touch для плавной инерционной прокрутки.

Мария Соколова, UX/UI дизайнер Работая над дизайн-системой для крупного банка, я столкнулась с интересной дилеммой: мобильное приложение использовало невидимые скроллбары, и клиент хотел сохранить этот паттерн в веб-версии. Когда мы внедрили скрытие скроллбаров, возникла неожиданная проблема — часть пользователей не понимала, что контент можно прокручивать. Мы провели A/B тестирование и нашли изящное решение: добавили тонкий, полупрозрачный индикатор прокрутки, который появлялся на секунду при загрузке страницы и при наведении курсора. Этого оказалось достаточно, чтобы дать пользователям подсказку о прокрутке, но сохранить минималистичный дизайн. Уровень вовлеченности вырос на 26%.

Условное отображение полосы прокрутки: практические кейсы

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

Рассмотрим несколько практических кейсов с соответствующими решениями:

Кейс 1: Отображение скроллбара при наведении

Скроллбар появляется только при наведении курсора на область с прокруткой:

CSS
Скопировать код
.hover-scrollbar {
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
transition: all 0.3s ease;
}

.hover-scrollbar::-webkit-scrollbar {
width: 0;
}

.hover-scrollbar:hover {
scrollbar-width: thin;
}

.hover-scrollbar:hover::-webkit-scrollbar {
width: 6px;
}

.hover-scrollbar:hover::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.3);
border-radius: 3px;
}

Кейс 2: Отображение скроллбара во время активной прокрутки

Для этого кейса потребуется JavaScript в сочетании с CSS:

CSS
Скопировать код
.scroll-active {
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}

.scroll-active::-webkit-scrollbar {
width: 0;
transition: width 0.3s ease;
}

.scroll-active.is-scrolling {
scrollbar-width: thin;
}

.scroll-active.is-scrolling::-webkit-scrollbar {
width: 6px;
}

.scroll-active.is-scrolling::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, 0.3);
border-radius: 3px;
}

JavaScript для отслеживания состояния прокрутки:

JS
Скопировать код
const scrollableElements = document.querySelectorAll('.scroll-active');

scrollableElements.forEach(element => {
let scrollTimer;

element.addEventListener('scroll', () => {
element.classList.add('is-scrolling');

clearTimeout(scrollTimer);
scrollTimer = setTimeout(() => {
element.classList.remove('is-scrolling');
}, 1000); // Скроллбар исчезает через 1 секунду после прекращения прокрутки
});
});

Кейс 3: Кастомный скроллбар с индикатором прогресса

Полезно для длинных страниц, где важно понимать прогресс прокрутки:

CSS
Скопировать код
.progress-scrollbar {
position: relative;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}

.progress-scrollbar::-webkit-scrollbar {
width: 0;
}

.progress-indicator {
position: absolute;
top: 0;
right: 0;
width: 4px;
height: 0; /* Изначально высота 0 */
background-color: #007bff;
opacity: 0.7;
transition: opacity 0.3s ease;
}

.progress-indicator:hover {
opacity: 1;
width: 6px;
}

JavaScript для расчета прогресса прокрутки:

JS
Скопировать код
const scrollContainer = document.querySelector('.progress-scrollbar');
const progressIndicator = document.querySelector('.progress-indicator');

scrollContainer.addEventListener('scroll', () => {
const scrollTop = scrollContainer.scrollTop;
const scrollHeight = scrollContainer.scrollHeight;
const clientHeight = scrollContainer.clientHeight;

const scrollPercentage = (scrollTop / (scrollHeight – clientHeight)) * 100;
progressIndicator.style.height = `${scrollPercentage}%`;
});

Кейс 4: Адаптивное отображение в зависимости от устройства

На настольных компьютерах скроллбар скрыт, на мобильных устройствах отображается стандартный (так как на них скроллбар обычно не виден постоянно):

CSS
Скопировать код
/* Базовые стили для всех устройств */
.adaptive-scrollbar {
overflow-y: scroll;
}

/* Стили для настольных устройств */
@media (min-width: 768px) {
.adaptive-scrollbar {
scrollbar-width: none;
-ms-overflow-style: none;
}

.adaptive-scrollbar::-webkit-scrollbar {
width: 0;
}
}

При реализации условного отображения скроллбаров важно учитывать следующие аспекты:

  • Доступность: проверьте, что пользователи с ограниченными возможностями могут понять, что контент можно прокручивать
  • Производительность: частые DOM-манипуляции при скроллинге могут влиять на производительность, особенно на мобильных устройствах
  • Консистентность: поведение интерфейса должно быть предсказуемым и не вызывать у пользователя когнитивной нагрузки
  • Тестирование: проверьте работу решения на различных устройствах и в разных браузерах

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

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

Загрузка...