Creiamo eleganti elenchi a discesa. Selezione da un elenco a discesa nell'elenco a discesa HTML sul css al passaggio del mouse
Oggi voglio presentarvi una piccola “ricetta” per creare una lista in CSS. Niente JQuery, niente CSS3: solo il buon vecchio CSS cross-browser. L'esempio è abbastanza semplice, quindi i compagni esperti potrebbero non essere interessati. Implementeremo un elenco a discesa con pulsanti social.
Quindi non parliamone a lungo, andiamo dritti al punto
HTML
Condividi questo post
- Google Plus
- In contatto con
- RSS
Ometto deliberatamente punti generali, come l'inclusione degli stili, in modo che il codice non cresca. In fondo alla pagina fornirò un collegamento alle fonti: c'è tutto.
Ciò che abbiamo in HTML è un elenco regolare e un'intestazione insolita. La sua particolarità è che è realizzato con un collegamento ipertestuale, che permette di seguire l'evento : passa il mouse, cioè guida. L'elenco a discesa funzionerà quando passi il mouse sopra il titolo.
CSS
Innanzitutto, diamo un'occhiata agli stili di base di un elenco a discesa. Ho provato a commentare ogni riga di codice per renderlo più chiaro:
/*Reimposta il riempimento*/ .droplink ul,.droplink h3,.droplink h3 a( riempimento:0;margine:0 ) /*Wrapper di base*/ .droplink ( larghezza:200px; posizione:assoluta; margine:10px 0 0 25px ) /*Stile blocco al passaggio del mouse*/ .droplink:hover( altezza:auto; background-color:#3E403D; bordo: solido 1px #3A3C39 ) /*Titolo in stato normale*/ .droplink h3 a( text-align:center ; larghezza:100%; display:blocco; imbottitura:12px 0px; colore:#999; decorazione testo:none ) .droplink h3 a img(border:none) /*Stile per il titolo al passaggio del mouse*/ .droplink:hover h3 a ( colore:#FFF; peso carattere: grassetto; posizione: assoluta )
Non c'è niente di speciale qui; abbiamo indicato la dimensione e lo stile del blocco, lo stile dell'intestazione e, per entrambi gli elementi, i loro stili quando si passa il cursore. Andare avanti:
/*Nascondi l'elenco senza passare il mouse*/ .droplink ul( list-style:none; display:none ) /*Visualizza l'elenco al passaggio del mouse*/ .droplink:hover ul( display:block; margin-top:40px ) .droplink li(visualizzazione:blocco)
Questo codice è più interessante e mostra come si comporta menu `A tendina quando si passa il cursore. In condizioni normali costa visualizzazione: nessuno, cioè non viene visualizzato. Quando passa il mouse, lo mostriamo come un blocco. Questo è l'intero segreto. Ora decoriamo un po’ gli elementi della lista e inseriamo le icone:
/*Stile elemento elenco*/ .droplink li a( imbottitura:5px 12px 4px 34px; margine:1px; colore sfondo:#484A47; display:blocco; colore:#FFF; decorazione testo:none; dimensione carattere:12px ; background-repeat:no-repeat; background-position: 10px 3px ) /*Stile elemento al passaggio del mouse*/ .droplink li a:hover( background-color:#999 ) /*Icone*/ .facebook a (immagine-di-sfondo: url("icons/facebook.png")) .twitter a (immagine di sfondo:url("icons/twitter.png")) .vk a (immagine di sfondo:url("icons/vk.png")) . rss a (immagine-di-sfondo:url("icons/rss.png")) .gplus a (immagine-di-sfondo:url("icons/gplus.png"))
Questo è tutto, in realtà. L'elenco a discesa è pronto e sembra piuttosto carino. Puoi progettare gli elementi a tua discrezione, aggiungere angoli arrotondati e altri fronzoli.
Se vuoi che l'elenco si “sovrappone” al testo sottostante quando passi il mouse, guarda di lato z-indice.
Se qualcosa non è chiaro o non funziona, chiedi nei commenti o usa il pulsante “Invia messaggio”, è lì —>
Menù a tendina orizzontale utilizzato per organizzare la struttura di navigazione del sito. Il numero ottimale di livelli di nidificazione è uno o due. Minori sono i livelli di allegati, più facile sarà per un visitatore del sito trovare le informazioni di cui ha bisogno. Come creare un menu orizzontale regolare è descritto in dettaglio in.
Come creare un menu a discesa orizzontale
1. Markup HTML e stili di base per un menu a discesa con un livello di nidificazione
Il markup HTML di un menu a discesa orizzontale differisce da un menu normale in quanto si collega alla voce di elenco desiderata
- O<оl> .
- Negli esempi di codice mancano i prefissi del browser per le proprietà CSS, ma puoi ovviamente trovarli nei file sorgente.
- Personalmente utilizzo il modello box, dove = + + . Per attivarlo è necessario il seguente pezzo di codice:
- > Sono nascosto! >
- > Anche io! >
- > Anche io. >
- Innanzitutto, rendiamo visibile il menu a discesa modificandone l'opacità su 1.
- Successivamente, cambiamo la direzione e il colore della piccola freccia.
- Successivamente cambieremo lo sfondo dietro la freccia usando una sfumatura.
- > tipo="casella di controllo" id="el-1" nome="el-1" valore="ciambella"> > >
- > tipo="casella di controllo" id="el-2" nome="el-2" valore="vicino"> > >
- > tipo="casella di controllo" id="el-3" nome="el-3" valore="T-rex"> > >
- > href="#" > classe="icona-utente"> > Profilo > >
- > href="#" > classe="icona-ingranaggio"> > Impostazioni > >
- > href="#" > classe="rimuovi icona"> > Esci > >
- Selezionato: progettato per evidenziare una voce dell'elenco. L'utente potrà selezionare più di un elemento se è impostato l'attributo multiplo (vedi sopra).
- Valore - valore. Questo attributo è obbligatorio. Il server web deve comprendere quali elementi dell'elenco ha selezionato l'utente.
- Etichetta. Questo attributo può essere utilizzato per abbreviare gli elementi dell'elenco troppo lunghi. Ad esempio, sullo schermo verrà visualizzato "Milano" invece di "Milano è il centro amministrativo della Lombardia" specificato nel tag opzione. Nord Italia”. Questo attributo viene utilizzato anche per raggruppare elementi in un elenco.
Per posizionare il sottomenu rispetto al menu principale vengono dichiarati i seguenti stili:
— per un elemento di lista in cui è annidato un elenco a discesa: li (posizione: relativa;) ;
— per il menu a discesa ul (posizione: assoluta;) , nonché i valori sinistro e superiore.
Per chiarezza e facilità di formattazione, aggiungiamo il menu principale della classe al menu principale e il sottomenu al menu a discesa.
Esistono diversi modi per nascondere un menu a discesa:
1) visualizzazione: nessuna;
2) visibilità: nascosta;
3) opacità: 0;
4) trasformazione: scalaY(0);
5) utilizzando la libreria jQuery.
Metodo 1. (visualizzazione: nessuno;)
Il menu a discesa viene nascosto utilizzando .submenu (display: none;) , al passaggio del mouse viene visualizzato utilizzando .topmenu li:hover .submenu (display: block;) .
Metodo 2. (visibilità: nascosta;)
Il menu viene nascosto utilizzando .submenu (visibility: hidden;) e mostrato utilizzando .topmenu li:hover .submenu (visibility: Visibility;) .
Metodo 3. (opacità: 0;)
Il menu viene nascosto utilizzando .submenu (opacità: 0;) e mostrato utilizzando .topmenu li:hover .submenu (opacità: 1;) . Per evitare che il menu venga visualizzato quando passi il mouse sull'area in cui si trova, aggiungi visibilità: nascosto; e, quando passi con il mouse, cambialo in visibilità: visibile; .
Metodo 4. (trasforma: scaleY(0);)
Il menu viene nascosto utilizzando .submenu (transform: scaleY(0);) e mostrato utilizzando .topmenu li:hover .submenu (transform: scaleY(1);) . Poiché la trasformazione predefinita dell'elemento avviene dal centro, è necessario aggiungere for .submenu (transform-origin: 0 0;) , ovvero dall'angolo in alto a sinistra.
Metodo 5: utilizzo di jQuery
$(".five li ul").hide(); // nasconde il menu a discesa $(".five li:has(".submenu")").hover(function())( $(".five li ul").stop().fadeToggle(300) ;) /* seleziona un elemento della lista che contiene un elemento con la classe .submenu e aggiungi una funzione hover che mostra e nasconde il menu a discesa */);2. Menu a discesa 3D
È possibile creare effetti interessanti utilizzando le trasformazioni CSS3, ad esempio facendo apparire un menu dalle profondità dello schermo.
* (dimensionamento del riquadro: border-box; ) corpo ( margine: 0; sfondo: gradiente radiale(#BFD6E2 1px, rgba(255,255,255,0) 2px); dimensione dello sfondo: 10px 10px; ) nav ul ( stile elenco : nessuno; margine: 0; riempimento: 0; ) nav a ( display: blocco; decorazione del testo: nessuna; contorno: nessuno; transizione: .4s easy-in-out; ) .topmenu ( backface-visibility: hidden; background : rgba(255,255,255,.8); ) .topmenu > li ( display: blocco in linea; posizione: relativa; ) .topmenu > li > a ( famiglia di caratteri: "Exo 2", sans-serif; altezza: 70px; altezza linea: 70px; riempimento: 0 30px; peso carattere: grassetto; colore: #003559; trasformazione testo: maiuscolo; ) .down:after ( contenuto: "\f107"; margine sinistro: 8px; famiglia di caratteri : FontAwesome; ) .topmenu li a:hover ( colore: #E6855F; ) .submenu ( sfondo: bianco; bordo: 2px solido #003559; posizione: assoluta; sinistra: 0; visibilità: nascosta; opacità: 0; z-index : 5; larghezza: 150px; trasformazione: prospettiva(600px) ruotaX(-90°); trasformazione-origine: 0% 0%; transizione: .6s easy-in-out; ) .topmenu > li:hover .submenu( visibilità: visibile; opacità: 1; trasformazione: prospettiva (600px) rotazioneX (0 gradi); ) .submenu li a ( colore: #7f7f7f; dimensione carattere: 13px; altezza linea: 36px; imbottitura: 0 25px; famiglia di caratteri: "Kurale", serif; )
3. Menù a tendina espandibile con logo
In questo esempio, la sezione superiore della pagina contiene il logo e la navigazione del sito. Il logo può essere un'immagine o un testo. Il menu a discesa si espande gradualmente da sotto la voce dell'elenco in alto utilizzando la funzione di trasformazione CSS3.
4. Menu a discesa in espansione
Un altro esempio di menu a discesa. L'effetto di ingrandimento quando viene visualizzato il menu viene realizzato riducendo la dimensione iniziale.submenu (transform: scale(.8);) , al passaggio del mouse la dimensione aumenta a.topmenu > li:hover .submenu (transform: scale(1);) .
* (dimensionamento del riquadro: border-box;) corpo (margine: 0; sfondo: url(https://html5book.ru/wp-content/uploads/2015/10/ background54.png)) nav (sfondo: bianco; ) nav ul ( stile elenco: nessuno; margine: 0; riempimento: 0; ) nav a ( decorazione del testo: nessuna; contorno: nessuno; display: blocco; transizione: .4s easy-in-out; ) .topmenu ( text-align: centro; riempimento: 10px 0; ) .topmenu > li ( display: blocco in linea; posizione: relativa; ) .topmenu > li:after ( contenuto: ""; posizione: assoluta; destra: 0; larghezza: 1px; altezza: 12px; sfondo: #d2d2d2; superiore: 16px; box-ombra: 4px -2px 0 #d2d2d2; trasformazione: ruota(30deg); ) .topmenu > li:last-child:after ( sfondo: none; box -shadow: none; ) .topmenu > li > a ( imbottitura: 12px 26px; colore: #767676; trasformazione testo: maiuscolo; peso carattere: grassetto; spaziatura lettere: 1px; famiglia di caratteri: "Exo 2", sans-serif; ) .topmenu li a:hover ( colore: #c0a97a; ) .submenu ( posizione: assoluta; sinistra: 50%; superiore: 100%; larghezza: 210px; margine sinistro: -105px; sfondo: #fafafa ; bordo: 1px solido #ededed; indice z: 5; visibilità: nascosta; opacità: 0; trasformazione: scala(.8); transizione: .4s easy-in-out; ) .submenu li a ( imbottitura: 10px 0; margine: 0 10px; bordo inferiore: 1px solido #efefef; dimensione carattere: 12px; colore: #484848; famiglia di caratteri: "Kurale", serif; ) .topmenu > li:hover .submenu ( visibilità: visibile; opacità: 1; trasformazione: scala(1); )
5. Menu a discesa a comparsa
Menu orizzontale con mini-animazione: quando passi con il mouse sui collegamenti del menu in alto, appare un piccolo cerchio, che accompagna anche la comparsa del menu a discesa.
@import url("https://fonts.googleapis.com/css?.jpg); posizione dello sfondo: centro al centro; ripetizione dello sfondo: nessuna ripetizione; dimensione dello sfondo: copertina; altezza: 100vh; posizione: relativa; ) corpo:prima ( contenuto: ""; posizione: assoluta; sinistra: 0; fondo: 0; altezza: 100%; larghezza: 100%; sfondo: gradiente lineare(45 gradi, rgba(0,0,0,0) , rgba(255,255,255,.8)); ) nav ( allineamento testo: centro; riempimento: 40px 0 0; ) nav ul ( stile elenco: none; margine: 0; riempimento: 0; ) nav a ( decorazione testo : nessuno; display: blocco; colore: #222; ) .topmenu > li ( display: blocco inline; posizione: relativa; ) .topmenu > li > a ( posizione: relativa; imbottitura: 10px 15px; font-family: " Kaushan Script", corsivo; dimensione carattere: 1,5 em; altezza riga: 1; spaziatura lettere: 3px; ) .topmenu > li > a:before ( contenuto: ""; posizione: assoluta; z-index: 5; sinistra: 50%; superiore: 100%; larghezza: 10px; altezza: 10px; sfondo: bianco; raggio bordo: 50%; trasformazione: traduzione (-50%, 20px); opacità: 0; transizione: .3s; ) .topmenu li:hover a:before ( trasforma: traduci(-50%, 0); opacità: 1; ) .submenu ( posizione: assoluta; z-index: 4; sinistra: 50%; superiore: 100%; larghezza: 150px; riempimento: 15px 0 15px; margine superiore: 5px; sfondo: bianco; raggio bordo: 5px; box-shadow: 0 0 30px rgba(0,0,0,.2); box-sizing: border-box; visibilità: nascosta; opacità: 0; trasformazione: Translate(-50%, 20px); transizione: .3s ; ) .topmenu > li:hover .submenu ( visibilità: visibile; opacità: 1; trasformazione: Translate(-50%, 0); ) .submenu a ( font-family: "Libre Baskerville", serif; font-size: 11px; spaziatura tra lettere: 1px; riempimento: 5px 10px; transizione: .3s lineare; ) .submenu a:hover (sfondo: #e8e8e8;)
In questo articolo ti mostreremo come creare bellissimi elenchi a discesa senza utilizzare immagini, utilizzando solo i CSS. Aggiungeremo anche del codice jQuery per farli funzionare.
Si prega di notare alcune cose prima di iniziare:
*,
* :Dopo
* :Prima (
dimensionamento del box: border-box;
}
Allora da dove cominciamo?
Prima domanda: cosa ci serve per creare un menu a tendina? In generale, utilizzeremo un DIV con un tag span annidato e un elenco non ordinato per il menu a discesa:
> Sono un po' l'etichetta! >
>
JavaScript
Abbiamo bisogno di un po' di JavaScript per far sì che il nostro elenco a discesa funzioni come previsto. Questo è lo snippet JS che utilizzeremo per tutti gli esempi:
//...
Obj.dd .on ("clic", funzione (evento) (
restituire falso;
}
)
;
//...
$(funzione() (
var gg = nuovo DropDown( $("#dd" ) ) ;
$(documento).click(funzione() (
//tutti i menu a discesa
$(".wrapper-dropdown-1" ) .removeClass ("attivo" );
}
)
;
} ) ;
Quindi cosa fa questo script? Innanzitutto, cambia classe .attivo quando fai clic sul wrapper. Ciò significa che se il wrapper non ha una classe .attivo, quindi viene aggiunta e, se questa classe è già assegnata, viene rimossa.
In secondo luogo, lo script crea un comportamento predefinito per il menu a discesa, chiudendolo se si fa clic in qualsiasi altro punto dello schermo.
Bene, ora abbiamo capito come funziona, penso sia giunto il momento di creare qualche esempio!
Esempio 1
Cominciamo con qualcosa di semplice: una semplice casella a discesa relativa al genere. Diamo prima un'occhiata al markup:
Markup HTML
Abbiamo bisogno di alcune cose: un wrapper (div con id#dd), un menu a discesa (nascosto) e una "etichetta" che verrà racchiusa in un tag span. Utilizziamo i collegamenti di ancoraggio perché penso che sia semanticamente corretto, ma potresti anche utilizzare un tag diverso.
>CSS
Passiamo ora al CSS. Iniziamo dall'involucro:
Menu a discesa wrapper (
/* dimensione e posizione */
posizione: relativa;
larghezza: 200px;
imbottitura: 10px;
margine: 0 automatico;
/* colore e sfondo */
sfondo: #9bc7de;
colore: #fff;
contorno: nessuno;
cursore: puntatore;
/* carattere */
peso carattere: grassetto;
}
Quindi abbiamo fatto alcune cose. Per prima cosa impostiamo la larghezza dell'elenco e un po' di riempimento. Successivamente, gli abbiamo dato un colore e uno sfondo. E infine, impostiamo le opzioni del carattere.
Terminiamo l'"etichetta" aggiungendo una piccola freccia a destra utilizzando uno pseudo-elemento.
Menu a discesa wrapper: dopo (
contenuto : "" ;
larghezza: 0;
altezza: 0;
posizione: assoluta;
destra: 16px;
superiore: 50%;
margine superiore: -6px;
larghezza del bordo: 6px 0 6px 6px;
stile bordo: solido;
colore bordo: trasparente #fff;
}
Penso che tutti sappiamo come creare un piccolo triangolo nei CSS usando un bordo. Ovviamente è un trucco, ma se funziona davvero bene, perché no? Non c'è niente di speciale lì: una piccola freccia bianca a destra.
Quindi abbiamo un bel pulsante, ma senza il contenuto a discesa non ha senso. Diamo un'occhiata alla nostra lista!
Wrapper-dropdown-1 .dropdown (
/* Dimensioni e posizione */
posizione: assoluta;
i primi 100%;
a sinistra: 0; /* Misurare */
destra: 0; /* Misurare */
/* Stili */
sfondo: #fff;
peso carattere: normale; /* Sovrascrive il peso del carattere precedente: grassetto; */
/* Nascondersi */
opacità: 0;
eventi puntatore: nessuno;
}
Daremo al menu a tendina una posizione assoluta e lo posizioneremo dietro il pulsante (in alto: 100%;). Diamogli la stessa larghezza del pulsante. E infine, nascondilo riducendo la sua opacità a 0.
Ora impostiamo gli stili per gli elementi della lista:
Wrapper-dropdown-1 .dropdown li a (
blocco di visualizzazione;
decorazione del testo: nessuna;
colore: #9e9e9e;
imbottitura: 10px 20px;
}
/* Stato al passaggio del mouse */
.wrapper-dropdown-1 .dropdown li:passa il mouse su (
sfondo: #f3f8f8;
}
Usando JavaScript cambieremo la classe .attivo quando facciamo clic sul pulsante, in base a questa classe possiamo modificare il nostro CSS per visualizzare il menu a discesa.
/* Stato attivo */
.wrapper-dropdown-1 .active .dropdown (
opacità: 1 ;
eventi-puntatore: auto;
}
Wrapper-dropdown-1 .active :dopo (
colore bordo: #9bc7de trasparente;
larghezza del bordo: 6px 6px 0 6px;
margine superiore: -3px;
}
Wrapper-dropdown-1.active(
sfondo: #9bc7de;
sfondo: gradiente lineare (a destra, #9bc7de 0% , #9bc7de 78% , #ffffff 78% , #ffffff 100% ) ;
}
Tre cose da notare:
JavaScript
Ultimo ma non meno importante, dobbiamo anche aggiungere un altro pezzo di JavaScript per fare in modo che il pulsante visualizzi il valore selezionato.
funzione DropDown(el) (
questo .dd = el;
this .placeholder = this .dd .children ("span");
questo .opts = questo .dd .find ("ul.dropdown > li");
questo .val = "" ;
questo .indice = - 1;
this.initEvents();
}
DropDown.prototipo = (
var oggetto = questo;
$(this).toggleClass("attivo");
restituire falso;
}
)
;
Obj.opts.on("clic", funzione() (
var opt = $(questo) ;
oggetto.val = opt.testo();
oggetto.indice = opt.indice();
obj.placeholder.text("Sesso: " + obj.val);
}
)
;
}
,
getValore:funzione()(
restituisci questo .val ;
}
,
getIndice: funzione () (
restituisce questo .index ;
}
}
Codice molto semplice: quando si fa clic su un elemento, otteniamo il suo valore e lo visualizziamo in un tag span.
Esempio 2
Nel secondo esempio creeremo un bellissimo menu per la registrazione sui vari social network.
Markup HTML
>Tag sono usati per visualizzare piccole icone da FontAwesome. Non spiegherò qui cos'è FontAwesome, perché se ne è già parlato più di una volta negli articoli precedenti. Assicurati solo che funzioni.
CSS
Cominciamo con l'involucro. È praticamente lo stesso del wrapper nell'esempio precedente. Nota il bordo sinistro di 5px.
Wrapper-elenco a discesa-2 (
/* Dimensioni e posizione */
posizione: relativa; /* Abilita il posizionamento assoluto per figli e pseudo elementi */
larghezza: 200px;
margine: 0 automatico;
imbottitura: 10px 15px;
/* Stili */
sfondo: #fff;
bordo sinistro: 5px grigio pieno;
cursore: puntatore;
contorno: nessuno;
}
Ora la piccola freccia. Esattamente come prima:
Wrapper-dropdown-2 :dopo (
contenuto : "" ;
larghezza: 0;
altezza: 0;
posizione: assoluta;
destra: 16px;
superiore: 50%;
margine superiore: -3px;
larghezza del bordo: 6px 6px 0 6px;
stile bordo: solido;
colore bordo: grigio trasparente;
}
E questo è un elenco a discesa. Ancora una volta, più o meno lo stesso dell'esempio precedente:
Wrapper-dropdown-2 .dropdown (
/* Dimensioni e posizione */
posizione: assoluta;
i primi 100%;
sinistra: -5px;
a destra: 0px;
/* Stili */
sfondo: bianco;
stile elenco: nessuno;
/* Nascondersi */
opacità: 0;
eventi puntatore: nessuno;
}
Tieni presente che utilizzeremo una transizione per far sì che il menu a discesa si dissolva (animato) invece di aprirsi semplicemente come nella prima demo.
Alcuni stili per collegamenti e icone:
Wrapper-dropdown-2 .dropdown li a (
blocco di visualizzazione;
decorazione del testo: nessuna;
colore: #333;
bordo sinistro: 5px solido;
imbottitura: 10px;
transizione: tutti gli 0,3 si attenuano;
}
Wrapper-dropdown-2 .dropdown li:nth- child(1 ) a (
colore-bordo-sinistra: #00ACED;
}
Wrapper-dropdown-2 .dropdown li:nth- child(2 ) a (
colore bordo sinistro: #4183C4;
}
Wrapper-dropdown-2 .dropdown li:nth- child(3 ) a (
colore-bordo-sinistra: #3B5998;
}
Wrapper-dropdown-2 .dropdown li i (
margine destro: 5px;
colore: eredita;
allineamento verticale: medio;
}
/* Stato al passaggio del mouse */
Wrapper-dropdown-2 .dropdown li:passa il mouse su (
colore: grigio;
}
E ora occupiamoci degli stili dell'elenco nello stato espanso. Cambia la direzione della freccia e l'elenco a discesa diventerà visibile.
Wrapper-dropdown-2 .active :dopo (
larghezza del bordo: 0 6px 6px 6px;
}
Wrapper-dropdown-2 .active .dropdown (
opacità: 1 ;
eventi-puntatore: auto;
}
JavaScript
funzione DropDown(el) (
questo .dd = el;
this.initEvents();
}
DropDown.prototipo = (
initEvents: funzione() (
var oggetto = questo;
Obj.dd .on ("clic", funzione (evento) (
$(this).toggleClass("attivo");
event.stopPropagation();
}
)
;
}
}
Esempio 3
Passiamo al terzo esempio, in questo caso la voce selezionata sostituirà il valore predefinito.
Markup HTML
>Non c'è molto più codice di prima. Passiamo ai CSS!
CSS
Wrapper-elenco a discesa-3 (
/* Dimensioni e posizione */
posizione: relativa;
larghezza: 200px;
margine:
0
auto;
imbottitura:
10px;
/* Stili */
sfondo:
#F F F;
raggio di confine :
7px;
confine:
1px solido RGBA (0
,
0
,
0
,
0.15
)
;
scatola-ombra :
0
1px 1px RGBA (50
,
50
,
50
,
0.1
)
;
cursore:
puntatore;
contorno:
nessuno;
/* Impostazioni dei caratteri */
peso del carattere:
grassetto;
colore:
#8AA8BD;
}
Qui utilizziamo bordi, ombre box e angoli arrotondati. Abbiamo anche bisogno di una piccola freccia:
.wrapper-dropdown-3:Dopo{
contenuto:
""
;
larghezza:
0
;
altezza:
0
;
posizione:
assoluto;
Giusto:
15px;
superiore:
50%
;
margine superiore:
-3px;
larghezza del bordo:
6px 6px 0
6px;
stile del bordo:
solido;
colore del bordo:
#8aa8bd trasparente;
}
Tutto qui è uguale a prima, quindi non descriveremo il codice in dettaglio.
.wrapper-dropdown-3 .cadere in picchiata {
/* Dimensioni e posizione */
posizione:
assoluto;
superiore:
140%
;
Sinistra:
0
;
Giusto:
0
;
/* Stili */
sfondo:
bianco;
raggio di confine :
ereditare;
confine:
1px solido RGBA (0
,
0
,
0
,
0.17
)
;
scatola-ombra :
0
0
5px RGBA (0
,
0
,
0
,
0.1
)
;
peso del carattere:
normale;
transizione :
tutti gli 0,5 si avviano facilmente ;
stile elenco:
nessuno;
/* Nascondersi */
opacità :
0
;
eventi-puntatore :
nessuno;
}
.wrapper-dropdown-3 .cadere in picchiata li a {
Schermo:
bloccare;
imbottitura:
10px;
decorazione del testo:
nessuno;
colore:
#8aa8bd;
bordo-fondo:
1px solido #e6e8ea;
scatola-ombra :
inserto 0
1px 0
RGBA (255
,
255
,
255
,
1
)
;
transizione :
tutti gli 0,3 si allentano ;
}
.wrapper-dropdown-3 .cadere in picchiata li io {
galleggiante:
Giusto;
colore:
ereditare;
}
.wrapper-dropdown-3 .cadere in picchiata li :primo di tipo UN {
raggio di confine :
7px 7px 0
0
;
}
.wrapper-dropdown-3 .cadere in picchiata li :ultimo del tipo UN {
raggio di confine :
0
0
7px 7px;
confine:
nessuno;
}
/* Stato al passaggio del mouse */
.wrapper-dropdown-3 .cadere in picchiata li : passa il mouse UN {
sfondo:
#f3f8f8;
}
Tutto sembra perfetto tranne la piccola freccia in alto a destra nel menu a discesa. Questa freccia è importante: senza di essa, il menu a discesa sembra fluttuante senza alcuna connessione con il pulsante.
.wrapper-dropdown-3 .cadere in picchiata:Dopo{
contenuto:
""
;
larghezza:
0
;
altezza:
0
;
posizione:
assoluto;
metter il fondo a:
100%
;
Giusto:
15px;
larghezza del bordo:
0
6px 6px 6px;
stile del bordo:
solido;
colore del bordo:
#F F F trasparente;
}
.wrapper-dropdown-3 .cadere in picchiata:Prima{
contenuto:
""
;
larghezza:
0
;
altezza:
0
;
posizione:
assoluto;
metter il fondo a:
100%
;
Giusto:
13px;
larghezza del bordo:
0
8px 8px 8px;
stile del bordo:
solido;
colore del bordo:
RGBA (0
,
0
,
0
,
0.1
)
trasparente;
}
Abbiamo utilizzato due pseudo elementi per questa freccia perché vogliamo creare un bordo attorno ad essa.
Ora stili per lo stato espanso. Tutto è lo stesso. Tuttavia, tieni presente che abbiamo impostato la transizione a .cadere in picchiata un po' più lungo del solito (0,5 invece di 0,3 s). In questo modo, l'apertura del menu sarà molto fluida.
.wrapper-dropdown-3.attivo .cadere in picchiata {
opacità :
1
;
eventi-puntatore :
auto;
}
JavaScript
Per completare questa demo, dobbiamo aggiungere del JavaScript per sostituire il valore predefinito del pulsante selezionato. Abbiamo visto come viene fatto nel primo esempio, ma poiché qui non lasciamo la parola "Trasporto", il JS è leggermente diverso.
funzione DropDown ( el )
{
Questo .dd =
el ;
Questo .segnaposto =
Questo .dd.bambini ("intervallo")
;
Questo .opta =
Questo .dd.Trovare ("ul.dropdown >li")
;
Questo .val =
""
;
Questo .indice =
-1
;
this.initEvents ()
;
}
Cadere in picchiata .prototipo =
{
initEvents :
funzione ()
{
var ogg =
Questo ;
Ogg .dd.SU ("clic",
funzione ( evento )
{
$( Questo )
.toggleClass ("attivo")
;
restituire falso ;
}
)
;
Ogg .opta.SU ("clic",
funzione ()
{
var opt =
$( Questo )
;
ogg .val =
optare. testo()
;
ogg .indice =
opt.index ()
;
ogg .segnaposto.testo(ogg.val)
;
}
)
;
}
,
getValore :
funzione ()
{
restituisce this.val ;
}
,
getIndex :
funzione ()
{
restituisce this.index ;
}
}
Esempio 4
Sembra diverso, vero? Qui creeremo un elenco di cose da fare che puoi spuntare e quindi cancellare. Nel complesso niente di speciale, ma questo esempio è significativamente diverso dalle demo precedenti.
Markup HTML
classe="cadere in picchiata">
>
Non ci saranno collegamenti o icone qui. Per ogni elemento abbiamo due tag: una casella di controllo con un'etichetta.
CSS
.wrapper-dropdown-4 {
/* Dimensioni e posizione */
posizione:
parente;
larghezza:
270px;
margine:
0
auto;
imbottitura:
10px 10px 10px 30px;
/* Stili */
sfondo:
#F F F;
confine:
1px solido argento;
cursore:
puntatore;
contorno:
nessuno;
}
Usiamo il riempimento sinistro per creare spazio sufficiente per le linee rosse. Ora, la piccola freccia a destra:
.wrapper-dropdown-4:Dopo{
contenuto:
""
;
larghezza:
0
;
altezza:
0
;
posizione:
assoluto;
Giusto:
10px;
superiore:
50%
;
margine superiore:
-3px;
larghezza del bordo:
6px 6px 0
6px;
stile del bordo:
solido;
colore del bordo:
#ffaa9f trasparente;
}
Gli stili per l'elenco a discesa sono gli stessi degli esempi precedenti:
.wrapper-dropdown-4 .cadere in picchiata {
/* Dimensioni e posizione */
posizione:
assoluto;
superiore:
100%
;
margine superiore:
1px;
/* bordo dell'involucro */
Sinistra:
-1px;
Giusto:
-1px;
/* Stili */
sfondo:
bianco;
confine:
1px solido argento;
bordo superiore:
nessuno;
stile elenco:
nessuno;
transizione :
tutti gli 0,3 si allentano ;
/* Nascondersi */
opacità :
0
;
eventi-puntatore :
nessuno;
}
Dobbiamo impostare il margin-top a 1px perché dobbiamo spostarlo leggermente verso il basso dal bordo del wrapper.
.wrapper-dropdown-4 .cadere in picchiata li {
posizione:
parente;
/* Abilita il posizionamento assoluto per le caselle di controllo */
}
.wrapper-dropdown-4 .cadere in picchiata etichetta li {
Schermo:
bloccare;
imbottitura:
10px 10px 10px 30px;
/* Stesso riempimento del pulsante */
bordo-fondo:
1px punteggiato #1ccfcf;
transizione :
tutti gli 0,3 si allentano ;
}
.wrapper-dropdown-4 .cadere in picchiata li :ultimo del tipo etichetta {
confine:
nessuno;
}
.wrapper-dropdown-4 .cadere in picchiata li input /* Caselle di controllo */ {
posizione:
assoluto;
Schermo:
bloccare;
Giusto:
10px;
superiore:
50%
;
margine superiore:
-8px;
}
/* Stato al passaggio del mouse */
.wrapper-dropdown-4 .cadere in picchiata li : passa il mouse etichetta {
sfondo:
#f0f0f0;
}
/* Stato controllato */
.wrapper-dropdown-4 .cadere in picchiata li input :
controllato ~ etichetta {
colore:
grigio ;
decorazione del testo:
linea passante;
}
Le caselle di controllo sono posizionate in modo assoluto e posizionate al centro a destra di ogni riga, ma poiché sono associate alle etichette, puoi fare clic in un punto qualsiasi dell'elemento per selezionarle.
Quando la casella di controllo è selezionata, il testo diventa grigio ed è barrato. Semplice ma efficace.
Abbiamo altre due sottili linee rosse a sinistra nel nostro piccolo taccuino. Ci sono due modi per farlo: uno con pseudo elementi e uno con gradienti. Diamo un'occhiata a entrambe le opzioni.
/* linee rosse con pseudo-elementi */
.wrapper-dropdown-4 .cadere in picchiata:Prima,
.wrapper-dropdown-4:Prima{
contenuto:
""
;
larghezza:
4px;
altezza:
100%
;
posizione:
assoluto;
superiore:
0
;
Sinistra:
15px;
confine:
1px solido #ffaa9f;
bordo superiore:
nessuno;
bordo-fondo:
nessuno;
z-indice:
2
;
}
/* O: */
/* linee rosse utilizzando un gradiente */
.wrapper-dropdown-4.cadere in picchiata ,
.wrapper-dropdown-4 {
sfondo:
gradiente lineare (Sinistra,
bianco 5%
,
#ffaa9f 5%
,
#ffaa9f 5.3%
,
bianco 5.3%
,
bianco 6.5%
,
#ffaa9f 6.5%
,
#ffaa9f 6.8%
,
bianco 6.8%
)
;
}
.wrapper-dropdown-4 .cadere in picchiata li : passa il mouse etichetta {
sfondo:
gradiente lineare (Sinistra,
#f0F0F0 5%
,
#ffaa9f 5%
,
#ffaa9f 5.3%
,
#f0F0F0 5.3%
,
#f0F0F0 6.5%
,
#ffaa9f 6.5%
,
#ffaa9f 6.8%
,
#f0F0F0 6.8%
)
;
}
Quindi quale di questi metodi è migliore? Probabilmente il primo, perché se vuoi cambiare l'effetto al passaggio del mouse sugli elementi dell'elenco, devi cambiare il gradiente, il che è piuttosto complicato. Inoltre, gli pseudo-elementi sono supportati meglio dai browser (a partire da IE8), a differenza dei gradienti (non supportati fino a IE10).
Ora stili per lo stato espanso. Non c'è niente di nuovo qui.
/* Stato attivo */
.wrapper-dropdown-4.attivo:Dopo{
larghezza del bordo:
0
6px 6px 6px;
}
.wrapper-dropdown-4.attivo .cadere in picchiata {
opacità :
1
;
eventi-puntatore :
auto;
}
JavaScript
funzione Cadere in picchiata ( el )
{
Questo.gg =
el ;
Questo.opta =
Questo.gg.Trovare("ul.dropdown >li")
;
Questo.val =
[
]
;
Questo.indice =
[
]
;
Questo.initEvents()
;
}
Cadere in picchiata. prototipo =
{
initEvents :
funzione()
{
var ogg =
Questo;
Ogg. gg.SU("clic",
funzione( evento )
{
$(Questo)
.toggleClass("attivo")
;
evento. stopPropagazione()
;
}
)
;
Ogg. opta.bambini("etichetta")
.SU("clic",
funzione( evento )
{
var optare =
$(Questo)
.genitore()
,
chbox =
optare. bambini("ingresso")
,
val =
chbox. val()
,
idx =
optare. indice()
;
($.inArray( val ,
ogg. val)
!==
-
1
)
?
ogg. val.giunzione( $.inArray( val ,
ogg. val)
,
1
)
:
ogg. val.spingere( val )
;
($.inArray( idx ,
ogg. indice)
!==
-
1
)
?
ogg. indice.giunzione( $.inArray( idx ,
ogg. indice)
,
1
)
:
ogg. indice.spingere( idx )
;
}
)
;
}
,
getValore :
funzione()
{
ritorno Questo.val;
}
,
getIndex :
funzione()
{
ritorno Questo.indice;
}
}
Esempio 5
Il nostro esempio finale sarà simile al menu a discesa in alcuni pannelli di amministrazione. Per fare ciò utilizzeremo l'animazione quando la cambieremo. Invece di apparire/scomparire, scorrerà su e giù.
Markup HTML
classe="cadere in picchiata">
>
CSS
.wrapper-dropdown-5 {
/* Dimensioni e posizione */
posizione:
parente;
larghezza:
200px;
margine:
0
auto;
imbottitura:
12px 15px;
/* Stili */
sfondo:
#F F F;
raggio di confine :
5px;
scatola-ombra :
0
1px 0
RGBA (0
,
0
,
0
,
0.2
)
;
cursore:
puntatore;
contorno:
nessuno;
transizione :
tutti gli 0,3 si allentano ;
}
.wrapper-dropdown-5:Dopo{
/* Freccia piccola */
contenuto:
""
;
larghezza:
0
;
altezza:
0
;
posizione:
assoluto;
superiore:
50%
;
Giusto:
15px;
margine superiore:
-3px;
larghezza del bordo:
6px 6px 0
6px;
stile del bordo:
solido;
colore del bordo:
#4cbeff trasparente;
}
Questi sono gli stili principali. Passiamo ora all'elenco a discesa, che è un po' diverso dal solito.
.wrapper-dropdown-5 .cadere in picchiata {
/* Dimensioni e posizione */
posizione:
assoluto;
superiore:
100%
;
Sinistra:
0
;
Giusto:
0
;
/* Stili */
sfondo:
#F F F;
raggio di confine :
0
0
5px 5px;
confine:
1px solido RGBA (0
,
0
,
0
,
0.2
)
;
bordo superiore:
nessuno;
bordo-fondo:
nessuno;
stile elenco:
nessuno;
transizione :
tutti gli 0,3 si allentano ;
/* Nascondersi */
altezza massima:
0
;
traboccare:
nascosto;
}
Questa volta non abbiamo cambiato l'opacità a 0 per nascondere il menu. Impostiamo max-height su 0 e overflow: hidden. Perché hai impostato l'altezza massima e non l'altezza? Perché non conosciamo l'altezza esatta dell'elenco espanso.
Stili semplici per gli elementi dell'elenco.
.wrapper-dropdown-5 .cadere in picchiata li {
imbottitura:
0
10px ;
}
.wrapper-dropdown-5 .cadere in picchiata li a {
Schermo:
bloccare;
decorazione del testo:
nessuno;
colore:
#333
;
imbottitura:
10px 0
;
transizione :
tutti gli 0,3 si allentano ;
bordo-fondo:
1px solido #e6e8ea;
}
.wrapper-dropdown-5 .cadere in picchiata li :ultimo del tipo UN {
confine:
nessuno;
}
.wrapper-dropdown-5 .cadere in picchiata li io {
margine destro:
5px;
colore:
ereditare;
allineamento verticale:
mezzo;
}
/* Stato al passaggio del mouse */
.wrapper-dropdown-5 .cadere in picchiata li : passa il mouse UN {
colore:
#57a9d9;
}
E ora, nello stato attivo:
/* Stato attivo */
.wrapper-dropdown-5.attivo {
raggio di confine :
5px 5px 0
0
;
sfondo:
#4cbeff;
scatola-ombra :
nessuno;
bordo-fondo:
nessuno;
colore:
bianco;
}
.wrapper-dropdown-5.attivo:Dopo{
colore del bordo:
#82d1ff trasparente;
}
.wrapper-dropdown-5.attivo .cadere in picchiata {
bordo-fondo:
1px solido RGBA (0
,
0
,
0
,
0.2
)
;
altezza massima:
400px;
}
Quando il menu a discesa è aperto, cambiamo gli angoli inferiori del pulsante, il suo colore, la direzione della freccia e il colore della freccia e rimuoviamo l'ombra e i bordi.
E per mostrare il menu, impostiamo l'altezza massima del menu a discesa su 400px. Potremmo impostarlo su 500px o 1000px, non importa.
JavaScript
funzione Cadere in picchiata ( el )
{
Questo.gg =
el ;
Questo.initEvents()
;
}
Cadere in picchiata. prototipo =
{
initEvents :
funzione()
{
var ogg =
Questo;
Ogg. gg.SU("clic",
funzione( evento )
{
$(Questo)
.toggleClass("attivo")
;
evento. stopPropagazione()
;
}
)
;
}
}
retrocompatibilità
Quindi ora abbiamo 5 menu a discesa che funzionano benissimo, ma per quanto riguarda i browser più vecchi?
Questi browser non comprendono, ad esempio, la proprietà dell'opacità.
La libreria Modernizr ci aiuterà in questo. Per dirla senza mezzi termini, per coloro che non lo sanno, Modernizr è una libreria JavaScript che espone le proprietà supportate da HTML5 e CSS3 al browser dell'utente.
Grazie a questo, possiamo "dire" al browser se non supporti *this* proprietà, quindi procedere come segue. Di seguito è riportato un esempio di come possiamo gestire lo stile per i browser che non supportano determinate proprietà CSS:
/* Nessun supporto CSS3 */
.no-opacità .wrapper-dropdown-1.cadere in picchiata ,
.no-pointerevents .wrapper-dropdown-1 .cadere in picchiata {
Schermo:
nessuno;
opacità :
1
;
/* Se supporta l'opacità ma non supporta gli eventi puntatore */
eventi-puntatore :
auto;
/* Se gli eventi del puntatore supportano ma non supportano gli eventi del puntatore */
}
.no-opacità .wrapper-dropdown-1.attivo.cadere in picchiata ,
.no-pointerevents .wrapper-dropdown-1.attivo .cadere in picchiata {
Schermo:
bloccare;
}
Se il browser non supporta l'opacità o gli eventi del puntatore, viene utilizzata la proprietà display: block;. E così via.
Conclusione.
Spero che questo articolo ti abbia aiutato a capire come creare menu a discesa personalizzati. Come puoi vedere, è abbastanza semplice.
Dimostrazione
In caso di domande, ti consigliamo di utilizzare il nostro forum per ricevere una risposta il più rapidamente possibile
È facile creare un semplice elenco a discesa in HTML utilizzando il tag select. Questo è un tag contenitore; i tag opzione sono nidificati al suo interno: sono quelli che definiscono gli elementi dell'elenco.
Esistono diverse opzioni per gli elenchi che possono essere creati utilizzando il tag di selezione: un elenco a discesa (le opzioni vengono visualizzate dopo aver fatto clic sul campo principale o passando il mouse sopra di esso) e un elenco a scelta multipla - in cui l'utente può selezionare diversi elementi. I primi sono più comuni e costituiscono un elemento significativo della navigazione dei siti moderni. Un elenco a discesa a selezione multipla può essere utilizzato, ad esempio, nei cataloghi in cui è necessario selezionare più caratteristiche di un prodotto.
Puoi modificare l'aspetto e le proprietà degli elenchi utilizzando attributi universali e speciali.
Seleziona gli attributi del tag
1. Multiplo: imposta la selezione multipla.
2. Dimensione: imposta il numero di linee visibili nell'elenco, ovvero l'altezza. E qui tutto dipende dalla presenza o meno dell'attributo multiplo. Se sì, e non si specifica la dimensione, se è presente multiplo, l'utente vedrà tutte le possibili opzioni di selezione, ma se multiplo è assente, verrà mostrata solo una riga e il visitatore sarà in grado di leggere il resto quando fa clic sull'icona dell'ascensore sul lato destro. Se la dimensione dell'altezza è specificata ed è inferiore al numero di opzioni, verrà visualizzata una barra di scorrimento sulla destra.
3. Nome: nome. L'elenco a discesa può farne a meno, ma potrebbe essere necessario interagire con il programma gestore sul server. Di norma, il nome è ancora indicato.
Il tag select non ha attributi obbligatori, a differenza del tag option.
Attributi dei tag di opzione nidificati
Per quanto riguarda la larghezza dell'elenco, per impostazione predefinita è impostata sulla lunghezza del testo più largo nell'elenco. Naturalmente, la larghezza può essere modificata utilizzando gli stili HTML.
Elenco a discesa in altri modi
Può essere fatto usando i CSS, ad esempio, un elenco apparirà quando passi il mouse sopra un elemento della pagina. Ottime opzioni per la creazione di elenchi sono fornite da JavaScript, semplificato dalla libreria Jquery. Un elenco a discesa collegato utilizzando questa libreria può essere molto complesso, ad esempio a cascata. Cioè, quando selezioni un elemento in un elenco, viene visualizzato il seguente elenco, ad esempio, c'è una voce di menu "Abbigliamento da donna" (quando ci passi sopra, quindi quando selezioni uno dei tipi, ad esempio "Capispalla ”, scompare un elenco con elementi: giacche, parka, cappotti, cappotti corti, pellicce, ecc.
Abbiamo elencato superficialmente le principali modalità con cui è possibile creare un elenco a discesa. Naturalmente, ci sono molte sfumature in JavaScript che ti consentono di modificare la funzionalità e l'aspetto degli elenchi.
Spesso i principianti si trovano ad affrontare il problema della progettazione di un elenco a discesa. Proprio come con l'originale Selezionare non puoi fare niente di speciale. Poi viene in soccorso jQuery, e poi puoi fare quasi tutto.
E se ti dicessi che è possibile anche quello standard? HTML Non è male progettare un elenco a discesa in modo pulito CSS?
Elenco a discesa in HTML
Il colore dello sfondo e del testo può essere modificato e ciò avviene in modo molto semplice.
IN arco abbiamo aggiunto 2 classi, una principale, che conterrà tutti gli stili principali” menu a discesa personalizzato“, e il secondo è grande, il che determinerà la dimensione menu `A tendina. Possiamo preparare diciamo 3 taglie in anticipo, grande, medio, piccolo, ambientato in stili dimensione del font. E non preoccuparti per il futuro. Puoi saltare questo, tutto dipende dal tuo design sul sito.
Corpo ( sfondo: #2a2a2b; colore: #fff; allineamento testo: centro; famiglia di caratteri: Arial, Helvetica; ) .big ( dimensione carattere: 1,2em; ) /* Menu a discesa personalizzato */ .custom-dropdown ( posizione : relativo; display: blocco in linea; allineamento verticale: centrale; margine: 10px; /* solo demo */ ) .selezione a discesa personalizzata (cursore: puntatore; colore di sfondo: #2980b9; colore: #fff; font- dimensione: eredita; riempimento: .5em; riempimento-destra: 2.5em; bordo: 0; margine: 0; raggio bordo: 3px; rientro testo: 0.01px; overflow testo: ""; -webkit-appearance: pulsante ; /* nascondi la freccia predefinita in Chrome OSX */ ) .custom-dropdown::before, .custom-dropdown::after ( contenuto: ""; posizione: assoluta; pointer-events: none; ) .custom-dropdown:: after ( /* Freccia menu a discesa personalizzata */ contenuto: "\25BC"; altezza: 1em; dimensione carattere: .625em; altezza riga: 1; destra: 1,2em; superiore: 50%; margine superiore: -.5em ; ) .custom-dropdown::before ( /* Copertura freccia menu a discesa personalizzata */ larghezza: 2em; destra: 0; superiore: 0; inferiore: 0; raggio bordo: 0 3px 3px 0; ) .custom-dropdown select ( colore: rgba(0,0,0,.3); ) .custom-dropdown select::after ( colore: rgba(0,0,0,.1); ) .custom-dropdown::prima ( background-color: rgba(0,0,0,.15); ) .custom-dropdown::after ( colore: rgba(0,0,0,.4); )
Se non vuoi preoccuparti di studiare gli stili, aggiungilo semplicemente al tuo sito e cambia il colore per adattarlo al design del tuo sito. Allora sei proprio in grande stile” .selezione menu a discesa personalizzato" è necessario modificare i valori colore di sfondo E colore