Заметки кодящего дизайнера

Как стилизовать скроллбар

Возможностей не то чтобы очень много, но они есть.

Делал меню на сайте и в очередной раз столкнулся с необходимостью стилизовать скроллбар на сайте. Дефолтные полосы прокрутки, возникающие при переполнении блока с overflow: auto; выглядят, конечно, ужасно.

Сперва укажем ширину вертикального и высоту горизонтального скроллбара для Webkit-браузеров (Safari).

.scrollable-container::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

Следом стилизуем ползунок.

.scrollable-container::-webkit-scrollbar-thumb {
  background-color: #555;
  border-radius: 6px;
  border: 1px solid #777;
  background-clip: content-box;
}

.scrollable-container::-webkit-scrollbar-thumb:hover {
  background-color: #777;
}

Следом можем стилизовать сам трек.

.catalog-nav__scrollable::-webkit-scrollbar-track {
    background-color: transparent;
    border-radius: 8px;
}

.catalog-nav__scrollable::-webkit-scrollbar-track:hover {
    background-color: transparent;
}

И даже уголок между горизонтальным и вертикальным треками.

.catalog-nav__scrollable::-webkit-scrollbar-corner {
    background-color: transparent;
}

Но, к сожалению, всё описанное выше будет работать только в Safari. Для остальных браузеров остаётся всего три свойства.

  • scrollbar-width — ширина скроллбара, причём не ширина в каких-то единицах, а три варианта: обычный, тонкий или никакого.
  • scrollbar-color — принимает два цвета: первый для ползунка, второй для трека.
  • scrollbar-gutter — позволяет зафиксировать отступ даже если полоса прокрутки не появилась (чтобы контент не прыгал).
.catalog-nav__scrollable {
    scrollbar-width: thin;
    scrollbar-color: #555 transparent;
    scrollbar-gutter: auto;
}