Rimuovi contorno dalla casella di selezione in FF


97

È possibile rimuovere la linea tratteggiata che circonda un elemento selezionato in un elemento selezionato?

testo alternativo

Ho provato ad aggiungere la outlineproprietà in CSS ma non ha funzionato, almeno non in FF.

<style>
   select { outline:none; }
</style>

Aggiorna
Prima di procedere e rimuovere la struttura, leggi questo.
http://www.outlinenone.com/


tre mesi fa ho cercato la stessa cosa ma con un pulsante di opzione. In cinque o sei diverse soluzioni che ho trovato, niente ha funzionato. Quindi sospetto che tu non possa farlo. Spero di sbagliarmi
Arseni Mourzenko

Temo che sia anche questo il fatto, ma spero comunque di essere smentito: D
Martin

Ci sono davvero esseri umani che lavorano a Mozilla che pensano che quella stupida linea tratteggiata stia bene? Perché è anche qualcosa che dobbiamo rimuovere?
billynoah

Risposte:


74

Ho trovato una soluzione, ma è la madre di tutti gli hack, spero servirà come punto di partenza per altre soluzioni più robuste. Lo svantaggio (troppo grande secondo me) è che qualsiasi browser che non supporta text-shadowma supporta rgba(IE 9) non visualizzerà il testo a meno che non si utilizzi una libreria come Modernizr (non testata, solo una teoria).

Firefox utilizza il colore del testo per determinare il colore del bordo tratteggiato. Quindi dì se lo fai ...

select {
  color: rgba(0,0,0,0);
}

Firefox renderà trasparente il bordo tratteggiato. Ma ovviamente anche il tuo testo sarà trasparente! Quindi dobbiamo in qualche modo visualizzare il testo. text-shadowviene in soccorso:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Inseriamo un'ombra del testo senza offset e senza sfocatura, in modo che sostituisca il testo. Ovviamente il browser più vecchio non ne capisce nulla, quindi dobbiamo fornire un fallback per il colore:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Questo è quando IE9 entra in gioco: supporta rgbama non l'ombra del testo, quindi otterrai una casella di selezione apparentemente vuota. Ottieni la tua versione di Modernizr con text-shadowrilevamento e fai ...

.no-textshadow select {
  color: #000;
}

Godere.


Grazie amico, proverò presto :)
Martin

L'unica soluzione che funziona davvero (utilizzando FF 20). Congratulazioni!
Gilberto Torrezan

4
Questo dovrebbe occuparsi di ogni FF e solo di FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen

Effettuerà il css in Chrome e altri browser?
Dadhich Sourav

165

Bene, la risposta di Duopixel è semplicemente perfetta. Se andiamo oltre, possiamo renderlo a prova di proiettile.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Ecco fatto, valido solo per Firefox e il brutto contorno tratteggiato attorno all'opzione selezionata è sparito.


1
È interessante notare che questa soluzione non è abbastanza a prova di proiettile come risposta di Duopixel. Se usi un effetto di transizione con la tua casella di selezione (es. -Moz-transizione), la casella tratteggiata apparirà per la durata della transizione, quindi scomparirà. Quindi, ad esempio, se specifichi '-moz-Transition: all 0.5s Easy;', vedrai la casella combinata per mezzo secondo con questa soluzione, mentre non la vedresti affatto con la risposta di Duopixel. Puoi aggirare il problema impostando l'intero elemento di selezione in modo che abbia un attributo di colore trasparente, ma in questo caso non vedrai alcun testo quando la casella non è attiva.
Jon

1
Modifica: quanto sopra dovrebbe dire "... vedrai il riquadro tratteggiato per mezzo secondo con questa soluzione ...". Non posso più modificare il commento. Ad ogni modo, il 'color: rgba (0,0,0,0);' la proprietà è ciò che fissa la transizione e deve essere nell'elemento select; '-moz-focusring' non va bene. Inoltre, è interessante notare che per qualche motivo non ho alcun problema sia in IE9 che in Chrome con la soluzione di Duopixel, quindi quella roba di cui stava parlando con Modernizr era completamente inutile per me.
Jon

Ovviamente apparirà se specifichi una transizione. Usare allall'interno delle transizioni è come sparare con una mitragliatrice Gatling su una mosca.
Fleshgrinder

1
Questa o la soluzione di Duopixel non funziona in FF 33.0.3 su Mac Mavericks. Invece del contorno tratteggiato, c'è un contorno sfocato blu.
Timo Kähkönen

1
questo interrompe gli stili del browser sulle opzioni disabilitate - una volta che la selezione è focalizzata diventano neri invece del testo in grigio che dovrebbero essere.
billynoah

19

Ecco una collaborazione di soluzioni per risolvere i problemi di stile con le caselle di selezione di Firefox. Usa questo selettore CSS come parte del tuo solito ripristino CSS.

La classe rimuove il contorno come da domanda ma rimuove anche qualsiasi immagine di sfondo (poiché di solito uso una freccia a discesa personalizzata e la freccia a discesa del sistema Firefox non può attualmente essere rimossa). Se si utilizza l'immagine di sfondo per qualcosa di diverso dall'immagine a discesa, è sufficiente rimuovere la lineabackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}

È comunque possibile definire ancora il colore del testo dell'opzione utilizzando questo metodo?
user1063287

In realtà è possibile rimuovere le frecce di Firefox utilizzati in background SELECT, impostando la proprietà specifico del fornitore -moz-appearancea none.
Emanuele Del Grande

Altre risposte mancano del select::-moz-focus-innerselettore importante , il che le rende meno efficaci. Ecco perché questo ottiene il mio ⬆.
Dave Land,

select:-moz-focusringinsieme color: transparente text-shadow: 0 0 0 #000rimosso il fastidioso bordo del focus in Firefox v63
Jason Moore

Nota: url-prefix (). fxsitecompat.dev/en-CA/docs/2018/… Leggendo i collegamenti non trovo chiaro se lo elimineranno gradualmente o meno. Ma attenzione.
user3342816

9

Questo avrà come target tutte le versioni di Firefox

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Potresti voler rimuovere! Important, se prevedi di far apparire lo schema su altre pagine del tuo sito che utilizzano lo stesso foglio di stile.


1
Questa dovrebbe essere la risposta selezionata
brandonscript l'

9

In generale, è impossibile definire lo stile dei controlli con quel grado di accuratezza. Non sono a conoscenza di alcun browser che supporti una gamma ragionevole di proprietà in tutti i controlli. Questo è il motivo per cui esistono un miliardo di librerie JavaScript che "falsificano" i controlli dei moduli con immagini e altri elementi HTML ed emulano la loro funzionalità originale con il codice:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...


Grazie, immagino di dover "creare il mio" elenco di selezione per ottenere questo risultato. Peccato che i controlli del modulo non siano più uniformi tra i browser.
Martin,

1
@Martin: questo non è niente in confronto alla rigidità di un controllo di caricamento file, che non può essere applicato affatto nella maggior parte dei browser. ;)
Arseni Mourzenko

3

<select onchange="this.blur();">

Se lo usi, il bordo rimane finché non selezioni un elemento dall'elenco.


2
Sfortunatamente, questa soluzione non rispetta le linee guida di accessibilità e usabilità. Oltre alle interfacce TTS per utenti non vedenti, non consente la navigazione da tastiera. Gli elementi focalizzati dovrebbero apparire diversi dagli altri, il problema con la domanda attuale è che Firefox non ti consente di decidere come.
Emanuele Del Grande

1

Prova uno di questi:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Riferimento


6
Grazie per lo sforzo, ma sfortunatamente non ha funzionato. Forse funziona su un aelemento, ma non ha funzionato su un selectelemento.
Martin,

1

Ecco la soluzione

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
Testato. Non funziona Firefox riconosce questa proprietà ma sembra che non faccia nulla. 10px solid redHo provato a impostarlo e non riesco a trovare dove si presenta.
mpen

Questo in realtà ha funzionato per me quando tutte le altre risposte con votazione più alta no.
Tashows

0

Rimuovi contorno / bordo tratteggiato da Firefox Tutti i tag selezionabili.

Inserisci questa riga di codice nel tuo foglio di stile:

*:focus{outline:none !important;}   

0

Aggiungi lo stile del bordo: nessuno alla tua selezione in CSS.

select {
border-style: none; }

-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

lavorando al 100%


-4

Questo rimuoverà il focus selectdall'elemento e dal contorno :

$("select").click(function(){
    $(this).blur();
});

Anche se questo non è privo di difetti su altri browser. Ti consigliamo di controllare il browser che l'utente sta utilizzando:

if (FIREFOX) {
    //implement the code
}

Spiega cosa fa lo snippet di codice oltre a fornire lo snippet di codice.
sayan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.