Większość elementów interfejsu generowanych przez przeglądarkę można w pewnym stopniu dostosować za pomocą CSS. Nawet jeśli wymaga nowoczesnych funkcji, działa poprawnie w starszych przeglądarkach, więc często nie wymaga kodu polyfill ani kreacji zastępczej.
Zanim odtworzysz interfejs przeglądarki (elementy sterujące formularza, paski przewijania, zaznaczenia, komunikaty o błędach itp.), sprawdź, czy:
- interfejsu przeglądarki nie można dostosować do Twoich potrzeb, nawet przy użyciu nowoczesnego CSS;
- żądane dostosowanie jest na tyle ważne, że uzasadnia kompromisy związane z ponownym tworzeniem wbudowanego interfejsu użytkownika – przede wszystkim utratę semantyki ułatwień dostępu, obsługi klawiatury, edytora IME i integracji z technologiami wspomagającymi, które natywny interfejs użytkownika zapewnia bezpłatnie.
Przykładowe możliwe dostosowania:
- Użyj
::selection, aby dostosować kolory wyróżnienia niestandardowego tekstu. - NIE stosuj atrybutu
user-select: nonedo tekstu treści – uniemożliwia to kopiowanie i wklejanie, korzystanie z narzędzi do tłumaczenia i gestów „czytaj od tego miejsca” w technologiach wspomagających. Ogranicz je do elementów interfejsu (uchwyty do przeciągania, paski narzędzi, zbędne etykiety przycisków). - Użyj
accent-color, aby zastosować kolor uzupełniający strony do dowolnego interfejsu wygenerowanego przez przeglądarkę. - Użyj
color-scheme, aby dostosować interfejs przeglądarki do trybu jasnego lub ciemnego. - Użyj
scrollbar-color, aby dostosować kolory paska przewijania, iscrollbar-width, aby kontrolować jego grubość. Suwak powinien być wyraźnie odróżniony od ścieżki (≥3:1). Nie ustawiajscrollbar-width: nonew obszarach przewijania (używaj tej właściwości tylko wtedy, gdy przewijanie jest całkowicie zastąpione przez inną funkcję). - Do stylizacji poprawności używaj
:user-invalid/:user-valid, a nie:invalid/:valid– te ostatnie są dopasowywane dopiero po interakcji użytkownika z polem, co pozwala uniknąć oznaczania wymaganych pustych pól jako błędów podczas wczytywania strony. Wyklucz suwaki zakresu, gdy kierujesz reklamy nainputszeroko (np.input:not(input[type="range"]):user-valid), aby dostosowanie suwaka nie powodowało stosowania do niego obramowań ani tła pola. - Przyciski i pola tekstowe (w tym
<textarea>) można zwykle stylizować jak zwykłe elementy. - Używaj
font-sizedo skalowania i innych właściwości tekstowych, aby kontrolować typografię
Stylizowanie pól tekstowych (<input> i <textarea>)
W większości przypadków (np.kolory, obramowania, tła, typografia itp.) traktuj te elementy jak zwykłe kontenery tekstowe.
- Użyj
:placeholder-showni::placeholder, aby nadać styl obiektom zastępczym danych wejściowych. - Użyj
field-sizing: content, aby dopasować rozmiar pól tekstowych do zawartości. - W przypadku elementów
<textarea>użyjresize: vertical, aby wyłączyć zmianę rozmiaru w poziomie, lubresize: none, aby wyłączyć zmianę rozmiaru w ogóle.
Elementy sterujące wielokrotnego wyboru (wybór, przyciski, pola wyboru)
- Aby wybrać jedną z wielu opcji wyświetlanych w menu, użyj kombinacji
<select>+appearance: base-select+::picker(select). Więcej informacji znajdziesz w artykule Stylizacja Branded Select. - Wybieranie co najmniej jednej z wielu opcji ułożonych w wierszu na stronie: użyj elementu
<input type=checkbox>lub<input type=radio>wewnątrz elementu<label>dla każdej opcji. Styl:label:has(:checked). - Stylizuj pola wyboru, przyciski opcji i przełączniki za pomocą
appearance: nonei wygenerowanej treści (::before/::after) lub obrazów tła, aby narysować stan zaznaczenia.
Elementy <input>, które nie są tekstem (przyciski, suwaki, pola wprowadzania plików itp.)
- Dane wejściowe pliku: użyj
::file-selector-button, aby nadać styl przyciskowi. - Nie używaj
<input>ztypeo wartościbutton,submitlubreset. Zamiast tego użyj<button>i nadaj mu styl zwykłego elementu. - Suwaki: używaj pseudoelementów
appearance: none+ thumb (::-webkit-slider-thumb,::-moz-range-thumbitp.) i pseudoelementów track (::-webkit-slider-runnable-track,::-moz-range-trackitp.), aby uzyskać bardziej szczegółową kontrolę.