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.

1400voto

Cory Points 37551

Dans votre cas, essayez :

input.middle:focus {
    outline-width: 0;
}

Ou, en général, d'affecter tous les éléments de base de la forme :

input:focus,
select:focus,
textarea:focus,
button:focus {
    outline: none;
}

Dans les commentaires, Noah Whitmore sugg sugg suggéré d'aller encore plus loin et d'aider les éléments contenteditable défini comme suit true (ce qui en fait un type d'élément d'entrée). Les éléments suivants devraient également les cibler (dans les navigateurs compatibles CSS3) :

[contenteditable="true"]:focus {
    outline: none;
}

Bien que je ne le recommande pas, par souci d'exhaustivité, vous pouvez toujours désactiver le contour du focus sur tout avec ça :

*:focus {
    outline: none;
}

N'oubliez pas que le contour de mise au point est une fonction d'accessibilité et de convivialité ; il indique à l'utilisateur quel élément est actuellement mis au point.

11 votes

Merci Cory, excellent conseil. Vous devez également attribuer le CSS à textarea pour couvrir tous les champs de saisie. input:focus, textarea:focus {outline: none;}

7 votes

N'oubliez pas de sélectionner également select:focus {outline:none;}

2 votes

Il y a aussi le <button> qui est utilisé par jQuery UI et Twitter Bootstrap, entre autres, et j'ajouterais donc button: focus à la liste par souci d'exhaustivité.

83voto

marcjae Points 623

Pour le supprimer de toutes les entrées

input {
 outline:none;
}

53voto

Rikard Askelöf Points 1528

Cela m'a perturbé pendant un certain temps jusqu'à ce que je découvre que la ligne n'était ni une bordure ni un contour, mais une ombre. Pour la supprimer, j'ai donc dû utiliser ceci :

input:focus, input.form-control:focus {

    outline:none !important;
    outline-width: 0 !important;
    box-shadow: none;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
}

39voto

Boaz Points 5627

Il s'agit d'un vieux sujet, mais pour référence, il est important de noter que la désactivation du contour d'un élément de saisie n'est pas recommandée car elle entrave l'accessibilité.

La propriété de contour est là pour une raison : fournir aux utilisateurs une indication claire de la focalisation du clavier. Pour plus de lecture et de sources supplémentaires sur ce sujet, voir http://outlinenone.com/

1 votes

Boaz, pour votre information, input.middle{outline : none} vous permettra toujours de parcourir les éléments (y compris input.middle). En appuyant sur la touche de tabulation, vous vous concentrerez également sur la balise input. La seule chose est que vous ne serez pas en mesure de voir le focus (outline focus) sur celle-ci. Il n'est donc pas si dangereux de l'utiliser : )

13 votes

@AnishNair Only thing is that you won't be able to see the focus(outline focus) on it - et c'est exactement ce que je veux dire. Enlever le contour désactive le indication visuelle de l'événement focus, et non de l'événement réel. En supprimant l'indication visuelle, vous rendez la tâche plus difficile aux personnes handicapées qui comptent sur cette indication.

2 votes

Parfois, nous devons faire des compromis, afin d'atteindre quelque chose : )

31voto

I haz kode Points 319

Il s'agit d'une préoccupation commune.

La valeur par défaut aperçu que les navigateurs rendent est laid.

Voyez par exemple ceci :

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

<form>
  <label>Click to see the input below to see the outline</label>
  <input type="text" placeholder="placeholder text" />
</form>

La "réparation" la plus courante que l'on recommande est la suivante outline:none - qui, s'il est utilisé de manière incorrecte, est un désastre pour l'accessibilité.


Alors... à quoi sert le schéma de toute façon ?

Il y a un site web très sec J'ai trouvé qui explique bien tout.

Il fournit un retour visuel pour les liens qui ont le "focus" lorsque vous la navigation dans un document Web à l'aide de la touche TAB (ou équivalent). Cette fonction est particulièrement utile pour les personnes ne pouvant pas utiliser de souris ou ayant une déficience visuelle. Si vous supprimez le contour, vous rendez votre site inaccessible pour ces personnes.

Ok, essayons le même exemple que ci-dessus, mais en utilisant la fonction TAB pour naviguer.

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

<form>
  <label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
  <input type="text" placeholder="placeholder text" />
</form>

Vous avez remarqué que vous pouvez savoir où se trouve le centre d'intérêt, même sans cliquer sur l'entrée ?

Maintenant, essayons outline:none sur notre fidèle <input>

Donc, une fois de plus, utilisez le TAB pour naviguer après avoir cliqué sur le texte et voyez ce qui se passe.

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

input {
  outline: none;
}

<form>
  <label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
  <input type="text" placeholder="placeholder text" />
</form>

Vous voyez qu'il est plus difficile de savoir où se trouve le point central ? Le seul signe révélateur est le clignotement du curseur. Mon exemple ci-dessus est trop simpliste. Dans le monde réel, il n'y a pas qu'un seul élément sur la page. Quelque chose de plus proche de ceci.

.wrapper {
  width: 500px;
  max-width: 100%;
  margin: 0 auto;
}

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

input {
  outline: none;
}

<div class="wrapper">

  <form>
    <label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
  </form>

  <form>
    First name:<br>
    <input type="text" name="firstname"><br> Last name:<br>
    <input type="text" name="lastname">
  </form>

  <form>
    <input type="radio" name="gender" value="male" checked> Male<br>
    <input type="radio" name="gender" value="female"> Female<br>
    <input type="radio" name="gender" value="other"> Other
  </form>

  <form>
    <label for="GET-name">Name:</label>
    <input id="GET-name" type="text" name="name">
  </form>

  <form>
    <label for="POST-name">Name:</label>
    <input id="POST-name" type="text" name="name">
  </form>

  <form>
    <fieldset>
      <legend>Title</legend>
      <input type="radio" name="radio" id="radio">
      <label for="radio">Click me</label>
    </fieldset>
  </form>

</div>

Maintenant, comparez cela au même modèle si nous gardons le contour :

.wrapper {
  width: 500px;
  max-width: 100%;
  margin: 0 auto;
}

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

<div class="wrapper">

  <form>
    <label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
  </form>

  <form>
    First name:<br>
    <input type="text" name="firstname"><br> Last name:<br>
    <input type="text" name="lastname">
  </form>

  <form>
    <input type="radio" name="gender" value="male" checked> Male<br>
    <input type="radio" name="gender" value="female"> Female<br>
    <input type="radio" name="gender" value="other"> Other
  </form>

  <form>
    <label for="GET-name">Name:</label>
    <input id="GET-name" type="text" name="name">
  </form>

  <form>
    <label for="POST-name">Name:</label>
    <input id="POST-name" type="text" name="name">
  </form>

  <form>
    <fieldset>
      <legend>Title</legend>
      <input type="radio" name="radio" id="radio">
      <label for="radio">Click me</label>
    </fieldset>
  </form>

</div>

Nous avons donc établi ce qui suit

  1. Les contours sont moches
  2. Les supprimer rend la vie plus difficile.

Alors quelle est la réponse ?

Supprimez l'horrible contour et ajoutez vos propres repères visuels pour indiquer la concentration.

Voici un exemple très simple de ce que je veux dire.

J'enlève le contour et j'ajoute une bordure en bas sur :focus y :active . Je supprime également les bordures par défaut en haut, à gauche et à droite en les rendant transparentes sur :focus y :active (préférence personnelle)

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

input {
  outline: none
}

input:focus,
input:active {
  border-color: transparent;
  border-bottom: 2px solid red
}

<form>
  <label>Click to see the input below to see the outline</label>
  <input type="text" placeholder="placeholder text" />
</form>

Nous essayons donc l'approche ci-dessus avec notre exemple du "monde réel" de tout à l'heure :

.wrapper {
  width: 500px;
  max-width: 100%;
  margin: 0 auto;
}

form,
label {
  margin: 1em auto;
}

label {
  display: block;
}

input {
  outline: none
}

input:focus,
input:active {
  border-color: transparent;
  border-bottom: 2px solid red
}

<div class="wrapper">

  <form>
    <label>Click on this text and then use the TAB key to naviagte inside the snippet.</label>
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
    <input type="text" placeholder="placeholder text" />
  </form>

  <form>
    First name:<br>
    <input type="text" name="firstname"><br> Last name:<br>
    <input type="text" name="lastname">
  </form>

  <form>
    <input type="radio" name="gender" value="male" checked> Male<br>
    <input type="radio" name="gender" value="female"> Female<br>
    <input type="radio" name="gender" value="other"> Other
  </form>

  <form>
    <label for="GET-name">Name:</label>
    <input id="GET-name" type="text" name="name">
  </form>

  <form>
    <label for="POST-name">Name:</label>
    <input id="POST-name" type="text" name="name">
  </form>

  <form>
    <fieldset>
      <legend>Title</legend>
      <input type="radio" name="radio" id="radio">
      <label for="radio">Click me</label>
    </fieldset>
  </form>

</div>

Il est possible d'aller plus loin en utilisant des bibliothèques externes qui s'appuient sur l'idée de modifier le "contour" plutôt que de le supprimer entièrement, par exemple Matérialiser

Vous pouvez vous retrouver avec quelque chose qui n'est pas laid et qui fonctionne avec très peu d'efforts.

body {
  background: #444
}

.wrapper {
  padding: 2em;
  width: 400px;
  max-width: 100%;
  text-align: center;
  margin: 2em auto;
  border: 1px solid #555
}

button,
.wrapper {
  border-radius: 3px;
}

button {
  padding: .25em 1em;
}

input,
label {
  color: white !important;
}

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.1/css/materialize.min.css" />

<div class="wrapper">
  <form>
    <input type="text" placeholder="Enter Username" name="uname" required>
    <input type="password" placeholder="Enter Password" name="psw" required>
    <button type="submit">Login</button>
  </form>
</div>

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