793 Stimmen

Entfernen des hervorgehobenen Rahmens bei einem Eingabeelement für Text

Wenn ein HTML-Element "fokussiert" ist (d. h. gerade ausgewählt/mit einem Tab versehen), wird es in vielen Browsern (zumindest in Safari und Chrome) mit einem blauen Rahmen versehen.

Für das Layout, an dem ich gerade arbeite, ist das störend und sieht nicht gut aus.

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

Firefox scheint dies nicht zu tun, oder zumindest lässt es mich mit kontrollieren:

border: x;

Wenn mir jemand sagen kann, wie der IE abschneidet, wäre ich neugierig.

Es wäre schön, wenn Safari diesen kleinen Makel entfernen könnte.

19voto

Ali Al Amine Punkte 1356

Die einzige Lösung, die bei mir funktioniert hat

Die Grenze ist eigentlich ein Schatten. Um ihn auszublenden, musste ich also Folgendes tun:

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 Punkte 20809

Edit 2021: Sie können dies jetzt verwenden: https://github.com/WICG/focus-visible

Das Entfernen aller Fokus-Stile ist schlecht für die Barrierefreiheit und Tastaturbenutzer im Allgemeinen. Aber Umrisse sind hässlich und die Bereitstellung eines benutzerdefinierten fokussierten Stils für jedes einzelne interaktive Element kann eine echte Qual sein.

Der beste Kompromiss, den ich gefunden habe, besteht darin, die Gliederungsstile nur dann anzuzeigen, wenn wir feststellen, dass der Benutzer die Tastatur zur Navigation verwendet. Wenn der Benutzer TAB drückt, zeigen wir die Umrisse an, und wenn er die Maus benutzt, blenden wir sie aus.

Das hindert Sie nicht daran, für einige Elemente benutzerdefinierte Fokusstile zu schreiben, aber es bietet zumindest einen guten Standard.

So mache ich es:

// 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 Stimmen

Dies ist ein gründlicher Ansatz. Die click Hörer ist eine nette Geste.

9voto

t_dom93 Punkte 7172

:focus-visible

Gute Nachrichten für die Barrierefreiheit - Chrome und Firefox haben Unterstützung für :focus-visible .

Das Ausblenden von Fokusstilen ist aufgrund von Zugänglichkeitsanforderungen (Tastaturnavigation) eine schlechte Praxis, die Ihre Websites weniger zugänglich macht.

Verwenden Sie :focus-visible Pseudoklasse und überlassen es dem Browser, zu bestimmen, wann der Fokus gesetzt wird.

:focus-visible /* Chrome */

Beachten Sie, dass Firefox eine ähnliche Funktionalität durch eine ältere, vorangestellte Pseudoklasse unterstützt:

:-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

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

8voto

Oneezy Punkte 4361

Ich habe alle Antworten ausprobiert und konnte meine immer noch nicht zum Laufen bringen Mobil , bis ich fand -webkit-tap-highlight-color .

Was bei mir also funktioniert hat, ist...

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

1 Stimmen

Das ist die Lösung, nach der ich gesucht habe. Dies ist besonders nützlich, wenn Sie Touchscreen-Erfahrungen mit Elementen wie li

7voto

1010 Punkte 211

Sie können das mit CSS deaktivieren! Dies ist der Code, den ich zum Deaktivieren des blauen Rahmens verwende:

*:focus {
    outline: none;
}

Dies ist ein funktionierendes Beispiel

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X