Hogyan készítsünk stílusos jelölőnégyzeteket és választógombokat CSS3-mal

Mindannyian ismerjük a HTML jelölőnégyzeteket és választógombokat. A leginkább frusztráló dolog az, hogy nincs mód a kinézetük megváltoztatására. Az operációs rendszertől és a böngészőtől függően eltérő módon néznek ki, és a CSS használatával sem tudjuk őket megváltoztatni.

Ez bosszantó lehet a legtöbb tervező számára, akik szeretnék ezeket az elemeket széppé tenni, hogy ne rontsák el a dizájnt. Ebben a bemutatóban megmutatom neked, hogyan lehet őket vonzóvá tenni egy egyszerű trükkel. Lássunk hozzá!

Légy erős. Rejtsd el jelölőnégyzeteidet!

Ez ellentmondásosnak tűnhet, de ahhoz, hogy a jelölőnégyzetek és a választógombok jól nézzenek ki, el kell azokat rejteni és elfelejteni! Ehhez egy egyszerű szabályt alkalmazunk:

.section input[type="radio"], .section input[type="checkbox"]{ display: none; }

De, Matthew, mondhatnád. Mégis mihez fogunk kezdeni nélkülük? Nyugi, nem kell aggódnod.
Megépítjük a saját jelölőnégyzeteinket. Lássunk is hozzá.

Választógombok

Először is, itt a mark-up:

<section id="first" class="section"> 
    <div class="container"> 
     <input type="radio" name="group1" id="radio-1"> 
     <label for="radio-1"><span class="radio">Coffee</span></label> 
    </div> 
    <div class="container"> 
      <input type="radio" name="group1" id="radio-2"> 
      <label for="radio-2"><span class="radio">Tea</span></label> 
    </div> 
    <div class="container"> 
      <input type="radio" name="group1" id="radio-3"> 
      <label for="radio-3"><span class="radio">Cappuccino</span></label> 
    </div> </section>

Van egy részünk, ahol három választógombot fogunk magába foglalni. A bemutatóban további jelölőnégyzeteket mutatunk, az elv ugyanaz. Minden bevitelt egy konténerosztályba tartozó div-ba csomagolják. Mindegyik bemenetnek van egy címkéje is, amelyben van egy span.

Fontos!

Mivel a választógombokat ::előtte és ::utána pszeudo elemekkel kívánjuk elkészíteni, anyaelemre van szükségünk, amely alapján elhelyezhető. Ebben az esetben ez lesz a mi címkénk:

.container label {
  position: relative;
}    

Itt van egy sor stílus, amely meg van osztva a jelölőnégyzetek és a választógombok között. 

.container span::before,
.container span::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  margin: auto;
}

A felső és az alsó tulajdonságok nullára állítva, és a margóval kombinálva: auto; lehetővé teszik, hogy elemeinknek középpontba állított vízszintes helyzetük legyen.

Így néz ki a többi stílus:

.container span.radio:hover {
  cursor: pointer;
}
.container span.radio::before {
  left: -52px;
  width: 45px;
  height: 25px;
  background-color: #A8AAC1;
  border-radius: 50px;
}
.container span.radio::after {
  left: -49px;
  width: 17px;
  height: 17px;
  border-radius: 10px;
  background-color: #6C788A;
  transition: left .25s, background-color .25s;
}
input[type="radio"]:checked + label span.radio::after {
  left: -27px;
  background-color: #EBFF43;
}

A legfontosabb rész az utolsó szabálycsomag, amely lényegében kiteszi az egész trükköt. Az ellenőrzött pszeudo osztály lehetővé teszi az elemek módosítását, amikor a bevitelt ellenőrzik. A "+" szelektor segítségével kiválaszthatjuk a következő testvérelemet, és megcélozhatjuk span.radio-nkat, ahol új szabályokat alkalmazunk az :: after pseudo elemre. Ebben az esetben vízszintes helyzetét és színét változtatjuk.

Annak érdekében, hogy a kapcsoló sima legyen,  0,25 másodperces átmenetet rendelünk hozzá a bal oldali tulajdonsághoz és a háttérszínhez. Most, amikor rákattintunk a választógombra, a kapcsoló simán mozog ahelyett, hogy gyorsan ugorna.

Jelölőnégyzetek

Ha szeretnél létrehozni néhány jelölőnégyzetet, a módszer ugyanaz. Tekintsd meg a stílusokat:

.container span.checkbox::before {
  width: 27px;
  height: 27px;
  background-color: #fff;
  left: -35px;
  box-sizing: border-box;
  border: 3px solid transparent;
  transition: border-color .2s;
}
.container span.checkbox:hover::before {
  border: 3px solid #F0FF76;
}
.container span.checkbox::after {
  content: '\f00c';
  font-family: 'FontAwesome';
  left: -31px;
  top: 2px;
  color: transparent;
  transition: color .2s;
}
input[type="checkbox"]:checked + label span.checkbox::after {
  color: #62AFFF;
}


Az egyetlen különbség az, hogy a FontAwesome családból  használunk ikont, mint :: after pseudo elem. Alapértelmezés szerint átlátszó, de amikor bejelöli a jelölőnégyzetet, az ikon kékre vált.

Azonban

Ha a pszeudo elemedben FontAwesome ikont szeretnél használni, be kell vinned a kódját a tartalom tulajdonságba, és meg kell adnod a font-family tulajdonságot FontAwesome-ként. Például:

{
content: '\f00c';
font-family: 'FontAwesome';
}

Az f00c kódot egy backslash előzi meg, amely az unicode karakter elkerüléséhez szükséges. Az unicode megtalálható a kiválasztott ikon oldalán:

Eredmény

Ez az. Most létrehoztunk egy teljesen funkcionális és gyönyörű jelölőnégyzetet és választógombokat, amelyeket beilleszthetsz és használhatsz saját projektjeidhez. A teljes forráskód megtekinthető a CodePen demóban:

See the Pen Radio buttons and check boxes 2 by Matthew Cain (@matthewcain) on CodePen.

Ha hasznosnak találtad ezt az oktatóanyagot, vagy bármilyen kérdésed van, oszd meg velünk gondolataidat alul a megjegyzésekben. Köszi!

A bejegyzés angol verzióját itt találod: How To Make Stylish Checkboxes And Radio Buttons With CSS3



Ingrid Almási

Csodálatos dolognak tartom az írást, mellyel új világokat, különleges embereket teremthetünk. Akikért az olvasó izgulhat, szeretheti vagy gyűlölheti őket. Vagyis annak a fantáziáját szereti, aki megalkotta a művet. Ha csak egy írásom elgondolkodtat, elszomorít vagy megnevettet valakit, már megérte tollat ragadnom.