In questa serie su Web Form, abbiamo imparato come creare e definire lo stile dei controlli comuni dei moduli. Nell’ultima puntata abbiamo imparato a personalizzare lo standard
Questa puntata riguarderà la creazione e la personalizzazione di elenchi a selezione multipla e come disabilitare
Prima di andare avanti, tuttavia, potresti voler rinfrescare la tua memoria rivisitando i precedenti articoli di questa serie:
Creazione di un elenco a selezione multipla in CSS
Da un punto di vista HTML, tutto quello che devi fare per trasformare uno standard
<label for="multi-select">Multiple Select</label> <div class="select select-multiple"> <select id="multi-select" multiple> <option value="MIaM">Mouse In A Maze</option> <option value="PL">Private Life</option> <option value="SA">Suspended Animation</option> <option value="NQ">No Quarter</option> <option value="11:11">11:11 Ultimate Edition</option> <option value="UV">Ultraviolence</option> <option value="TC">The Core (with outro solo)</option> <option value="TK">Telekinetic Killer</option> <option value="ALL">All of the above</option> <option value="NONE">None of the above</option> </select> <span class="focus"></span> </div>
Ecco la nostra lista di canzoni senza alcuno stile:
Generale Seleziona stile in CSS
Tutti gli stili che abbiamo impiegato in precedenza per personalizzare lo standard
:root { --select-border: #393939; --select-focus: #101484; --select-arrow: var(--select-border); } select { // styles reset, including removing the default dropdown arrow appearance: none; -webkit-appearance: none; -moz-appearance: none; background-color: transparent; border: none; padding: 0 1em 0 0; margin: 0; width: 100%; font-family: inherit; font-size: inherit; cursor: inherit; line-height: inherit; // Stack above custom arrow z-index: 1; // Remove focus outline outline: none; } .select { display: grid; grid-template-areas: "select"; align-items: center; position: relative; select, &::after { grid-area: select; } min-width: 15ch; max-width: 30ch; border: 1px solid var(--select-border); border-radius: 0.25em; padding: 0.25em 0.5em; font-size: 1.25rem; cursor: pointer; line-height: 1.1; // Optional styles // remove for transparency background: linear-gradient(to bottom, #ffffff 0%, #e5e5e5 100%); // Custom arrow &::after { content: ""; justify-self: end; width: 0.8em; height: 0.5em; background-color: var(--select-arrow); clip-path: polygon(100% 0%, 0 0%, 50% 100%); } }
Possiamo vedere i loro effetti su una selezione multipla di seguito.
Nel complesso sembra abbastanza buono. L’unico problema è che le opzioni selezionate non si estendono fino alla barra di scorrimento verticale.
Quindi, risolviamo ora impostando il padding-right in una nuova regola che si rivolge specificamente a più selezioni:
select[multiple] { padding-right: 0; height: 7rem; }
L’altezza determina quanti elementi sono visibili nell’elenco in qualsiasi momento senza scorrere. Safari non mostrerà opzioni parziali, mentre Firefox, Chrome e Microsoft Edge lo fanno. Puoi vedere un’opzione parziale in Edge qui:
Impostazione del bordo della messa a fuoco
Dopo aver rimosso l’impostazione predefinita
select:focus + .focus { position: absolute; top: -1px; left: -1px; right: -1px; bottom: -1px; border: 2px solid var(--select-focus); border-radius: inherit; }
Ora, il tab per l’elenco di selezione multipla mostra questo:
C’è anche un bordo intorno alla prima opzione (non aggiunta da noi) in modo che l’utente possa navigare tra gli elementi usando il SU e FUORI USO tasti freccia.
Disabilitare le selezioni
Anche la gestione delle selezioni disabili deve ricadere sulle nostre spalle. Per fare ciò, aggiungeremo il seleziona-disabilitato classe al
<!-- Multi-select --> <div class="select select-disabled select-multiple"> <select id="multi-select-disabled" multiple disabled> <!-- options --> </select> </div> <!-- Standard Select --> <div class="select select-disabled"> <select id="standard-select-disabled" disabled> <!-- options --> </select> </div>
Usando il nostro .seleziona-disabilitato class, possiamo modificare l’aspetto del select per dargli quell’aspetto “grigio”:
.select-disabled { cursor: not-allowed; background-color: #eee; background-image: linear-gradient(to top, #ddd, #eee 33%); }
Quando si passa il cursore sulla selezione disabilitata, si trasforma in un cursore “non consentito”, che è un cerchio rosso con una linea che lo attraversa, un po’ come il logo di Ghost Busters.
Dietro le quinte, il Disabilitato attributo che abbiamo aggiunto a
Troverai la demo di questo tutorial su codepen.io.
Conclusione
In questa puntata della serie Costruisci un modulo Web con HTML, abbiamo seguito il processo di creazione e personalizzazione di un elenco a selezione multipla e abbiamo appreso come disabilitare gli elementi