Conosciamo tutti i checkbox HTML ed i radio button (detti anche pulsanti di opzione o pulsanti radio). La cosa più frustrante è che non c'è modo di cambiare il loro aspetto. Hanno un aspetto diverso, a seconda del sistema operativo e del browser utilizzati, e non possiamo progettarli con CSS.
Questo infastidisce la maggior parte dei designer che desiderano rendere questi elementi attraenti e non rovinare l'intero design. In questo tutorial ti mostreremo come renderli davvero carini con un semplice trucco.
Può sembrare contraddittorio, ma per rendere i nostri checkbox e i nostri pulsanti di opzione sembrano buoni, dobbiamo nasconderli e dimenticarli. Applichiamo semplicemente una semplice regola:
.section input[type="radio"],
.section input[type="checkbox"]{
display: none;
}
Ma, ti starai chiedendo, cosa faremo senza di loro? Non ti preoccupare, costruiremo delle caselle nuove. Allora, vediamo come si fa.
Pulsanti Radio
Prima di tutto, questo è il nostro markup:
<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>
Abbiamo una sezione in cui metteremo tre pulsanti radio. Ci concentreremo sui checkbox in seguito, poiché il loro principio è lo stesso. Ogni voce è racchiusa in un div con una classe container. Inoltre, ogni voce ha un'etichetta con uno span.
Importante!
Dato che abbiamo nascosto la casella di controllo es i pulsanti radio, l'unico modo per accedervi sarebbe utilizzare un tag. Per funzionare correttamente, il tag deve contenere l'attributo "for" con l'ID della voce corrispondente. Se l’ID di un input è "radio-1", allora l’attributo "for" dovrebbe anch’esso essere "radio-1".
Ti starai chiedendo perché abbiamo avvolto il testo all'interno di ogni etichetta in un span:
<div class="container">
<input type="radio" name="group1" id="radio-1">
<label for="radio-1"><span class="radio">Coffee</span></label>
</div>
Dal momento che stiamo per applicare lo stile ai pulsanti di opzione con pseudo-elementi "::before e "::after: : " abbiamo bisogno di un elemento principale sulla base del quale possono essere posizionati. In questo caso, sarà la nostra etichetta:
.container label {
position: relative;
}
Ecco un insieme di stili che è condiviso tra i checkbox e i pulsanti di opzione:
.container span::before,
.container span::after {
content: '';
position: absolute;
top: 0;
bottom: 0;
margin: auto;
}
Le proprietà superiori e inferiori impostate come zero e combinate con "margin: auto;" permettono ai nostri elementi di avere una posizione orizzontale centrata.
Ecco l’aspetto che ha il resto degli stili:
.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;
}
La parte più importante è l'ultima serie di regole che fondamentalmente fa tutto il trucco. La pseudo-classe ":checked" ci permette di apportare modifiche agli elementi quando la voce è selezionata. Con il selettore "+" possiamo scegliere il prossimo elemento per "span.radio", dove applichiamo nuove regole al pseudo elemento "::after". In questo caso cambiamo la sua posizione orizzontale e il colore.
Affinché la modifica sia fluida, assegniamo la transizione di 0,25 secondi alla proprietà sinistra e al colore di sfondo. Ora, quando clicchiamo sul pulsante radio, l'interruttore si muove senza problemi invece di saltare velocemente.
Se vuoi creare dei checkbox personalizzati, il metodo è lo stesso. Dai un’occhiata agli stili:
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;
}
L'unica differenza è che stiamo usando un'icona della famiglia di font FontAwesome come il nostro pseudo elemento "::after".
Di default è trasparente, ma quando la casella è selezionata, l'icona diventa blu.
A parte
Se vuoi usare un'icona FontAwesome nel tuo pseudo elemento, devi includere il suo codice nella proprietà content e specificare la proprietà di famiglia di font come “FontAwesome”. Per esempio:
{
content: '\f00c';
font-family: 'FontAwesome';
}
Il codice f00c è preceduto da una barra diagonale che è necessaria per evitare il carattere Unicode. L'Unicode può essere trovato nella pagina dell'icona scelta: