Crearea unui Toggle Radio fără JavaScript în CSS3

Veți găsi adesea folosindu-vă comutați glisoarele ca o alternativă la modă la casetele de selectare. Astăzi vom crea unul folosind simplă CSS3 și HTML.


Pasul 1: Începeți cu marcarea

Creați un nou document HTML și adăugați un deschidere eticheta cu o clasă de toggle-bg. Aceasta va fi zona de fundal pentru comutare.

                    

Pasul 2: Semantica și funcționalitatea

Pentru a face schimbarea funcțională, vom folosi unele invizibile intrări radio. Acestea au doar câteva cerințe:

  • Ele trebuie să aibă valori diferite
  • Ei trebuie să aibă același nume

Voi folosi pe și de pe ca valorile mele, cu un nume de comutare, dar puteți schimba acest lucru în funcție de utilizarea dvs. De exemplu, poate veți fi între ele da și Nu.

Adaugă intrare la deschidere ați creat mai devreme. Codul dvs. ar trebui să arate astfel:

    

În funcție de propria utilizare, poate doriți să plasați toate acestea într-un formular.


Pasul 3: Comutatorul Toggle

Cercul mic care va fi comutatorul în sine este pur și simplu a deschidere pe care o vom schimba mai târziu. Dă-i deschidere o clasă de intrerupator și introduceți-l după intrări.

Acesta este ultimul dvs. marcaj HTML:

     

Pasul 4: Stilul fundalului

Pentru a păstra lucrurile simple, vom începe cu minimul necesar pentru ca acest lucru să funcționeze. Adăugați următoarele în documentul dvs. CSS (sau în documentul dvs. CSS) stil dacă utilizați CSS inline.)

 .comutare-bg background: # 222; / * Veți dori să vedeți zona întreruptă, dar puteți schimba culoarea * / display: block; / * ... Pentru a putea seta o înălțime și o lățime * / float: left; / * ... Pentru ca aceasta să nu ia întreaga lățime a paginii * / height: 7px; / * Puteți schimba acest lucru mai târziu, dacă doriți * / poziție: relativă; / * Necesar pentru a permite comutatorului să se deplaseze * / width: 26px; / * Acest lucru poate fi schimbat și mai târziu * /

Pasul 5: Intrările invizibile

Aceste intrări trebuie să fie absolut poziționate, apoi deplasate ușor pentru a se potrivi corect. Atunci le vom întoarce opacitate până la 0.

 .comuta-bg de intrare height: 28px; stânga: 0; marja: 0; / * Resetați margini și umplutură * / opacity: 0; / * Invizibil! * / umplutura: 0; poziția: absolută; top: -10px; / * Schimbare verticală * / lățime: 36px; z-index: 2; / * Vrem ca intrarea să fie peste span.switch, pe care o vom da un z-index de 1 * /

Pasul 6: Comutatorul Toggle

Comutatorul trebuie să fie pătrat, așa încât să îl putem rotunzi într-un cerc perfect folosind mai târziu a border-radius. Ea are nevoie de poziționarea relativă pentru a putea să se deplaseze și din moment ce trebuie să-i dăm înălţime și lăţime, va fi un bloc-element de nivel plutit la stânga.

 .comuta background: #ccc; afișare: bloc; plutește la stânga; înălțime: 14px; stânga: -1px; / * Acesta este punctul de plecare. Când adăugăm o rază de margine, este afișat un pic mic de fundal dacă folosim stânga: 0 ;, deci -1px este cel mai bun. * / Poziție: relativă; top: -4px; / * ... Pentru ao menține centrat vertical * / width: 14px; z-index: 1; / * Amintiți-vă, trebuie să fie sub intrările invizibile * /

Pasul 7: Hackery CSS!

CSS3 a adăugat noul combinator general de frate, un selector care folosește tilda (~) pentru a selecta elemente care partajează același părinte. Ordinea în care apar în CSS (înainte sau după tilde) reflectă ordinea în care apar în DOM.

De asemenea, avem acces la noua pseudo-clasă verificată. Acest lucru ne va permite să vizăm în mod specific (în prezent invizibil) intrare radio care este verificat ...

Mai întâi, vom folosi acești selectori pentru a reseta poziția de pornire a comutatorului de comutare.

 .comuta-bg de intrare: verificat ~ .switch left: -1px;  / * poziția inițială a comutatorului * /

Apoi vom spune browserului poziția finală de comutare.

 .comuta-bg intrare ~: verificat ~ .switch left: 13px;  / * poziția finală a comutatorului final * /

În cele din urmă, vom pune : verificat intrare în spatele necontrolat intrare și comutatorul astfel încât al doilea intrare poate fi făcută clic pe.

 .comuta-bg: verificat z-index: 0; 

Până acum ar trebui să arate astfel:


Pasul 8: Povestea atât de departe

Aici este CSS complet, unstled:

 .comutare-bg background: # 222; / * Veți dori să vedeți zona întreruptă, dar puteți schimba culoarea * / display: block; / * ... Pentru a putea seta o înălțime și o lățime * / float: left; / * ... Pentru ca aceasta să nu ia întreaga lățime a paginii * / height: 7px; / * Puteți schimba acest lucru mai târziu, dacă doriți * / poziție: relativă; / * Necesar pentru a permite comutatorului să se deplaseze * / width: 26px; / * Aceasta poate fi schimbată mai târziu, de asemenea * / .toggle-bg input height: 28px; stânga: 0; marja: 0; / * Resetați margini și umplutură * / opacity: 0; / * Invizibil! * / umplutura: 0; poziția: absolută; top: -10px; / * Schimbare verticală * / lățime: 36px; z-index: 2; / * Vrem ca intrarea să fie peste span.switch, pe care vom da un z-index de 1 * / .switch background: #ccc; afișare: bloc; plutește la stânga; înălțime: 14px; stânga: -1px; / * Acesta este punctul de plecare. Când adăugăm o rază de margine, este afișat un pic mic de fundal dacă folosim stânga: 0 ;, deci -1px este cel mai bun. * / Poziție: relativă; top: -4px; / * ... Pentru ao menține centrat vertical * / width: 14px; z-index: 1; / * Amintiți-vă, trebuie să fie sub intrările invizibile * / .toggle-bg input: checked ~ .switch left: -1px;  / * poziția inițială a comutatorului * / .toggle-bg intrare ~: check ~ .switch left: 13px;  / * ultimă poziție relativă a comutării * / .toggle-bg input: checked z-index: 0; 

Pasul 9: Radii de frontieră

Acum ai un glisor pătrat, așa că hai să rotungem colțurile astea! Vom adăuga o border-radius de 8px la deschidere cu o clasă de toggle-bg și la deschidere cu o clasă de intrerupator.

 raza de graniță: 8px;

Notă: ca și în cazul opacitate si tranziție vine în sus, nu folosesc niciun prefix de furnizor aici de dragul tutorialului, dar veți avea nevoie de ele pentru compatibilitate cu unele browsere mai vechi.


Pasul 10: Tranziții

tranziţii trebuie adăugat la deschidere cu o clasă de intrerupator. Nu ezitați să reglați setările. Stânga: este singura parte a următoarei tranziții care nu poate fi schimbată.

 tranziție: stânga ușoară;

Pasul 11: Background, Umbre, Gradienți ...

Acum, că toată funcționalitatea este acolo, totul poate fi personalizat după preferințele dvs. Puteți adăuga un gradient de umbră și de fundal la deschidere cu o clasă de toggle-bg sau la comutator. Deoarece este rotund, gradienții radiali vor avea tendința de a arăta mai bine pe întrerupător.

Iată setările mele, dar vă rugăm să le schimbați pentru a se potrivi stilului și proiectului dumneavoastră.

Dă-i corp un fundal alb și o margine astfel încât comutarea să nu fie corectă în colț:

 corp fundal: # f6f8f9; margine: 200px; 

Adăugați următoarele la stilurile pentru .toggle-bg:

 fundal: gradient liniar (până la fund, # f6f8f9 0%, # e5ebee 50%, # d7dee3 51%, # f5f7f9 100%); box-shadow: 0 1px 0 #fff, inset 0 0 2px # d7dee3, inset 0 1px 0 # d7dee3, inset 0 1px 5px # d7dee3;

Adăugați următoarele la stilurile pentru .intrerupator:

 fundal: gradient radial (elipsă la centru, #ffffff 0%, # fefefe 50%, # fdfdfd 51%, # ffffff 100%); box-shadow: 0 1px 1px # 65727b, 0 0 1px # b6bdc2;

Pasul 12: Comenzi iOS

Pentru comutarea unui stil iOS, în cazul în care comutatorul are aceeași dimensiune ca fundalul, schimbați următorul text în stil pentru .intrerupator:

 înălțime: 30px; top: 0; lățime: 30px;

Modificați poziția finală a comutatorului pentru a rămâne la 41 de pixeli:

 .comuta-bg intrare ~: verificat ~ .switch left: 41px; 

Modificați dimensiunile intrări și eliminați schimbarea verticală schimbând următoarele în stilurile pentru .comuta-bg de intrare:

 înălțime: 30px; top: 0; lățime: 70px;

Modificați-vă toate raza de graniță la 30px in loc de 8px.

Bacsis: păstrează border-radius valoare egală cu înălţime a elementului pe care îl modifică.

Și, în sfârșit, schimbați înălţime și lăţime de .toggle-bg pentru a se potrivi elementelor modificate:

 înălțime: 30px; lățime: 70px;

Concluzie

Felicitări! Puteți crea acum JavaScript fără comutări cu unele CSS3 cool noi. Veți dori, probabil, să schimbați gradientele de fundal și, din fericire, există un instrument online excelent pentru a ajuta la acest lucru; verificați editorul gradientului gratuit Colorzilla. Există, de asemenea, o aplicație Mac numită Gradient care funcționează similar.


Suport pentru browser

Deoarece această metodă se bazează pe câteva caracteristici CSS3 noi, browserele mai vechi nu sunt acceptate. Suport pentru browser pentru : verificat pseudo-clasa include următoarele:

  • Toate versiunile Chrome
  • Toate versiunile de Firefox
  • Internet Explorer 9+
  • Opera 9+
  • Safari 3+

Iar urmatoarele browsere au suport pentru combinatorul generic:

  • Toate versiunile Chrome
  • Toate versiunile de Firefox
  • Internet Explorer 7+
  • Opera 9+
  • Safari 3+

jsFiddle

Am creat trei jsFiddles pentru a putea experimenta pe cont propriu. Primul include CSS minimă, va trebui să aveți un cursor de comutare. Al doilea, mult mai strălucitor, include totul de la primul la care se adauga unele stiluri și tranziții suplimentare. Ultimul este cel pe care îl numesc un "stil de comutare iOS", deoarece, la fel ca pe comutatoarele pe iOS, înălțimea comutatorului este egală cu înălțimea fundalului de comutare.

  • Comutare minimă
  • Pandantiv stilizat
  • stilul iOS se schimbă

Deoarece acesta este tot CSS, există câteva variații pe care le puteți crea. Iată câteva pentru a începe:

  • Creați o comutare verticală, mai degrabă decât orizontală (poate pentru un egalizator?)
  • Utilizați o imagine cu un gradient unghiular ca fundal al comutatorului pentru un aspect metalic mai realist.
  • Adauga o eticheta în interiorul unui comutator mare.
  • Utilizați jQuery pentru a schimba fundalul .toggle-bg atunci când un copil intrare este bifat. Sau, chiar mai bine, dați seama dacă acest lucru este posibil folosind doar CSS.
  • Adauga o eticheta Pentru fiecare intrare în cadrul unui stil iOS comutați și afișați selectiv și ascundeți etichete folosind jQuery.

Notă: când creați un eticheta pentru comutatorul intrări radio, va trebui să utilizați JavaScript pentru a afișa și ascunde opțiunea inactivă de intrare a lui eticheta dacă doriți să utilizați eticheta ca o modalitate de a debifa intrare. În caz contrar, veți fi în stare numai Verifica (dar nu debifați) intrare apăsând butonul eticheta.

Sper că ați găsit acest tutorial util. Vă mulțumim pentru lectură!