Wie Eric Bailey sagt, wenn etwas interaktiv ist, braucht es einen Fokusstil. Vielleicht ist Ihre beste Wahl? Entfernen Sie nicht die verflixten Umrandungen, die fokussierbare Elemente standardmäßig haben. Wenn Sie zum Beispiel button { outline: 0; } verwenden, dann sollten Sie besser button:focus { /* etwas anderes, das visuell sehr deutlich ist */ } verwenden. Ich habe gerade heute eine Anfrage bearbeitet, bei der ein fehlender Fokusstil einem Benutzer geschadet hat, der sich auf visuelle Fokusstile für die Navigation im Web verlässt.
Aber diese Fokusstile sind am nützlichsten, wenn mit der Tastatur getabt oder auf andere Weise navigiert wird, und weniger, wenn sie durch einen Mausklick ausgelöst werden. Jetzt haben wir :focus-visible! Nelo schreibt
TLDR;
:focus-visibleist die tastaturbetriebene Version von:focus.Außerdem erwähnt der W3C-Vorschlag, dass
:focus-visiblegegenüber:focusbevorzugt werden sollte, außer bei Elementen, die eine Tastatureingabe erwarten (z. B. Textfelder,contenteditable).
(Siehe auch seinen Artikel für eine gute Demo, warum Mausklicks und Fokusstile im Widerspruch stehen können, jenseits einer allgemeinen Abneigung gegen unscharfe blaue Umrandungen.)
Die Browserunterstützung für :focus-visible ist ziemlich schlecht
Diese Browser-Unterstützungsdaten stammen von Caniuse, das weitere Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 86 | 4* | Nein | 86 | 15.4 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 15.4 |
Aber es gibt Firefox-Unterstützung, und wie Lea Verou sagt
… sobald Chrome seine Implementierung veröffentlicht, wird sie innerhalb von 1-2 Monaten explodieren.
So läuft das heutzutage im Allgemeinen. Sobald zwei große Browser Unterstützung haben – und einer davon ist Chrome – ist das ein ausreichend großer Teil des Webs, der ihn nutzen kann. Besonders wenn es so sicher wie diese Eigenschaft geschehen kann.
Sicher, denn es gibt ein offizielles Polyfill, was bedeutet, dass Sie Standard-Fokusstile löschen und einfach nur :focus-visible-Stile verwenden können
/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
outline: none;
}
/* Optional: Customize .focus-visible */
.focus-visible {
outline: lightgreen solid 2px;
}
Aber, wie Patrick H. Lauke dokumentiert hat, können Sie es auch ohne das Polyfill tun, indem Sie sorgfältig Selektoren verwenden und Stile nach Bedarf rückgängig machen
button:focus { /* Some exciting button focus styles */ }
button:focus:not(:focus-visible) {
/* Undo all the above focused button styles
if the button has focus but the browser wouldn't normally
show default focus styles */
}
button:focus-visible { /* Some even *more* exciting button focus styles */ }
Scheint eine schöne Verbesserung für das Web zu sein.
Freut mich, mehr über Fokus-Zustände und
:focus-visiblezu erfahren. Einige GedankenWas ist ein tastaturbetriebener Benutzer? Schnelle Moduswechsel sind gerade in der heutigen Zeit, in der Mainstream-Geräte auf Knopfdruck zwischen Touch, Maus, Tastatur und anderen Eingaben wie Sprache wechseln können, weit verbreitet. Denken Sie an das letzte Mal, als Sie durch ein Formular getabt sind, aber den Submit-Button mit einem Cursor angeklickt haben. Die Einteilung der Benutzer in Tastatur- und Nicht-Tastatur-Benutzer basiert auf vielen Annahmen über ihre Umstände und ihre Browsing-Methoden, und das gefällt mir überhaupt nicht.
Berücksichtigen Sie auch Dinge wie die technische Kompetenz des Endbenutzers. Ein inkonsistenter Fokuseffekt kann für jemanden verwirrend sein, der die Feinheiten der Navigation durch ein digitales System nicht kennt, da ihm nicht direkt mitgeteilt wird, warum ein Fokusring erscheint oder nicht. Dies wird dadurch verstärkt, wenn der Benutzer Sehbehinderungen hat, da die Vorhersagbarkeit, wo er erscheint, verändert ist.
Außerdem ist JavaScript, im Gegensatz zu CSS, nicht fehlertolerant. Wenn der Polyfill-Teil des Skripts fehlschlägt, gehen die Fokuseffekte verloren, was die Website für diejenigen, die auf Fokusindikatoren angewiesen sind, unbenutzbar macht. Ganz zu schweigen von den Kompatibilitätsproblemen für nicht standardmäßige Browser.
Ich bin eindeutig skeptisch gegenüber dem tatsächlichen Nutzen von
:focus-visible, aber ich denke auch, dass die Einsätze wirklich hoch sind.Ich stimme dem vollkommen zu. Nachdem ich die Macht guter Barrierefreiheitskontrollen auf einer Website nach der Arbeit an einem persönlichen Projekt entdeckt hatte, benutze ich zunehmend sowohl Tastatur- als auch Maus-basierte Navigation.
Ich bin für neue Werkzeuge und Syntaxen und ich finde, das sieht interessant aus. Nichtsdestotrotz ist die Unterstützung dafür schlecht, und während ein Polyfill Ihnen helfen mag, glaube ich nicht, dass die Kraft von
:focusignoriert werden kann. Während dies für einige wie eine lustige neue Sache aussieht, ist es der Unterschied zwischen der tatsächlichen Nutzung des Webs und der Unfähigkeit dazu. Etwas, das Leute (einschließlich mir selbst) für selbstverständlich halten.Gute Zusammenfassung. Ich freue mich darauf, zu sehen, wie dies in mehr Browsern implementiert wird und wie wir beide Optionen nutzen können. Nichts hindert uns daran, sie parallel einzusetzen, um eine großartige Erfahrung für fähige und weniger fähige Benutzer zu schaffen.
Dieser Austausch wird etwas hitzig, scheint aber verwandt zu sein...
Wir verwenden einen anderen Ansatz in unseren React-Apps.
d.h. das Node-Paket "what-input", das folgende Attribute zu HTML-Elementen hinzufügt
<html data-whatinput="keyboard" data-whatintent="keyboard">.Wir nutzen dies dann so, um :FOCUS-Stile für die Tastatur bereitzustellen
Und :HOVER-Stile für die Maus
Ich benutze normalerweise eine HTML-Version davon. Die Technik beinhaltet das Hinzufügen eines Elements innerhalb des Elements, dem Sie Stile geben möchten.
Sie stylen dann den
:focusfür das Hauptelement.Wenn der Benutzer darauf klickt, erhält das
<span>-Element den Fokus und der Fokusring wird nicht angezeigt.Ich freue mich auf
:focus-visible– das wird definitiv Markup sparen!In der Zwischenzeit – bis
:focus-visibleBrowserunterstützung erhält – gibt es andere Möglichkeiten, tastaturbetriebene Fokusstile zu erzielen. Hier ist ein Artikel mit einer CSS-Lösung: https://www.kizu.ru/keyboard-only-focus/#x – Codepen [Hier] (https://codepen.io/danield770/details/RgzLrm/) Es ist etwas unordentlicher als das Pseudoelement, aber es erfüllt seinen Zweck!