Generator paska przewijania CSS

Dalej

Niestandardowe paski przewijania były kiedyś koszmarem pseudoelementów z prefiksami producentów. Dziś scrollbar-color i scrollbar-width obsługują typowe przypadki we wszystkich nowoczesnych przeglądarkach: wąską lub standardową szerokość oraz dwukolorowy motyw (suwak i ścieżka). Do sterowania na poziomie pikseli (wypełnienie ścieżki, promień suwaka, stany po najechaniu) starsze pseudoelementy ::-webkit-scrollbar nadal działają w Chrome i Safari. Ten generator tworzy obie wersje i poprawnie je kaskaduje.

Jak nadać styl paskowi przewijania

  1. 1

    Wybierz szerokość

    Auto (domyślna szerokość platformy), cienki (węższy) lub konkretna wartość w pikselach za pomocą reguł webkit.

  2. 2

    Ustaw kolory suwaka i ścieżki

    Nowoczesne `scrollbar-color` przyjmuje dwa kolory. Reguły webkit pozwalają na osobny kolor, promień i stany po najechaniu.

  3. 3

    Dodaj efekt po najechaniu (opcjonalnie)

    Suwak rozjaśnia się po najechaniu. Działa przez `::-webkit-scrollbar-thumb:hover`.

  4. 4

    Określ zakres

    Zastosuj do `html` / `body` (cała strona) albo tylko do konkretnego przewijalnego kontenera.

  5. 5

    Skopiuj CSS

    Połączone reguły nowoczesne i webkit: działa w każdej nowoczesnej przeglądarce z płynnym mechanizmem awaryjnym.

Nowoczesne właściwości standardowe (od 2023)

/* Applies to the element that scrolls */
html {
  scrollbar-width: thin;           /* auto | thin | none */
  scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}

Wsparcie przeglądarek (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+. Rezerwuje miejsce na pasek przewijania nawet wtedy, gdy nie jest potrzebny, co zapobiega przesunięciu układu.

Pseudoelementy webkit (Chrome, Safari, starszy 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;
}

Bardziej szczegółowa kontrola. width ustawia szerokość pionowego paska przewijania; height ustawia wysokość poziomego. Dodaj obie właściwości dla kontenerów, które mogą przewijać się w obu kierunkach.

Kaskadowe połączenie obu podejść

Najpierw podaj reguły nowoczesne, a potem webkit jako rozszerzenie dla przeglądarek renderujących oba warianty:

.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 uwzględnia tylko nowoczesne reguły scrollbar-*. Chrome i Safari uwzględniają reguły webkit (które nadpisują nowoczesne, więc zachowanie jest spójne).

scrollbar-gutter zapobiega przesuwaniu treści

Bez zarezerwowanego marginesu treść zmienia układ, gdy pojawia się pasek przewijania (częste w listach dynamicznych). Rozwiązanie:

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

Miejsce na pasek przewijania jest rezerwowane niezależnie od tego, czy treść się przewija. both-edges dodaje odpowiadający margines po przeciwnej stronie, aby treść pozostała wizualnie wyśrodkowana.

Całkowite ukrycie pasków przewijania

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

Uwaga: ukrycie paska przewijania sprawia, że użytkownicy nie widzą, iż treść można przewijać. Stosuj to tylko z wyraźnym wskaźnikiem (strzałki, kropki stron) albo gdy przewijanie wynika jasno z kontekstu (poziome karuzele, historie czatu).

Uwagi dotyczące urządzeń mobilnych

W systemach iOS i Android paski przewijania pojawiają się tylko na chwilę podczas przewijania. Twój niestandardowy CSS paska nadal się stosuje, ale użytkownicy mogą nigdy nie zobaczyć go dłużej niż przez sekundę. Projektuj odpowiednio: nie inwestuj zbyt mocno w efekty wizualne, które rzadko są widoczne.

Dostępność

  • Kontrast: suwak względem ścieżki powinien osiągać 3:1 dla kontrastu nietekstowego (WCAG 1.4.11).
  • Szerokość: cienkie paski przewijania trudno chwycić myszą, zwłaszcza użytkownikom z niepełnosprawnościami ruchowymi. Standardowa szerokość jest bezpieczniejszym ustawieniem domyślnym.
  • Nigdy nie usuwaj paska przewijania w obszarach przewijalnych bez zapewnienia innego sposobu przewijania. Użytkownicy polegający na pasku zostaną zablokowani.

Najczęściej zadawane pytania

Tak, za pomocą nowoczesnych właściwości scrollbar-width i scrollbar-color. Firefox nie obsługuje pseudoelementów webkit, więc aby uzyskać spójny wygląd w różnych przeglądarkach, najpierw użyj właściwości nowoczesnych, a reguły webkit dodaj jako rozszerzenie.

Ponieważ domyślne paski przewijania nakładają się na treść i nie rezerwują miejsca, dopóki nie są potrzebne. Ustaw scrollbar-gutter: stable na przewijanym elemencie, aby zawsze rezerwować margines i zapobiec zmianie układu, gdy pasek pojawia się lub znika.

Zwykle tak, bo pasek przewijania wygląda nie na miejscu i konkuruje z treścią. Dodaj widoczne kropki paginacji lub przyciski strzałek, aby użytkownicy nadal wiedzieli, że treść się przewija. Uwzględnij prefers-reduced-motion, jeśli używasz przyciągania przewijania (scroll-snapping).

Może wpływać. Bardzo cienkie lub słabo kontrastowe paski przewijania są trudne w użyciu dla osób z niepełnosprawnościami ruchowymi i słabym wzrokiem. Zachowaj szerokość paska co najmniej 8–10 px dla wygodnego chwytu i utrzymuj kontrast 3:1 między suwakiem a ścieżką.

Powiązane narzędzia