In questa serie su Web Form, abbiamo imparato come creare e modellare vari controlli del modulo. L’ultima puntata ha spiegato come modellare etichette e pulsanti, nonché come modificare l’aspetto di un elemento in base alle interazioni dell’utente.
Nell’articolo di oggi, impareremo come modellare un paio di controlli notoriamente impegnativi: pulsanti di opzione e caselle di controllo.
Prima di andare avanti, tuttavia, potresti voler rinfrescare la memoria rivisitando gli articoli precedenti di questa serie:
Strategia generale
Il motivo per cui ho fatto riferimento ai pulsanti di opzione e alle caselle di controllo come “notoriamente impegnativi” nell’introduzione è che entrambi non sono per lo più influenzati dallo stile CSS. I soliti attributi che penseresti si applicherebbero ai pulsanti di opzione e alle caselle di controllo, come frontiera, colore, e colore di sfondo, fare niente! Detto questo, ci sono alcuni modi per aggirare queste limitazioni per personalizzare i pulsanti di opzione e le caselle di controllo in una varietà di modi accattivanti.
In questo momento, la strategia più comune per personalizzare i pulsanti di opzione e le caselle di controllo è:
- Nascondi l’elemento di input.
- Aggiungi un elemento span in più e applica il tuo stile personalizzato creando una classe.
Il resto di questo articolo esaminerà alcuni esempi.
Modificare lo stile dei pulsanti di opzione con CSS
Senza lo stile CSS, i pulsanti di opzione vengono visualizzati come un cerchio bianco con un punto nero o blu quando selezionati (a seconda del browser):
Questo è il markup HTML che ha creato il modulo sopra:
<h2>Styling Form Controls</h2>
<form id="register" name="register">
<fieldset>
<legend>Radio Buttons</legend>
<p>Please select your favorite Pizza Topping:</p>
<div class="divCSS">
<input type="radio" id="pepperoni" name="toppings" value="pepperoni">
<label for="pepperoni">Pepperoni</ label>
<input type="radio" id="mushrooms" name="toppings" value="mushrooms">
<label for="mushrooms">Mushrooms</ label>
<input type="radio" id="other" name="toppings" value="other">
<label for="other">Other</label>
</div>
</fieldset>
</form>
Nascondere l’elemento di input
La chiave per nascondere il pulsante di opzione standard è il aspetto esteriore proprietà CSS. Viene utilizzato per visualizzare un elemento utilizzando uno stile nativo della piattaforma, basato sul tema del sistema operativo. Il -aspetto-moz e -aspetto-webkit Le proprietà sono versioni non standard di questa proprietà, utilizzate rispettivamente dai browser Gecko (Firefox), basati su WebKit (es. Safari) e basati su Blink (es. Chrome, Opera) per ottenere lo stesso risultato. Impostazione del aspetto esteriore a ‘nessuno‘ rimuove l’aspetto di sfondo standard:
.divCSS > input[type="radio"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
/* ... */
}
Applicazione di stili personalizzati ai pulsanti di opzione
Fatto ciò, possiamo procedere allo stile dei pulsanti di opzione come vogliamo. Ecco gli stili per i pulsanti di opzione non selezionati:
.divCSS > input[type="radio"] {
/* remove standard background appearance... */
/* create custom radio button appearance */
display: inline-block;
width: 15px;
height: 15px;
padding: 3px;
background-clip: content-box;
border: 2px solid #060c3b;
border-radius: 50%;
margin-right: 0;
}
Tutto ciò che dobbiamo aggiungere per i pulsanti di opzione selezionati è il colore del punto interno:
.divCSS > input[type="radio"]:checked {
background-color: blue;
}
Stili vari per i pulsanti di opzione utilizzando i CSS
Scoprirai spesso che, quando personalizzi l’aspetto dei controlli del modulo, potresti voler personalizzare anche l’aspetto del testo dell’etichetta. Il seguente CSS imposta gli stili dei caratteri per il contenitore e aggiunge un margine a destra dell’etichetta per aiutare a distanziare i pulsanti di opzione:
.divCSS {
font-family: Arial, Helvetica, sans-serif;
color: #060c3b;
font-weight: 500;
}
.divCSS > label {
margin-right: 4px;
}
Ecco le nuovo e migliorato pulsanti di opzione prodotti da tutti gli stili di cui sopra:

Interazioni con i pulsanti di opzione
Una volta sostituiti i pulsanti di opzione standard con i tuoi, non c’è nulla che ti impedisca di attivare cambiamenti di stile in base alle azioni dell’utente come concentrarsi o passare con il mouse su un pulsante di opzione. Ecco alcuni CSS che aggiungono un’ombreggiatura interna al passaggio del mouse e uno schema a fuoco:
.divCSS > input[type="radio"]:hover {
box-shadow: 0 0 5px 0px blue inset;
}
.divCSS > input[type="radio"]:focus {
outline: 1px solid green;
}
Puoi vedere ciascuno degli stati di seguito:



Caselle di controllo dello stile nei CSS
Una notevole distinzione tra le caselle di controllo dello stile e i pulsanti di opzione è che, nel caso del primo, possiamo anche giocare con il simbolo del segno di spunta HTML (✓) per farlo sembrare giusto. Per impostazione predefinita, le caselle di controllo hanno un bordo grigio. Quando è selezionato, il colore dello sfondo cambia e all’interno della casella viene visualizzato un segno di spunta:

Duplichiamo il fieldset dei condimenti per pizza sopra in modo che l’utente possa ora selezionare più elementi:
<fieldset>
<legend>Checkboxes</legend>
<p>Please select your favorite Pizza Toppings:</p>
<div class="divCheckboxes">
<label class="checkbox">
<input type="checkbox" />
<span>Pepperoni</span>
</label>
<label class="checkbox">
<input type="checkbox" />
<span>Mushrooms</span>
</label>
<label class="checkbox">
<input type="checkbox" />
<span>Other</span>
</label>
</div>
</fieldset>
Applicazione di stili predefiniti alle caselle di controllo
Ancora una volta, possiamo usare il CSS aspetto esteriore proprietà per rimuovere tutto lo stile nativo prima di applicare i nostri stili:
.checkbox {
display: inline-flex;
cursor: pointer;
position: relative;
}
.checkbox > span {
color: #34495E;
padding: 0.25rem 0.25rem;
}
.checkbox > input {
height: 20px;
width: 20px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
border: 1px solid #34495E;
border-radius: 4px;
outline: none;
transition-duration: 0.3s;
transition-property: all;
background-color: teal;
cursor: pointer;
}
La maggior parte degli attributi di cui sopra probabilmente ti sembrano familiari ormai, ad eccezione dei due di transizione. Quando combinato con a proprietà di transizione di “Tutti“, durata della transizione animerà tutte le proprietà che possono eseguire la transizione tra questo selettore e quelle che lo sovrascrivono, come quelle che aggiungeremo per lo stato selezionato.
Alterare il controllato Stato
Lo stato di controllo viene ovviamente selezionato utilizzando il :controllato pseudo-classe. Ecco le regole che lo impiegano per indirizzare gli input controllati:
.checkbox > input:checked {
border: 1px solid #41B883;
background-color: #34495E;
}
.checkbox > input:checked + span::before {
content: '2713';
display: block;
text-align: center;
color: #41B883;
position: absolute;
left: 0.5rem;
top: 0.2rem;
}
.checkbox > input:active {
border: 2px solid #34495E;
}
Di queste regole, quella centrale è di particolare interesse; è quello che modella il segno di spunta. Il ‘2713‘ il contesto è il codice CSS per il simbolo del segno di spunta. Possiamo anche impostare il suo posizione, colore, e dimensione.
Ecco le caselle di controllo risultanti in azione:

Troverai la demo di questo tutorial su jsfiddle.net.
Conclusione sullo stile dei pulsanti di opzione CSS e delle caselle di controllo
In precedenza, l’unico modo per sovrascrivere l’aspetto predefinito dei pulsanti di opzione HTML e delle caselle di controllo era nasconderlo e utilizzare immagini SVG e codice JavaScript. Ora, grazie a The CSS aspetto esteriore proprietà e il simbolo del segno di spunta HTML, possiamo ottenere lo stesso risultato utilizzando puro CSS.
Nella prossima puntata, impareremo come definire lo stile delle selezioni HTML.