Vorrei suggerire la mia soluzione che puoi trovare in questo repository GitHub .
Questo funziona anche per IE8 e IE9 con una freccia personalizzata che proviene da un carattere icona.
Esempi di menu a discesa Cross Browser personalizzato in azione: selezionali con tutti i browser per visualizzare la funzionalità cross-browser.
Comunque, iniziamo con i browser moderni e poi vedremo la soluzione per quelli più vecchi.
Freccia a discesa per Chrome, Firefox, Opera, Internet Explorer 10+
Per questi browser, è facile impostare la stessa immagine di sfondo per il menu a discesa per avere la stessa freccia.
Per fare ciò, è necessario ripristinare lo stile predefinito del browser per il select
tag e impostare nuove regole di sfondo (come suggerito prima).
select {
/* you should keep these firsts rules in place to maintain cross-browser behaviour */
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
background-image: url('<custom_arrow_image_url_here>');
background-position: 98% center;
background-repeat: no-repeat;
outline: none;
...
}
Le appearance
regole sono impostate su none per ripristinare quelle predefinite del browser, se si desidera avere lo stesso aspetto per ogni freccia, è necessario mantenerle in posizione.
Le background
regole negli esempi sono impostate con immagini in linea SVG che rappresentano frecce diverse. Sono posizionati al 98% da sinistra per mantenere un margine sul bordo destro (puoi facilmente modificare la posizione come desideri).
Al fine di mantenere il corretto comportamento tra browser, l'unica altra regola che deve essere lasciata in atto è la outline
. Questa regola ripristina il bordo predefinito che appare (in alcuni browser) quando si fa clic sull'elemento. Tutte le altre regole possono essere facilmente modificate se necessario.
Freccia a discesa per Internet Explorer 8 (IE8) e Internet Explorer 9 (IE9) utilizzando Icon Font
Questa è la parte più difficile ... O forse no.
Non esiste una regola standard per nascondere le frecce predefinite per questi browser (come select::-ms-expand
per IE10 +). La soluzione è nascondere la parte del menu a discesa che contiene la freccia predefinita e inserire un carattere icona a forma di freccia (o un SVG, se si preferisce) simile all'SVG utilizzato negli altri browser (vedere ilselect
regola CSS per ulteriori informazioni dettagli sull'SVG in linea utilizzato).
Il primo passo è impostare una classe in grado di riconoscere il browser: questo è il motivo per cui ho usato gli IF IE condizionali all'inizio del codice. Questi IF vengono utilizzati per collegare classi specifiche al html
tag per riconoscere il browser IE precedente.
Dopodiché, ogni select
parte dell'HTML deve essere racchiusa in un div
(o qualunque tag che possa avvolgere un elemento). In questo wrapper basta aggiungere la classe che contiene il carattere icona.
<div class="selectTagWrapper prefix-icon-arrow-down-fill">
...
</div>
In parole semplici, questo wrapper viene utilizzato per simulare il select
tag.
Per agire come un menu a discesa, il wrapper deve avere un bordo, perché nascondiamo quello che proviene da select
.
Nota che non possiamo usare il select
bordo perché dobbiamo nascondere la freccia predefinita allungandola del 25% in più rispetto al wrapper. Di conseguenza il suo bordo destro non dovrebbe essere visibile perché nascondiamo questo 25% in più dalla overflow: hidden
regola applicata alselect
se stesso.
Il carattere icona-freccia personalizzato viene inserito nella pseudo classe in :before
cui la regola content
contiene il riferimento per la freccia (in questo caso è una parentesi corretta).
Mettiamo anche questa freccia in una posizione assoluta per centrarla il più possibile (se usi diversi caratteri icona, ricordati di regolarli opportunamente cambiando i valori superiore e sinistro e la dimensione del carattere).
.ie8 .prefix-icon-arrow-down-fill:before,
.ie9 .prefix-icon-arrow-down-fill:before {
content: ")";
position: absolute;
top: 43%;
left: 93%;
font-size: 6px;
...
}
Puoi facilmente creare e sostituire la freccia di sfondo o la freccia del carattere dell'icona, con ognuna delle quali desideri semplicemente modificandola nella background-image
regola o creando un nuovo file del carattere dell'icona da solo.