Sposób na ładne checkboksy
Tagi: checkbox, CSS, formularz, JavaScript, jQuery, tutorial
Ostylowanie formularza tak, by wyglądał zgodnie z nakreślonymi wytycznymi, do tego tak samo w większości przeglądarek? Zmora… A właściwie można by pokusić się o stwierdzenie, że to rzecz niewykonalna.
O ile pola tekstowe i przyciski można swobodnie modyfikować, bawić się tłem, obramowaniem i efektami tekstu, to z polami wyboru i opcji (checkbox i radio) tak łatwo nie jest. Pokażę jednak, że wcale nie jesteśmy skazani na porażkę w walce z “windowsowym” wyglądem formularzy.
Przede wszystkim nie użyjemy wyłącznie stylu CSS. Na jednej z tworzonych ostatnio stron zastosowałem prostą i popularną sztuczkę z użyciem JS/jQuery. Polega ona na tym, że zamiast checkboksa pokazujemy użytkownikowi zwykły element blokowy, który steruje polem wyboru, a do tego po prostu fajnie wygląda.
Oczywiście, minusem jest to, że aby trick zadziałał, potrzebna jest obsługa JavaScript w przeglądarce. Nie powinno to jednak stanowić problemu w dzisiejszych czasach. Nawet większość urządzeń mobilnych pozwala na obsługę skryptów w przeglądarce.
Ale do rzeczy – jak dokładnie wygląda ta metoda? Po kliknięciu w “fałszywe” pole:
- checkbox zostaje zaznaczony
- element zmienia klasę CSS na oznaczającą zaznaczenie
Gdy pole wyboru jest już aktywne, sytuacja jest odwrotna:
- checkbox zostaje odznaczony
- element zmienia klasę CSS na oznaczającą brak zaznaczenia
Przykładowy kod HTML:
<input id="real_checkbox" type="checkbox" > <div id="div_checkbox" class="unchecked"></div>
Skrypt JS (pamiętaj o załączeniu jQuery!):
$(document).ready(function() { $('#div_checkbox').click(function() { if ($(this).hasClass('unchecked')) { $(this).removeClass('unchecked').addClass('checked'); $('#real_checkbox').prop('checked', true); } else { $(this).removeClass('checked').addClass('unchecked'); $('#real_checkbox').prop('checked', false); } }); });
I oczywiście styl:
#real_checkbox { display: none; } #div_checkbox { width: 20px; height: 20px; cursor: pointer; background: #EEEEEE; border: 1px solid #3A3A3A; text-align: center; box-shadow: inset 0 0 3px rgba(0, 0, 0, 0.3); display: inline-block; } #div_checkbox.checked:before { content:'✖'; display: block; margin: 3px auto; color: #770000; font-weight: bold; font-size: 14px; line-height: 14px; text-shadow: 0 0 2px rgba(0, 0, 0, 0.4); }
Działające demo dostępne jest w serwisie JSFiddle. Tam jednak nie ukrywałem całkowicie domyślnego elementu, a jedynie zablokowałem go, by pokazać skuteczność skryptu.
Dzięki temu zabiegowi bez problemu poradzimy sobie z upiększaniem pól formularza, pozornie niemożliwych do ostylowania. Nieco bardziej trzeba się nakombinować, jeżeli na stronie mamy więcej takich checkboksów, ale jest to wyłącznie kwestia dopisania kilku linijek kodu. Wszystko da się zrobić, a dla chcącego nic trudnego.
Swietnie piszesz, naprawdę 🙂 Posiadasz wielki talent do pisania, a rzadko kto posiada takowy 🙂 Niestety coraz więcej osob bierze się za pisanie nie wiedząc o tym nic, a ich teksty, hmm, zeby nie uzywac brzydkich okreslen, pozostawiaja wiele do zyczenia :p U Ciebie jest jednak inaczej, w peli wykorzystujesz swoj talent, co się ceni 🙂 Pozdrawiam
Przydatny poradnik 🙂
dzięki za info, cały czas się uczę jeszcze programowania, to taki mój ostatnio konik i uczę się sporo o stylach i jak je wykorzystywać
Dzięki za poradnik, potrzebowałem właśnie czegoś takiego na zapytanie klienta, który jest niezwykle wybredny jeśli chodzi o style. U niego wszystko musi po prostu wyglądać jak z bajki 🙂
Jak w zewnętrznym arkuszu stylów zapisać styl dla checkbox’a? Aktualnie mam sam styl dla INPUT, ale dla CHECKBOX’a nie działa 🙁
Ultra Hot ostatnio opublikował Psychologia Automatów czyli taktyki kasyn używane by zatrzymać Cię w grze
Wystarczy skopiować kod CSS do arkusza. Być może klasy/id się nie zgadzają?
Dokładnie, miałem błąd w nazwie klasy, jak kopiowałem, to brakło mi pierwszej literki :D:D:D
Ultra Hot ostatnio opublikował Dlaczego automaty online są lepsze od maszyn na żywo?