Stylizujemy pola typu Radio za pomocą własności CSS3


9 sierpnia 2013 / Michał Kortas


Czy kiedykolwiek próbowaliście zmieniać wygląd standardowych widoków elementów, takich jak polajednokrotnego wyboru (radio) i wielokrotnego wyboru(checkbox) za pomocą tylko i wyłącznie CSS? Jeżeli nie, to pewnie jeszcze nie wiecie, że to nie zupełnie takie proste. Warto poświęcić jednak trochę czasu, aby przygotować dużo lepiej wyglądające pola formularzy, niż to przewidują twórcy przeglądarek. Wykorzystamy do tego selektory i pseudoklasy zawarte w specyfikacji języka CSS3. W dzisiejszym poradniku zajmiemy się przyciskami typu Radio. Zapraszam do lektury.

Aby zobaczyć demo lub pobrać pliki źródłowe niniejszego poradnika, wybierz odpowiednią opcję na końcu artykułu. Również Twój komentarz będzie dla mnie bardzo ważny, dlatego śmiało możesz podzielić się ze mną swoją opinią na temat wpisu.

Radio – stylizacja pola jednokrotnego wyboru w CSS3

Przyjęło się, że pola jednokrotnego wyboru wyróżniają się owalnym kształtem, a tzw. checkbox’y – to po prostu prostokąty. Według podstawowych zasad UX (User eXprerience) nie powinniśmy zmieniać utartych przyzwyczajeń, dlatego w tym poradniku pozostawimy kształty na swoim miejscu. Zmienimy kolory, dodamy cienie i odejdziemy od spartańskich, surowych elementów serwowanych nam przez (oczywiście nie wszystkich) twórców przeglądarek.

Przyjmijmy, że mamy 3 pola typu radio. Oczywiście może ich być dowolna ilość. Kod odpowiedzialny za ich wyświetlanie jest oczywisty.

Otrzymaliśmy następujące elementy:

Ok, czas przystąpić do właściwej pracy, czyli stylizacji. Na samym początku doprowadzimy do lepszego stanu etykiety, czyli opisy obok pól wyboru. Szczególnie dużą rolę odegra tu multi-cień, który delikatnie wygładzi nam tekst.

Niestety samych pól wyboru (owali) nie możemy edytować. Co więc zrobimy? Ukryjemy je. Tak ukryjemy, lecz za moment zastąpimy je naszymi własnymi.

Tak jak wspomniałem przed chwilą, teraz dodamy własne pola Radio. To bardzo proste – użyjemy do tego pseudoklasy :before, która wstawiać będzie „treść” przed naszą etykietą. Rzeczą, o której należy pamiętać, jest nadanie wartości dla border-radius dokładnie o połowe mniejszej niż wysokość (lub szerokość). Tylko wtedy uzyskamy idealnie owalny kształt.

No dobrze, nasze pola się już wyświetlają. Jednak kiedy zaznaczamy któreś z nich, nic się nie dzieje. Oto rozwiązanie.

Kilka słów wyjaśnienia. Pewnie zastanawiacie się, czym jest ta tajemnicza liczba przypisana do własności content. To nic innego, aniżeli zwykła kropka (bullet), dostępna dzięki kodowaniu UTF-8. Zapis w powyższym listingu jest zapisem przygotowanym specjalnie na potrzeby języka CSS. Warto też poeksperymentować z własnością line-height. Pomoże ona dopasować położenie zaznaczenia.

Przyjrzyjmy się, jaki efekt osiągnęliśmy.

Zamieniając tylko dwie własności (color w ostatnim listingu oraz background-color w przedostatnim) możemy uzyskać zupełnie inną wersję kolorystyczną elementów Radio.

Zobacz DEMO on-line Pobierz pliki źródłowe



8 odpowiedzi na “Stylizujemy pola typu Radio za pomocą własności CSS3”

  1. pk pisze:

    :checked i IE się nie lubią niestety, chyba w 8 albo 7 nie działało, czeba JS!

    • Niestety… Nie wiem jak IE9, ale pod „dziesiątką” już wszystko działa poprawnie. Pozdrawiam!

    • Comandeer pisze:

      Jeśli trza wspierać IE < 9 (albo 10 – nie wiem dokładnie), to można zastosować trick z selektorem, żeby nie urąbać userom pola formularza. choćby coś na wzór :not(#naPewnoNieUzyty) input[type=radio]

      co prawda nie dostaniemy ładnego pola formularza, ale za to nie potrzeba żadnego JS i innych owijaczy

  2. Piotr Nalepa pisze:

    rozkręciłeś się z tymi wpisami :)

  3. Muszę przyznać, że naprawdę eleganckie wyszły Ci te pola typu Radio. Na pewno w moim najbliższym projekcie zastąpię domyśle pola radio w bootstrapie tymi twoimi :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *