795 votes

Comment supprimer la surbrillance de la bordure d'un élément de texte à saisir ?

Lorsqu'un élément HTML est "focalisé" (sélectionné ou dans lequel on navigue), de nombreux navigateurs (au moins Safari et Chrome) l'entourent d'une bordure bleue.

Pour la mise en page sur laquelle je travaille, c'est une source de distraction et cela ne semble pas correct.

<input type="text" name="user" class="middle" id="user" tabindex="1" />

Firefox ne semble pas faire cela, ou du moins, me laisse le contrôler avec :

border: x;

Si quelqu'un peut me dire comment IE se comporte, je serais curieux.

Ce serait bien que Safari puisse supprimer cette petite touche de fantaisie.

19voto

Ali Al Amine Points 325

La seule solution qui a fonctionné pour moi

La frontière est en fait une ombre. Donc pour la cacher, j'ai dû faire ça :

input[type="text"]:focus{
     box-shadow: 0 0 0 rgb(255, 255, 255);
}

 input[type="checkbox"]:focus{
      box-shadow: 0 0 0 rgb(255, 255, 255);
 }

13voto

Tom Esterez Points 4923

La suppression de tous les styles de focalisation est mauvaise pour l'accessibilité et les utilisateurs de clavier en général. Mais les contours sont moches et fournir un style de focalisation personnalisé pour chaque élément interactif peut s'avérer très compliqué.

Le meilleur compromis que j'ai trouvé est donc d'afficher les styles de contour uniquement lorsque nous détectons que l'utilisateur utilise le clavier pour naviguer. En gros, si l'utilisateur appuie sur TAB, nous affichons les contours et s'il utilise la souris, nous les cachons.

Cela ne vous empêche pas d'écrire des styles de mise au point personnalisés pour certains éléments, mais cela fournit au moins un bon défaut.

C'est comme ça que je fais :

// detect keyboard users

const keyboardUserCssClass = "keyboardUser";

function setIsKeyboardUser(isKeyboard) {
  const { body } = document;
  if (isKeyboard) {
   body.classList.contains(keyboardUserCssClass) || body.classList.add(keyboardUserCssClass);
  } else {
   body.classList.remove(keyboardUserCssClass);
  }
}

// This is a quick hack to activate focus styles only when the user is
// navigating with TAB key. This is the best compromise we've found to
// keep nice design without sacrifying accessibility.
document.addEventListener("keydown", e => {
  if (e.key === "Tab") {
   setIsKeyboardUser(true);
  }
});
document.addEventListener("click", e => {
  // Pressing ENTER on buttons triggers a click event with coordinates to 0
  setIsKeyboardUser(!e.screenX && !e.screenY);
});

document.addEventListener("mousedown", e => {
  setIsKeyboardUser(false);
});

body:not(.keyboardUser) *:focus {
  outline: none;
}

<p>By default, you'll see no outline. But press TAB key and you'll see focussed element</p>
<button>This is a button</button>
<a href="#">This is anchor link</a>
<input type="checkbox" />
<textarea>textarea</textarea>
<select/>

1 votes

Il s'agit d'une approche approfondie. Le site click L'écouteur est une bonne idée.

9voto

t_dom93 Points 2396

Mise à jour 2020 - :focus-visible

Bonne nouvelle pour l'accessibilité : Chrome et Firefox viennent d'ajouter la prise en charge de l'accessibilité de l'Internet. :focus-visible .

Le masquage des styles de focus est une mauvaise pratique en raison des exigences d'accessibilité (navigation au clavier), ce qui rend vos sites Web moins accessibles.

Utilisez :focus-visible et laisser le navigateur déterminer quand appliquer le focus.

:focus-visible /* Chrome */

Notez que Firefox prend en charge une fonctionnalité similaire par le biais d'une ancienne pseudo-classe préfixée :

:-moz-focusring /* Firefox */

button {
  color: #000;
  background-color: #fff;
  padding: 10px 16px;
  margin: 10px 0;
  border-radius: 4px;
}

button:focus {
  box-shadow: 0 0 0 2px #E59700;
  outline: 0;
}

button:hover {
  background-color: #eee;
}

button.with-focus-visible:focus:not(:focus-visible) {
  box-shadow: none;
  outline: 0;
}

button.with-focus-visible:focus-visible, 
button.with-focus-visible:moz-focusring {
  box-shadow: 0 0 0 2px #E59700;
  outline: 0;
}

<p>Click on the button using a mouse. Then try tabbing to the button.</p>
<button>without :focus-visible</button>
<button class="with-focus-visible">with :focus-visible</button>

docs : https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible

spécifications w3 : https://www.w3.org/TR/selectors-4/#the-focus-visible-pseudo

8voto

MrRioku Points 523

J'ai essayé toutes les réponses et je n'ai toujours pas réussi à faire fonctionner le mien sur Mobile jusqu'à ce que je trouve -webkit-tap-highlight-color .

Donc, ce qui a marché pour moi c'est...

* { -webkit-tap-highlight-color: transparent; }

1 votes

C'est la solution que je cherchais. C'est particulièrement utile lorsque vous avez des expériences sur écran tactile avec des éléments comme les li

7voto

1010 Points 193

Vous pouvez utiliser le CSS pour le désactiver ! Voici le code que j'utilise pour désactiver la bordure bleue :

*:focus {
    outline: none;
}

Voici un exemple de travail

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X