Rimuovi il bordo blu dal pulsante css in stile personalizzato in Chrome


811

Sto lavorando su una pagina Web e voglio <button>tag personalizzati. Quindi, con i CSS, ho detto: border: none. Ora funziona perfettamente in Safari, ma in Chrome, quando faccio clic su uno dei pulsanti, mette un fastidioso bordo blu attorno ad esso. Ho pensato button:active { outline: none }o button:focus { outline:none }avrebbe funzionato, ma nessuno dei due. Qualche idea?

Ecco come appare prima di essere cliccato (e come voglio che appaia ancora dopo essere stato cliccato):

E questo è il confine di cui sto parlando:

inserisci qui la descrizione dell'immagine

Ecco il mio CSS:

button.launch {
    background-color: #F9A300;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.launch:hover {
    cursor: pointer;
    background-color: #FABD44;
}

button.change {
    background-color: #F88F00;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.change:hover {
    cursor: pointer;
    background-color: #F89900;
}

button:active {
    outline: none;
    border: none;
}


Non sono sicuro del motivo per cui funziona nella tua demo .. Lo sta facendo qui: jsfiddle.net/NgL8H @davidpauljunior
eshellborn,

5
Ho aggiunto la regola di messa a fuoco in fondo che hai detto non ha funzionato, ma sembra: jsfiddle.net/NgL8H/1
davidpauljunior

21
Non dovresti rimuovere completamente il contorno - quelli con disabilità - e quelli come me che usano spesso la tastiera perché è veloce - ne hanno bisogno per navigare. Sarebbe molto meglio ridisegnare il contorno a qualcosa che ti piace.
Chris B,

3
Non impostare in outline: nonequesto modo se non si è pronti a sostituire la perdita di accessibilità. Vedere questo sito Web: outlinenone.com
Flimm,

Risposte:


1536

Fare questo non è raccomandato in quanto regredisce l' accessibilità del tuo sito; per maggiori informazioni, vedi questo post .

Detto questo, se insisti, questo CSS dovrebbe funzionare:

button:focus {outline:0;}

Dai un'occhiata o JSFiddle: http://jsfiddle.net/u4pXu/

O in questo frammento:

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.change {
background-color: #F88F00;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.change:hover {
cursor: pointer;
background-color: #F89900;
}

button:active {
outline: none;
border: none;
}

button:focus {outline:0;}
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>


49
Non dovrebbe davvero essere outline: none;o non importa?
henrywright,

2
@henrywright Bene, l'OP ci ha provato e non ha funzionato per lui.
Diosney,

58
Per favore, non farlo mai. La tua piccola lamentela è irrilevante per l'enorme problema dell'accessibilità che diventa
phazei,

20
Dovresti assolutamente ridisegnare questo invece di nasconderlo completamente. In questo caso, prova qualcosa di simile button:focus{ outline-color: #A75000 }... invece di nascondere l'indicatore, lo cambi in un arancione scuro che si adatta allo stile.
Cloudworks,

3
@SeanO'Brien ha concesso che la situazione data dall'OP potrebbe essere per un sito che ha 5 utenti, tutti di buon corpo. Ma probabilmente la maggioranza delle 1123 persone che hanno votato a favore ritiene che questo sia il modo giusto di fare le cose per la loro situazione, ma in realtà non è così discriminatorio.
alexrogers,

296

Aspettare! C'è una ragione per quella brutta sagoma!

Prima di rimuovere quel brutto contorno blu, potresti prendere in considerazione l' accessibilità . Per impostazione predefinita, quel contorno blu è posizionato su elementi focalizzabili. In questo modo gli utenti con problemi di accessibilità sono in grado di focalizzare quel pulsante eseguendo la tabulazione su di esso. Alcuni utenti non hanno le capacità motorie per usare un mouse e devono usare solo la tastiera (o qualche altro dispositivo di input) per l'interazione con il computer. Quando rimuovi il contorno blu, non c'è più un indicatore visivo su quale elemento è focalizzato. Se si desidera rimuovere il contorno blu, è necessario sostituirlo con un altro tipo di indicazione visiva che il pulsante è attivo.

Possibile soluzione: pulsanti scuri quando messi a fuoco

Per gli esempi seguenti, il contorno blu di Chrome è stato rimosso per la prima volta utilizzando button:focus { outline:0 !important; }

Ecco i pulsanti di base di Bootstrap che appaiono normalmente: Pulsanti Bootstrap in stato normale

Ecco i pulsanti quando ricevono lo stato attivo: Bottoni Bootstrap nello stato messo a fuoco

Ecco i pulsanti quando vengono premuti: inserisci qui la descrizione dell'immagine

Come puoi vedere, i pulsanti sono un po 'più scuri quando ricevono lo stato attivo. Personalmente, consiglierei di rendere i pulsanti di messa a fuoco ancora più scuri in modo che ci sia una differenza molto evidente tra lo stato di messa a fuoco e lo stato normale del pulsante.

Non è solo per utenti disabili

Rendere il tuo sito più accessibile è qualcosa che viene spesso trascurato ma può aiutare a creare un'esperienza più produttiva nel tuo sito web. Ci sono molti utenti normali che usano i comandi da tastiera per navigare attraverso i siti Web al fine di tenere le mani sulla tastiera.


40
Il problema è in Chrome che si verifica anche con un clic anziché con la semplice tabulazione (l'implementazione logica presente nella maggior parte dei browser). Quindi in realtà Google sta riducendo l'accessibilità poiché la maggior parte degli sviluppatori semplicemente lo spegne (in Chrome) Più tempo sprecato nella ricerca / risoluzione di problemi relativi a Google / Chrome (salvataggio password, supporto css e-mail, questo)
RunLoop

3
Hai ragione! Per tenere conto dell'accessibilità quando si rimuove la struttura, è necessario un po 'di JavaScript: paciellogroup.com/blog/2012/04/…
mems

non puoi nemmeno modellare / formattare un commento nel modo in cui puoi rispondere, comunque. difficile fornire feedback a questo livello di dettaglio esclusivamente tramite un commento.
A-Dubb,

@RunLoop Come si rimuove o modifica il bordo blu dopo il clic? Può essere fatto tramite CSS o è richiesto Javascript?
Nick,

le persone con questi problemi possono semplicemente usare vimium-ff
yukashima huksay,

60

Rimuovo semplicemente il contorno da tutti i tag nella pagina selezionando tutto e applicando il contorno: nessuno a tutto :)

*:focus {outline:none}

Come menzionato bagofcole, potrebbe essere necessario aggiungere anche! Important, quindi lo stile sarà simile a questo:

*:focus {outline:none !important}

6
Per favore non farlo. Gli utenti che navigano nella tua pagina con la tastiera non saranno in grado di vedere l'elemento attualmente focalizzato. Invece di nascondere il contorno, offuscare l'elemento se l'evento click ha origine da un mouse.
joepio,

Ci sono fondamentalmente alcuni altri focus styling ...
Arziel

46

Nel mio caso di questo problema ho dovuto specificare box-shadow: none

button:focus {
  outline:none;
  box-shadow: none;
}

4
Grazie per il tuo post! La proprietà "box-shadow" era il punto nel mio caso.
Nightking,

1
Questo è stato lo stesso problema per me. Non che sia rilevante, ma stavo usando Roots 'Sage Theme in Chrome su Ubuntu 17.10.
Spencer Hill,

1
Solo questo ha funzionato dopobox-shadow
sura2k il

1
Ho dovuto aggiungere! Importante per farlo funzionare, probabilmente bootstrap ha una definizione specifica per questo da qualche parte
webMan

1
questo ha funzionato per me amico! Grazie per aver pubblicato la soluzione. salute
theITvideos il

44

Non dimenticare la !importantdichiarazione, per un risultato migliore

button:focus {outline:0 !important;}

Una regola che ha la proprietà! Important sarà sempre applicata indipendentemente da dove appare quella regola nel documento CSS.


14
"per un risultato migliore"? Potresti spiegare cosa! Importante fa?
Popnoodles,

5
Ma puoi spiegare cosa fa? "Per la ragione che esiste" non spiega alle persone che non conoscono la sua ragione quale sia la sua ragione.
Popnoodles,

48
! important dovrebbe essere usato raramente e solo per assicurarsi che qualcosa non debba essere sovrascritto dalle regole successive. Dovresti scegliere come target i tuoi elementi con il selettore corretto quando sovrascrivi le regole precedenti.
Popnoodles,

24
L'uso di! Important è raramente giustificato. Dovresti sempre orientare i selettori CSS in un modo che abbia più senso e non usare! Importante solo perché ti dà un "risultato migliore".
Ronen Cypis,

5
Per favore, non farlo. Sebbene tecnicamente questo risponda alla domanda del PO, l'annullamento di ogni indicazione della posizione di messa a fuoco outline:0 !importantè una cattiva UX e una cattiva pratica di sviluppo. Se lo stai facendo, assicurati di fare qualcos'altro per indicare la posizione di messa a fuoco (come cambiare il colore di sfondo dell'elemento).
Cloudworks,

26

La rimozione outlineè terribile per l'accessibilità! Idealmente, l'anello di messa a fuoco viene visualizzato solo quando l'utente intende utilizzare la tastiera .

Usa : focus-visibile . Al momento è una proposta del W3C per lo styling del solo utilizzo della tastiera tramite CSS ed è supportata in Firefox ( caniuse ). Fino a quando gli altri principali browser non lo supportano, è possibile utilizzare questo robusto polyfill .

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

Ho anche scritto un post più dettagliato nel caso abbiate bisogno di maggiori informazioni.


1
Intendiamoci, per quanto ne so non ha bisogno di essere outlinecome tale, finché il: focus Stato è fatto chiaramente visibile attraverso altri mezzi, come border, background-color, box-shadowe così via
Már Örlygsson

2
Migliore risposta! Il tuo post merita una lettura (e ora sto guardando il resto del tuo blog 😅) Il pacchetto npm focus-visible è davvero dove è per ora.
FelDev,

1
Questa è sicuramente la soluzione migliore. Con poche righe di codice mi sono sbarazzato di quel fastidioso bordo blu al clic, mantenendolo sull'uso della tastiera. Grazie!
pesta

1
Questi dati sono corretti? Questo selettore sembra supportato in Chrome, non in Firefox. developer.mozilla.org/en-US/docs/Web/CSS/…
Kevin Suttle,

Sembra che in Firefox venga chiamato il selettore :-moz-focusring, ma contrariamente a quanto dicono i documenti, non distingue tra clic e focus sulla scheda. In Chrome, per ora è necessario abilitare flag specifici per farlo funzionare
phil294

12

Aggiungi questo nel tuo file CSS.

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}

3
grazie. ha funzionato ma MDN dice: questa funzionalità non è standard e non è su una traccia standard. Non utilizzarlo su siti di produzione rivolti al Web: non funzionerà per tutti gli utenti. Potrebbero esserci anche grandi incompatibilità tra le implementazioni e il comportamento potrebbe cambiare in futuro.
Behnam Mohammadi,

8

Usa questo:

:active {
    outline:none;
}

o questo se non funziona:

:active {
   outline:none !important;
}

Questo funziona per me (almeno FF e Chrome). Invece di scegliere come target lo :focusstato, :activescegli come target lo stato e ciò rimuoverà l'evidenziazione esteticamente invadente nel tuo browser quando un utente fa clic su un collegamento. Ma manterrà comunque gli stati di focus quando un utente con schede di disabilità o maiuscole attraverso una pagina. Entrambe le parti sono felici. :)


4
Perché modificare la mia risposta se sostituirai la mia versione ridotta con lo stesso codice ma esteso? Ciò non lo ha chiarito meglio per gli utenti. Ricevi crediti di risposta per questo o qualcosa del genere? LOL ...
chuk,

3
il punto dei siti StackExchange come questo è avere risposte che aiutino chiunque a leggerli per capire. A tale scopo, una risposta con codice ridotto e minimizzato non è utile quanto il codice formattato in modo leggibile. Migliorare le risposte rendendole più leggibili è un modo normale per migliorare il sito per tutti.
bignose,

7

per questo problema:

inserisci qui la descrizione dell'immagine

Usa questo:

   *{
         -webkit-tap-highlight-color: rgba(0,0,0,0);
         -webkit-tap-highlight-color: transparent; /* For some Androids */
    }

risultato:

inserisci qui la descrizione dell'immagine


7

Per chiunque usi Bootstrap e abbia questo problema, usano: active: focus così come solo: active e: focus quindi avrai bisogno di:

element:active:focus {
    outline: 0;
}

Spero che qualcuno abbia risparmiato un po 'di tempo a capirlo, mi ha sbattuto la testa per un po' chiedendomi perché una cosa così semplice non funzionasse.


6

La maggior parte delle soluzioni non funzionerà se si utilizza Bootstrap 4.1 e possibilmente altre versioni. Dopo molti colpi alla testa, ho scoperto che devi applicare la classe shadow-none :

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>

4

Questo è ciò che ha funzionato per me:

button:focus {
    box-shadow:none;
}

4

La correzione per Chrome e altri browser

button:focus { outline: none !important; box-shadow: none !important; }

3

prova questo codice per tutti gli elementi che hanno problemi di bordo blu

*{
outline: none;
}

o

*{
outline-style: none;
}

3

Un altro modo per risolvere il problema dell'accessibilità che non è stato ancora menzionato qui è attraverso un po 'di Javascript . I crediti vanno a questo penetrante blogpost di hackernoon: https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2

L'approccio qui è davvero semplice ma efficace: l' aggiunta di una classe quando le persone iniziano a utilizzare il tasto Tab per navigare nella pagina (e facoltativamente rimuoverla quando si passa nuovamente al mouse. Quindi è possibile utilizzare questa classe per visualizzare o meno un contorno di messa a fuoco .

function handleFirstTab(e) {
    if (e.keyCode === 9) { // the "I am a keyboard user" key
        document.body.classList.add('user-is-tabbing');
        window.removeEventListener('keydown', handleFirstTab);
    }
}

window.addEventListener('keydown', handleFirstTab);

3

Ho affrontato lo stesso problema, quindi ho usato CSS semplici

.custom-button {
    outline: none
}

2

Se si desidera eliminare lo stesso effetto in input, è possibile aggiungere il seguente codice e il pulsante.

input:focus {outline:0;}

2

Fino a quando tutti i browser moderni non inizieranno a supportare css-selector : focus-visible ,
il modo più semplice e possibilmente migliore per salvare l'accessibilità è rimuovere questo focus complicato solo per gli utenti del mouse e salvarlo per gli utenti della tastiera :

1.Utilizza questo piccolo polyfill (circa 10kb): https://github.com/WICG/focus-visible
2. Aggiungi il prossimo codice da qualche parte nel tuo CSS:

.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

Supporto browser di css4-selector: focus-visibile in questo momento molto debole:
https://caniuse.com/#search=focus-visible


2

Basta scrivere outline:none;. Non è necessario utilizzare pseudo elementofocus


1

Questo è un problema nella famiglia Chrome ed è stato lì per sempre.

È stato sollevato un bug https://bugs.chromium.org/p/chromium/issues/detail?id=904208

Può essere mostrato qui: https://codepen.io/anon/pen/Jedvwj non appena aggiungi un bordo a qualcosa di simile a un pulsante (ad esempio ruolo = "pulsante" è stato aggiunto a un tag, ad esempio) Chrome si rovina e imposta lo stato di attivazione quando si fa clic con il mouse.

Consiglio vivamente di utilizzare questa correzione: https://github.com/wicg/focus-visible .

Basta fare quanto segue

npm install --save focus-visible

Aggiungi lo script al tuo html:

<script src="/node_modules/focus-visible/dist/focus-visible.min.js"></script>

o importalo nel tuo file di voce principale se usi webpack o qualcosa di simile:

import 'focus-visible/dist/focus-visible.min';

quindi inseriscilo nel tuo file css:

// hide the focus indicator if element receives focus via mouse, but show on keyboard focus (on tab).
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

// Define a strong focus indicator for keyboard focus.
// If you skip this then the browser's default focus indicator will display instead
// ideally use outline property for those users using windows high contrast mode
.js-focus-visible .focus-visible {
  outline: magenta auto 5px;
}

È possibile solo impostare:

button:focus {outline:0;}

ma se hai un gran numero di utenti, stai svantaggiando quelli che non possono usare i mouse o quelli che vogliono semplicemente usare la tastiera per la velocità.


1

Ho avuto lo stesso problema con bootstrap. Ho risolto sia con il contorno che con l'ombra della scatola

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
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.