Próbuję stylizować pole wyboru, używając następujących elementów:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Ale styl nie jest stosowany. Pole wyboru nadal wyświetla domyślny styl. Jak nadać mu określony styl?
Odpowiedzi:
AKTUALIZACJA:
Poniższa odpowiedź odnosi się do stanu rzeczy przed powszechną dostępnością CSS 3. We współczesnych przeglądarkach (w tym Internet Explorer 9 i nowszych) łatwiej jest tworzyć zamienniki pól wyboru według preferowanej stylizacji, bez użycia JavaScript.
Oto kilka przydatnych linków:
Warto zauważyć, że podstawowa kwestia się nie zmieniła. Nadal nie można zastosować stylów (ramek itp.) Bezpośrednio do elementu pola wyboru, a style te mają wpływ na wyświetlanie pola wyboru HTML. Jednak zmieniło się to, że teraz można ukryć rzeczywiste pole wyboru i zastąpić go własnym stylem, używając tylko CSS. W szczególności, ponieważ CSS ma teraz szeroko obsługiwany
:checked
selektor, możesz sprawić, aby zamiennik poprawnie odzwierciedlał status zaznaczonego pola.STARSZA ODPOWIEDŹ
Oto przydatny artykuł na temat pól wyboru stylizacji . Zasadniczo ten pisarz stwierdził, że różni się ogromnie w zależności od przeglądarki i że wiele przeglądarek zawsze wyświetla domyślne pole wyboru, bez względu na to, jak go stylizujesz. Tak naprawdę nie ma łatwego sposobu.
Nietrudno wyobrazić sobie obejście, w którym można użyć JavaScript do nałożenia obrazu na pole wyboru, a kliknięcie tego obrazu powoduje zaznaczenie prawdziwego pola wyboru. Użytkownicy bez JavaScript zobaczyliby domyślne pole wyboru.
Zmodyfikowano, aby dodać: oto fajny skrypt, który robi to za Ciebie ; ukrywa prawdziwy element pola wyboru, zastępuje go stylem zakresu i przekierowuje zdarzenia kliknięcia.
źródło
Jest na to sposób za pomocą CSS. Możemy (ab) użyć tego
label
elementu i nadać mu styl. Zastrzeżenie polega na tym, że nie będzie to działać w przypadku programu Internet Explorer 8 i niższych wersji.źródło
input
nigdy nie skupiają się na klawiaturze, więc są one nieosiągalne dla klawiatury.Można osiągnąć całkiem fajny efekt niestandardowe pole wyboru przy użyciu nowych umiejętności, które pochodzą z
:after
i:before
pseudo klas. Zaletą tego jest: Nie musisz dodawać nic więcej do DOM, tylko standardowe pole wyboru.Uwaga: będzie to działać tylko w przypadku zgodnych przeglądarek. Wierzę, że jest to związane z faktem, że niektóre przeglądarki nie pozwalają na ustawienie
:after
i:before
na elementach wejściowych. Co niestety oznacza, że na razie obsługiwane są tylko przeglądarki WebKit. Firefox + Internet Explorer nadal będzie pozwalał na funkcjonowanie pól wyboru, po prostu niestylowany, i mam nadzieję, że zmieni się to w przyszłości (kod nie używa prefiksów dostawcy).Jest to tylko rozwiązanie przeglądarki WebKit (Chrome, Safari, przeglądarki mobilne)
Zobacz przykład skrzypce
Bonusowe skrzypce w stylu Webkit
źródło
Zanim zaczniesz (od stycznia 2015)
Oryginalne pytanie i odpowiedź mają teraz ~ 5 lat. W związku z tym jest to trochę aktualizacja.
Po pierwsze, istnieje wiele podejść do stylizacji pól wyboru. podstawową zasadą jest:
Musisz ukryć domyślną kontrolkę pola wyboru, która jest stylizowana przez twoją przeglądarkę i nie można jej w żaden znaczący sposób zastąpić za pomocą CSS.
Gdy kontrola jest ukryta, nadal będziesz w stanie wykryć i przełączyć jej sprawdzony stan
Zaznaczony stan pola wyboru będzie musiał zostać odzwierciedlony przez stylizację nowego elementu
Rozwiązanie (w zasadzie)
Można to osiągnąć na wiele sposobów - i często usłyszysz, że użycie pseudoelementów CSS3 jest właściwą drogą. W rzeczywistości nie ma prawdziwego dobrego lub złego sposobu, zależy to od podejścia najbardziej odpowiedniego dla kontekstu, w którym będziesz go używał. To powiedziawszy, mam preferowane.
Zawiń pole wyboru w
label
elemencie. Oznacza to, że nawet gdy jest ukryty, nadal możesz przełączać jego zaznaczony stan po kliknięciu w dowolnym miejscu etykiety.Ukryj pole wyboru
Dodaj nowy element za polem wyboru, które odpowiednio stylizujesz. Musi pojawić się za polem wyboru, aby można go było wybrać za pomocą CSS i stylizować w zależności od
:checked
stanu. CSS nie może wybrać „wstecz”.Rozwiązanie (w kodzie)
Pokaż fragment kodu
Udoskonalenie (za pomocą ikon)
Ale hej! Słyszę jak krzyczysz. Co jeśli chcę pokazać fajny mały haczyk lub krzyżyk w polu? I nie chcę używać obrazów tła!
Cóż, tutaj mogą wejść w grę pseudoelementy CSS3. Obsługują one
content
właściwość, która umożliwia wstrzykiwanie ikon Unicode reprezentujących oba stany. Alternatywnie, możesz użyć źródła ikony innej firmy, takiego jak czcionka niesamowita (pamiętaj jednak, aby ustawić odpowiedniefont-family
, np. NaFontAwesome
)źródło
display: none
.visibility: hidden;
sięopacity: 0 !important;
jeśli nadal masz kłopoty z tabulatorem.Postępuję zgodnie z radą zawartą w odpowiedzi SW4 - aby ukryć pole wyboru i zakryć go niestandardowym zakresem, sugerując ten kod HTML:
Zawijanie etykiety pozwala starannie kliknąć tekst bez konieczności łączenia atrybutów „for-id”. Jednak,
Nie ukrywaj go za pomocą
visibility: hidden
lubdisplay: none
Działa poprzez klikanie lub stukanie, ale jest to kiepski sposób używania pól wyboru. Niektóre osoby nadal używają znacznie bardziej efektywnego Tabdo poruszania się, Spaceaktywacji, a ukrywanie się za pomocą tej metody wyłącza go. Jeśli formularz jest długi, oszczędza się czyjeś nadgarstki do użycia
tabindex
lubaccesskey
atrybuty. A jeśli zaobserwujesz zachowanie pola wyboru systemu, najechanie myszą na przyzwoity cień. Dobrze zaprojektowane pole wyboru powinno być zgodne z tym zachowaniem.Odpowiedź cobberboy zaleca Font Awesome, który jest zwykle lepszy niż bitmapa, ponieważ czcionki są wektorami skalowalnymi. Pracując z powyższym kodem HTML, sugeruję następujące reguły CSS:
Ukryj pola wyboru
Używam tylko przeczenia,
z-index
ponieważ mój przykład wykorzystuje wystarczająco dużą skórkę pola wyboru, aby w pełni ją zakryć. Nie polecam,left: -999px
ponieważ nie można go używać w każdym układzie. Odpowiedź Bushana zapewnia kuloodporny sposób na ukrycie go i przekonanie przeglądarki do korzystania z tabindex, więc jest to dobra alternatywa. W każdym razie oba to tylko hack. Właściwy sposób to dziśappearance: none
, patrz odpowiedź Joosta :Etykieta pola wyboru stylu
Dodaj skórkę pola wyboru
\00f096
jest czcionką Awesomesquare-o
, dopełnienie jest dostosowywane, aby zapewnić skupienie nawet kropkowanego konturu (patrz poniżej).Dodaj zaznaczoną skórkę
\00f046
jest czcionką Awesomecheck-square-o
, która nie ma takiej samej szerokościsquare-o
, co jest przyczyną powyższego stylu szerokości.Dodaj zarys ostrości
Safari nie zapewnia tej funkcji (patrz komentarz @Jason Sankey), powinieneś użyć
window.navigator
do wykrycia przeglądarki i pominięcia jej, jeśli jest to Safari.Ustaw szary kolor dla wyłączonego pola wyboru
Ustaw cień hover na nie wyłączonym polu wyboru
Demo Fiddle
Spróbuj najechaniu myszką nad wyboru i stosowania Taboraz Shift+ Tabdo poruszania się i Spacedo przełączania.
źródło
Możesz stylizować pola wyboru przy użyciu odrobiny sztuczki, używając
label
elementu, którego przykład poniżej:I FIDDLE dla powyższego kodu. Pamiętaj, że niektóre CSS nie działają w starszych wersjach przeglądarek, ale jestem pewien, że są tam jakieś fantazyjne przykłady JavaScript!
źródło
Proste w implementacji i łatwe do dostosowania rozwiązanie
Po wielu poszukiwaniach i testach otrzymałem to rozwiązanie, które jest łatwe do wdrożenia i łatwiejsze do dostosowania. W tym rozwiązaniu :
Wystarczy umieścić płynny CSS u góry strony, a styl wszystkich pól wyboru zmieni się w następujący sposób:
źródło
Możesz uniknąć dodawania dodatkowych znaczników. Działa to wszędzie oprócz IE na komputery (ale działa w IE dla Windows Phone i Microsoft Edge) poprzez ustawienie CSS
appearance
:źródło
Wolę używać czcionek ikon (takich jak FontAwesome), ponieważ można łatwo modyfikować ich kolory za pomocą CSS i skalują się naprawdę dobrze na urządzeniach o dużej gęstości pikseli. Oto kolejny wariant czystego CSS, wykorzystujący techniki podobne do powyższych.
(Poniżej znajduje się obraz statyczny, dzięki czemu można wizualizować wynik; zobacz JSFiddle, aby uzyskać interaktywną wersję).
Podobnie jak w przypadku innych rozwiązań, wykorzystuje
label
element. Obokspan
znajduje się nasz znak pola wyboru.Oto JSFiddle .
źródło
font-family: FontAwesome;
zfont-family: 'Font Awesome\ 5 Free';
i aktualizowanie zawartości Unicode, jeśli chcesz, aby pracować w nowej wersji.Ostatnio znalazłem dość interesujące rozwiązanie problemu.
Możesz użyć,
appearance: none;
aby wyłączyć domyślny styl pola wyboru, a następnie napisać własny, jak opisano tutaj (Przykład 4) .Przykładowe skrzypce
Pokaż fragment kodu
Niestety obsługa przeglądarki jest dość zła dla
appearance
opcji. Z moich osobistych testów wynika, że tylko Opera i Chrome działają poprawnie. Byłby to jednak sposób na uproszczenie, gdy pojawi się lepsze wsparcie lub chcesz tylko korzystać z Chrome / Opera."Mogę uzyć?" połączyć
źródło
appearance
właśnie tego potrzebujemy; pamiętaj tylko, że „jest niestandardowy i nie jest na standardowym torze” .Z czystym CSS, nic szczególnego
:before
i:after
bez transformacji, możesz wyłączyć domyślny wygląd, a następnie stylizować go za pomocą wbudowanego obrazu tła, jak w poniższym przykładzie. Działa to w Chrome, Firefox, Safari, a teraz Edge (Chromium Edge).źródło
Moje rozwiązanie
źródło
Możesz po prostu używać
appearance: none
w nowoczesnych przeglądarkach, aby nie było domyślnego stylu, a wszystkie style były stosowane poprawnie:źródło
Chcesz NIE JavaScript, BEZ bibliotek zewnętrznych, zgodności z ułatwieniami dostępu, a także pól wyboru i przycisków radiowych?
Przewijałem i przewijałem, a mnóstwo tych odpowiedzi po prostu wyrzuciło dostępność za drzwi i naruszyło WCAG na więcej niż jeden sposób. Wrzuciłem przyciski opcji, ponieważ przez większość czasu, kiedy używasz niestandardowych pól wyboru, chcesz także niestandardowe przyciski opcji.
Skrzypce :
Późno na imprezę, ale w jakiś sposób jest to nadal trudne w
20192020, więc dodałem moje trzy rozwiązania, które są dostępne i łatwo wpaść.Wszystkie są wolne od JavaScript , zewnętrzne biblioteki wolne * i dostępne ...
Jeśli chcesz podłączyć dowolną z nich, po prostu skopiuj arkusz stylów ze skrzypiec, edytuj kody kolorów w CSS, aby dopasować je do swoich potrzeb i być na dobrej drodze. Możesz dodać niestandardową ikonę znacznika svg, jeśli chcesz dla pól wyboru. Dodałem wiele komentarzy dla osób spoza CSS.
Jeśli masz długi tekst lub mały pojemnik i napotykasz zawijanie tekstu pod polem wyboru lub przyciskiem radiowym, po prostu przekonwertuj na div tak jak to .
Dłuższe wyjaśnienie: potrzebowałem rozwiązania, które nie narusza WCAG, nie opiera się na JavaScript ani bibliotekach zewnętrznych, i które nie przerywa nawigacji po klawiaturze, takiej jak tabulacja lub spacja, aby wybrać zdarzenia, które umożliwiają fokusowanie zdarzeń, rozwiązanie, które pozwala na wyłączenie pól wyboru, które są zarówno sprawdzone i niekontrolowany, a wreszcie rozwiązanie, w którym można dostosować wygląd wyboru jednak chcę z różnymi
background-color
„s,border-radius
,svg
tła, itd.Użyłem kombinacji tej odpowiedzi od @Jana Turoňa, aby znaleźć własne rozwiązanie, które wydaje się działać całkiem dobrze. Zrobiłem skrzypce przycisku radiowego, który używa dużo tego samego kodu z pól wyboru, aby to działało również z przyciskami radiowymi.
Wciąż uczę się dostępności, więc jeśli coś przeoczyłem, zostaw komentarz i postaram się go poprawić, to przykład kodu moich pól wyboru:
źródło
Oto proste rozwiązanie CSS bez kodu jQuery lub JavaScript.
Używam ikon FontAwseome, ale możesz użyć dowolnego obrazu
źródło
label
lubspan
elementów. To po prostu działa!Z mojego googlowania jest to najprostszy sposób na stylizację pól wyboru. Wystarczy dodać
:after
i:checked:after
CSS w oparciu o swój projekt.źródło
Zmodyfikuj styl pola wyboru za pomocą zwykłego CSS3, nie wymagał żadnych manipulacji JS i HTML.
źródło
Prosty i lekki szablon:
https://jsfiddle.net/rvgccn5b/
źródło
input
s są obsługiwane tylko w Chrome, Twój kod nie działa tak samo w każdej przeglądarce.Myślę, że najłatwiej to zrobić, projektując
label
i czyniąccheckbox
niewidzialnym.HTML
CSS
checkbox
, Mimo że jest ukryty, będą nadal dostępne, a jego wartość zostanie wysłana, gdy formularz jest składany. W przypadku starych przeglądarek może być konieczna zmiana klasylabel
na sprawdzane za pomocą JavaScript, ponieważ nie sądzę, aby stare wersje Internet Explorera rozumiały::checked
wcheckbox
.źródło
::checked
jest błędne - powinno być:checked
. (b)checkbox
jest źle - powinno być[type=checkbox]
Yikes! Wszystkie te obejścia doprowadziły mnie do wniosku, że pole wyboru HTML jest do bani, jeśli chcesz go stylizować.
Ostrzegając, nie jest to implementacja CSS. Pomyślałem, że podzielę się obejściem, na które wpadłem, na wypadek, gdyby ktokolwiek mógł uznać to za przydatne.
Użyłem
canvas
elementu HTML5 .Zaletą tego jest to, że nie musisz używać zewnętrznych obrazów i prawdopodobnie możesz zaoszczędzić trochę przepustowości.
Minusem jest to, że jeśli przeglądarka z jakiegoś powodu nie może poprawnie wyrenderować, to nie ma rezerwy. Jednak kwestia, czy problem ten pozostaje w 2017 r., Jest dyskusyjna.
Aktualizacja
Znalazłem stary kod dość brzydki, więc postanowiłem go przepisać.
Oto działające demo .
Nowa wersja wykorzystuje prototypy i dziedziczenie różnicowe do stworzenia wydajnego systemu do tworzenia pól wyboru. Aby utworzyć pole wyboru:
Spowoduje to natychmiastowe dodanie pola wyboru do DOM i połączenie zdarzeń. Aby zapytać, czy pole wyboru jest zaznaczone:
Należy również zauważyć, że pozbyłem się pętli.
Aktualizacja 2
Coś, czego nie wspomniałem w ostatniej aktualizacji, to fakt, że korzystanie z obszaru roboczego ma więcej zalet niż tworzenie pola wyboru, które wygląda tak, jak chcesz. Możesz również utworzyć wielostanowe pola wyboru, jeśli chcesz.
Zmodyfikowałem nieco ten
Checkbox
użyty w ostatnim fragmencie, aby był bardziej ogólny, dzięki czemu można go „rozszerzyć” za pomocą pola wyboru, które ma 3 stany. Oto demo . Jak widać, ma już więcej funkcji niż wbudowane pole wyboru.Coś do rozważenia przy wyborze między JavaScript a CSS.
Stary, źle zaprojektowany kod
Demo pracy
Najpierw ustaw płótno
Następnie wymyśl sposób, aby sama aktualizacja płótna była możliwa.
Ostatnią częścią jest interaktywność. Na szczęście jest to dość proste:
To tutaj możesz mieć problemy w IE z powodu ich dziwnego modelu obsługi zdarzeń w JavaScript.
Mam nadzieję, że to komuś pomoże; to zdecydowanie odpowiadało moim potrzebom.
źródło
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
. Stany mogą na przykład reprezentować „jawnie fałszywe”, „jawnie prawdziwe”, „użyj domyślnych”). Rozważam dodanie przykładu do odpowiedzi.Jest to najprostszy sposób i możesz wybrać, które pola wyboru mają dać ten styl.
CSS:
HTML:
źródło
Zmień swój styl pola wyboru w prosty sposób.
Oto link JsFiddle
źródło
Oto wersja tylko dla CSS / HTML, nie wymaga jQuery ani JavaScript, prosty i czysty HTML oraz naprawdę prosty i krótki CSS.
Oto JSFiddle
http://jsfiddle.net/v71kn3pr/
Oto HTML:
Oto CSS
Można to dostosować, aby mieć także indywidualne radio lub pola wyboru, grupy pól wyboru i grupy przycisków opcji.
Ten html / css pozwoli ci również przechwycić kliknięcie etykiety, więc pole wyboru zostanie zaznaczone i odznaczone, nawet jeśli klikniesz tylko etykietę.
Ten rodzaj pola wyboru / przycisku radiowego działa idealnie z każdą formą, bez problemu. Zostały przetestowane przy użyciu PHP, ASP.NET (.aspx), JavaServer Faces i ColdFusion .
źródło
źródło
źródło
Nie, nadal nie możesz stylizować samego pola wyboru, ale (w końcu) wymyśliłem, jak stylizować iluzję, zachowując jednocześnie funkcjonalność klikania pola wyboru. Oznacza to, że możesz go przełączać, nawet jeśli kursor nie jest idealnie nieruchomy, bez ryzyka wybrania tekstu lub uruchomienia przeciągania i upuszczania!
To rozwiązanie prawdopodobnie pasuje również do przycisków radiowych.
Poniższe działa w Internet Explorer 9, Firefox 30.0 i Chrome 40.0.2214.91 i jest tylko podstawowym przykładem. Nadal możesz go używać w połączeniu z obrazami tła i pseudoelementami.
http://jsfiddle.net/o0xo13yL/1/
źródło
Ponieważ przeglądarki takie jak Edge i Firefox nie obsługują: przed: po znacznikach wejściowych pola wyboru, oto alternatywa wyłącznie z HTML i CSS. Oczywiście powinieneś edytować CSS zgodnie ze swoimi wymaganiami.
Utwórz kod HTML dla pola wyboru w następujący sposób:
Zastosuj ten styl do pola wyboru, aby zmienić etykietę koloru
źródło
Wygląda na to, że możesz zmienić kolor pola wyboru w skali szarości, używając tylko CSS.
Poniższe konwertuje pola wyboru z czarnego na szary (co było tym, czego chciałem):
źródło
Implementacja SCSS / SASS
Bardziej nowoczesne podejście
Dla osób używających SCSS (lub łatwo przekonwertowanych na SASS) pomocne będą następujące informacje. Skutecznie utwórz element obok pola wyboru, który będzie stylem. Po kliknięciu pola wyboru CSS ponownie styluje element siostrzany (do nowego, zaznaczonego stylu). Kod jest poniżej:
źródło
Ostrzeżenie : w chwili pisania tego tekstu było prawdą, ale w międzyczasie wszystko się posunęło.
Nowoczesne przeglądarki AFAIK wyświetlają pola wyboru przy użyciu natywnego elementu sterującego systemu operacyjnego, więc nie można ich stylizować.
źródło