onfocus="this.blur()" wird von blinden Webmastern gehasst

onfocus="this.blur()" wird von blinden Webmastern gehasst

Als er über die Seite zur Bedienung der Bildschirmlesesoftware sprach, betonte er gegenüber unseren Front-End-Studenten besonders: Was er am meisten hasste, war der Code onfocus="this.blur()" im Seitenlink. Woher kam das?

各種瀏覽器虛線框差異圖

(Abbildung 1)

Liebe Studierende, kommt euch dieser Code bekannt vor? Ja, ihr wisst schon, wir verwenden ihn oft, um den gepunkteten Rahmen zu entfernen, der um einen Link herum erscheint, wenn dieser im Fokus ist (wie in Abbildung 1 oben zu sehen). Wenn ihr danach googelt, werdet ihr feststellen, dass sich die ersten paar Dutzend Seiten ausschließlich mit der Technik zum Entfernen des gepunkteten Rahmens befassen. Aber darüber haben wir vielleicht noch nie nachgedacht: Diese Codezeile hat blinden Benutzern große Probleme bereitet: Sie unterbricht den Tabulatortastenpfad blinder Benutzer, sodass der Tabulatorcursor nicht auf den nächsten Controller (Link, Formularfeld, Objekt, Imagemap usw.) der Seite fokussieren kann. Der Test läuft wie folgt ab:


Code kopieren
Der Code lautet wie folgt:

<Text>
<a href="#" >Erster Link</a>
<a href="#" >Zweiter Link</a>
<a href="#" onfocus="this.blur();">Dritter Link</a>
<a href="#" >Vierter Link</a>
<a href="#" >Fünfter Link</a>
<a href="#" >Sechster Link</a>
</body>

Wenn Sie die Tabulatortaste drücken, können der erste und der zweite Link normal fokussiert werden. Wenn Sie mit der Tabulatortaste weiter zum dritten Link gehen, kommt es zu einer Tragödie: Der Fokus kehrt zum ersten Link zurück und kann nicht auf den vierten Link fokussiert werden. Der Grund dafür ist, dass, wenn der Fokus auf dem dritten Link liegt, die Ereignisverarbeitung onfocus="this.blur()" den Fokusverlust erzwingt und der Fokus zum Anfang des Dokuments zurückkehrt. Das dauerhafte Drücken der Tabulatortaste hat zur Folge, dass der Fokus zwischen den ersten drei Links hin- und herwandert und die dahinter liegenden Inhalte nicht mehr über die Tabulatortaste [1] erreicht werden können.

虛線框影響視覺效果 (Abbildung 2)

Gibt es also einen besseren Weg? Das Hinzufügen von onfocus="this.blur()" dient grundsätzlich dazu, den gepunkteten Rahmen um den Link zu entfernen, nachdem dieser den Fokus erhalten hat (natürlich sind die Fokuseffekte in Chrome, Safari und Opera unterschiedlich, deshalb nennen wir es hier einfach so). Im W3C-Artikel zu Outline wird erläutert, dass dieses gepunktete Kästchen dazu dient, Benutzern mitzuteilen, welches Element auf der aktuellen Seite den Fokus hat. Ich denke, dass die Existenz des gepunkteten Kästchens sinnvoll ist, aber manchmal kann man bestimmte Anforderungen an die „visuelle Sauberkeit“ nicht vermeiden (wie in Abbildung 2 gezeigt: Das gepunktete Kästchen trennt den „Produkt“-Hintergrund vom roten Block darunter). Im Folgenden sind einige gängige Methoden zum Entfernen des gepunkteten Kästchens zusammengefasst:

So entfernen Sie den gepunkteten Rahmen Für und Wider Kompatibilität Ob die Registerkarte unterbrochen werden soll
<a href="#" onfocus="this.blur()">diese Unschärfe</a> Linkfokus-Trigger bei Fokusverlust, JS und HTML sind miteinander gekoppelt Keine Kompatibilitätsprobleme Ja
a:focus {outline:none} oder
ein {Umriss: keiner}
Outline wurde in CSS 2.1 eingeführt. Es ist die Aufgabe von CSS, die visuellen Probleme des gepunkteten Kästchens zu beseitigen. ie6/ie7 werden nicht unterstützt, ie8+/ff/safari/opera[2] werden unterstützt NEIN
<a href=”#” hidefocus=”true” >Fokus ausblenden</a> Dieses Eigentum ist Privateigentum von IE.[3] IE5+-Unterstützung NEIN
a { noFocusLine: Ausdruck(dies.onFocus = dieses.blur())} Stapelverarbeitung ist möglich, aber die Leistung des Ausdrucks kann nicht ignoriert werden Expression wird von IE6/7 unterstützt, aber nicht von IE8+ oder Nicht-IE Ja

Auf dieser Grundlage lautet die empfohlene Methode zum Entfernen des gepunkteten Rahmens des Links: Verwenden Sie das Attribut hidefocus im Internet Explorer und outline:none in FF/Chorme/Opera/Safari. Im Augenblick:
<a href="#" hidefocus="true" >Link</a>
a:Fokus {
Umriss: keiner;
}

Yang Yongquan sagte hilflos, dass die Screenreader-Software dieses Attribut zwangsweise herausfiltern würde, bevor die Seite gelesen wird, wenn der Tab aufgrund von onfocus="this.blur()" nicht auf den gesamten Inhalt der Seite zugreifen kann. Wenn der Benutzer this.blur() jedoch dynamisch in js auslöst, muss sich die Screenreader-Software neue Tricks einfallen lassen, um dies einzuschränken. Dies erhöht zweifellos den Arbeitsaufwand bei der Entwicklung von Screenreader-Software. Um blinden Benutzern einen reibungsloseren Zugriff auf unsere Website zu ermöglichen, sollten Sie die Verwendung von onfocus="this.blur()" vermeiden.

Hinweise

[1] Standardmäßig werden in Safari durch Drücken der Tabulatortaste keine Links, sondern Formularfelder fokussiert. Sie können diese Funktion aktivieren, indem Sie in den Einstellungen unter „Erweitert“ die Option „Tabulatortaste drücken, um jedes Element auf der Webseite hervorzuheben“ aktivieren. Opera ist etwas ganz Besonderes. Mit Umschalt+Pfeiltasten nach oben, unten, links und rechts kann die Seite nach oben, unten, links und rechts fokussiert werden.

[2] In Opera wird beim Anklicken eines Links (im Fokus- oder aktiven Zustand) kein gepunkteter Rahmen angezeigt, daher kann das Problem mit dem gepunkteten Rahmen für Links in Opera ignoriert werden. Der von Opera mit den Tasten Umschalt+Auf, Ab, Links und Rechts erstellte Drahtrahmen kann nicht mithilfe von „outline:none“ entfernt werden, Opera unterstützt jedoch das Outline-Attribut.

[3] Das Hidefocus-Attribut ist ein privates Attribut des Internet Explorers. Obwohl das Hidefocus-Attribut zwei Werte hat: true oder false, zeigen die Testergebnisse, dass in IE5-IE9, unabhängig davon, ob der Wert true oder false ist, der Link den gepunkteten Rahmen verliert, solange das Hidefocus-Attribut hinzugefügt wird.

<<:  So verhindern Sie, dass Hyperlinks beim Verwenden eines Links springen

>>:  So installieren Sie Jupyter in Docker auf CentOS und öffnen Ports

Artikel empfehlen

Ein Leitfaden zur Optimierung leistungsstarker Websites

Goldene Regeln der Leistung: Nur 10 bis 20 % der ...

Zusammenfassung mehrerer häufig verwendeter CentOS7-Images basierend auf Docker

Inhaltsverzeichnis 1 Docker installieren 2 Konfig...

Detaillierte Erklärung der regulären Ausdrücke von Nginx

Nginx (Engine x) ist ein leistungsstarker HTTP- u...

Grundlegende Fähigkeiten zum Entwerfen von Web-Frontend-Schnittstellen

[Erforderlich] Benutzeroberfläche PhotoShop/Feuer...

Lösung für das 404-Problem der Tomcat-Installation in Docker

Suchen Sie die Container-ID von Tomcat und rufen ...

Tutorial zur Installation von Ceph Distributed Storage mit Yum unter Centos7

Inhaltsverzeichnis Vorwort Konfigurieren Sie die ...

Ein praktischer Bericht über einen durch den MySQL-Start verursachten Unfall

Inhaltsverzeichnis Hintergrund So ermitteln Sie, ...

Zusammenfassung der Ereignisbehandlung im Vue.js-Frontend-Framework

1. v-on-Ereignisüberwachung Um DOM-Ereignisse abz...

Serielle und parallele Operationen in JavaScript

Inhaltsverzeichnis 1. Einleitung 2. es5-Methode 3...

So testen Sie die Netzwerkgeschwindigkeit mit JavaScript

Inhaltsverzeichnis Vorwort Zusammenfassung des Pr...

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort Hinweis: Die Testdatenbankversion ist MyS...