Es gibt viel Barrierefreiheit in den Nachrichten dieser Woche, von den Nuancen der Verwendung von :focus-visible und Eingabeplatzhaltern bis hin zu barrierefreien Schriftarten und einem Safari-Bug mit :display: contents. Außerdem ein Ausschnitt für eine einfache Webkomponente, die Stil-Kapselung unterstützt.
Jetzt ist vielleicht ein guter Zeitpunkt, um mit :focus-visible zu beginnen
Die CSS-Pseudo-Klasse :focus-visible ersetzt :focus als neue Methode zur Erstellung benutzerdefinierter Fokusindikatoren für Tastaturbenutzer. Chrome hat kürzlich in der Benutzeroberflächen-Stylesheet von :focus zu :focus-visible gewechselt, und infolgedessen wird der Standard-Fokusring nicht mehr angezeigt, wenn der Benutzer auf eine Schaltfläche klickt oder tippt.
Beim Wechsel von :focus zu :focus-visible sollten Sie die Abwärtskompatibilität berücksichtigen. Ihre Fokusindikatoren für die Tastatur sollten in allen Browsern deutlich sichtbar sein, nicht nur in denen, die :focus-visible unterstützen. Wenn Sie nur :focus-visible stylen, zeigen Browser, die es nicht unterstützen, den Standard-Fokusring an, der je nach Design „möglicherweise nicht ausreichend klar oder überhaupt nicht sichtbar“ ist.
button {
background: white;
}
button:focus-visible {
outline: none;
background: #ffdd00; /* gold */
}

Eine gute Möglichkeit, :focus-visible heute zu verwenden, ist, die Fokusstile in einer :focus-Regel zu definieren und dann diese gleichen Stile sofort in einer :focus:not(:focus-visible)-Regel rückgängig zu machen. Dies ist zugegebenermaßen nicht das eleganteste und intuitivste Muster, aber es funktioniert gut in allen Browsern.
- Browser, die
:focus-visible**nicht** unterstützen, verwenden die in der:focus-Regel definierten Fokusstile und ignorieren die zweite Stilregel vollständig (da:focus-visibleihnen unbekannt ist). - In Browsern, die
:focus-visible**unterstützen**, macht die zweite Stilregel die in der:focus-Regel definierten Fokusstile rückgängig, wenn der:focus-visible-Zustand nicht ebenfalls aktiv ist. Mit anderen Worten, die in der:focus-Regel definierten Fokusstile sind nur dann wirksam, wenn:focus-visibleebenfalls aktiv ist.
button:focus {
outline: none;
background: #ffdd00; /* gold */
}
button:focus:not(:focus-visible) {
background: white; /* undo gold */
}
Die BBC hat eine zugänglichere Schriftart entwickelt
Die BBC hat ihre eigene benutzerdefinierte Schriftart namens Reith entwickelt (benannt nach dem Gründer der BBC, Sir John Reith). Ihr Ziel war es, eine Schriftart zu erstellen, die mehrere Sprachen unterstützt und leichter zu lesen ist, insbesondere auf kleinen Geräten. Die Schriftart wurde mit Benutzergruppen mit unterschiedlichen Fähigkeiten (Legasthenie und Sehbehinderung) und über verschiedene Bildschirmgrößen hinweg getestet.
Wir [die BBC] haben Helvetica oder Arial verwendet. Wir hatten auch Gill Sans als Unternehmensschriftart. Diese Schriftarten wurden vor hundert Jahren für den Druck entworfen und funktionieren auf den heutigen modernen digitalen Bildschirmen nicht gut.

Hinweis: Wenn Sie Reith Sans und Reith Serif in Wakamai Fondue inspizieren möchten, können Sie die URLs der WOFF2-Dateien im Abschnitt „Alle Schriftarten auf der Seite“ des Schriftartenfensters im DOM-Inspektor von Firefox auf der BBC-Website schnell abrufen.
display: contents ist in Safari immer noch nicht zugänglich
Der CSS-Wert display: contents wird seit 2018 in Browsern unterstützt. Ein Element mit diesem Wert „generiert keine Boxen“ und wird effektiv durch seine Kinder ersetzt. Dies ist besonders nützlich in Flex- und Grid-Layouts, wo der Wert contents verwendet werden kann, um tiefer verschachtelte Elemente zu Flex-/Grid-Items zu „fördern“ und gleichzeitig eine semantische Dokumentenstruktur beizubehalten.

Leider wurde diese Funktion ursprünglich mit einem Implementierungsfehler ausgeliefert, der das Element aus dem Zugänglichkeitsbaum des Browsers entfernte. Beispielsweise führte die Anwendung von display: contents auf ein <ul>-Element dazu, dass dieses Element von Screenreadern nicht mehr erwähnt wurde. Seitdem wurde dieser Fehler in Firefox und Chrome (in der neuesten Version) behoben.
In Chrome und Firefox informiert der Screenreader den Benutzer, dass die „Hauptnavigation“ eine „Liste mit 2 Elementen“ enthält. In Safari fehlt der letztere Teil, da die Elemente <ul> und <li> nicht im Zugänglichkeitsbaum vorhanden sind. Bis Apple diesen Bug in Safari behebt, seien Sie vorsichtig bei der Verwendung des contents-Werts für semantische Elemente und testen Sie mit Screenreadern, um zu bestätigen, dass Ihre Seiten auch in Safari zugänglich sind.
Setzen Sie die opacity beim Überschreiben der Farbe des Platzhaltertextes
Barrierefreiheitsexperten empfehlen, Platzhalter nach Möglichkeit zu vermeiden, da sie mit vorab ausgefülltem Text verwechselt werden können und verschwinden, wenn der Benutzer mit der Eingabe beginnt. Viele Websites (einschließlich Wikipedia und GOV.UK) verwenden jedoch Platzhalter in einfachen Webformularen, die nur ein einziges Eingabefeld enthalten, z. B. ein Suchfeld.

Platzhalter können über das weit verbreitete Pseudo-Element ::placeholder gestylt werden. Wenn Ihr Design eine benutzerdefinierte Farbe für Platzhaltertext erfordert, stellen Sie sicher, dass Sie sowohl color als auch opacity angeben. Letzteres wird für Firefox benötigt, das standardmäßig opacity: 0.54 auf ::placeholder anwendet. Wenn Sie diesen Wert nicht überschreiben, kann Ihr Platzhaltertext in Firefox unzureichenden Kontrast aufweisen.
.search-field::placeholder {
color: #727272;
opacity: 1; /* needed for Firefox */
}

Deklaratives Shadow DOM könnte zur Popularisierung von Stil-Kapselung beitragen
Eine der Hauptfunktionen von Shadow DOM ist die Stil-Kapselung, bei der die Stilregeln der äußeren Seite nicht mit Elementen innerhalb des Shadow-Baums übereinstimmen und umgekehrt. Um diese Funktion nutzen zu können, müssen Sie einen Shadow DOM-Baum an ein Element anhängen (normalerweise ein benutzerdefiniertes Element wie <my-element>) und die Vorlage des Elements (normalerweise aus einem <template>-Element im DOM) in den neu erstellten Shadow DOM des Elements kopieren.
Diese Schritte können nur in JavaScript ausgeführt werden. Wenn Sie nur an Stil-Kapselung interessiert sind und keine dynamische Funktionalität für Ihr Element benötigen, hier ist die minimale JavaScript-Menge, die erforderlich ist, um ein benutzerdefiniertes Element mit einem Shadow DOM zu erstellen.
customElements.define(
"my-element",
class extends HTMLElement {
constructor() {
super();
// find <template id="my-template"> in the DOM
let template = document.getElementById("my-template");
// make a copy of the template contents…
let content = template.content.cloneNode(true);
// …and inject it into <my-element>’s shadow DOM
this.attachShadow({ mode: "open" }).appendChild(content);
}
}
);
Ein Beispiel für Stil-Kapselung finden Sie in Miriam Suzannes <media-object>-Element auf CodePen. Die gekapselten Stile befinden sich im <template>-Element im HTML-Bereich. Beachten Sie, wie dieser CSS-Code einfache Selektoren wie article verwenden kann, die nur mit Elementen innerhalb des Shadow DOM von <media-object> übereinstimmen.
JavaScript ist möglicherweise bald nicht mehr erforderlich, um diese Art von Stil-Kapselung in modernen Browsern zu erstellen. Anfang dieser Woche hat Chrome als erster Browser die Deklarative Shadow DOM-Vorschlag von Google ausgeliefert. Wenn dies ein Standard wird, wird diese Funktion auch die Verwendung von Shadow DOM in Kombination mit serverseitiger Wiedergabe ermöglichen.
So toll, dass die BBC ihre eigene Schriftart entwickelt hat, aber hat ihnen jemand gesagt, dass sie keine 20 verschiedenen Varianten davon brauchen? Es sieht so aus, als hätten sie helle, helle kursive, normale, mittlere, mittlere kursive, kursive, fette, fette kursive, extra fette, extra fette kursive Versionen sowohl für Serif- als auch für serifenlose Schriftarten.
Dies erfordert 20 Anfragen und lädt 1,3 MB Schriftarten.
Ich verstehe, woher Sie kommen, aber vielleicht mussten sie die exakte Kontrolle über ihre Schriftart haben, denn das Hinzufügen von Kursiv- oder Fettschrift zu Texten erzielt nicht den gewünschten Effekt. Persönlich verwende ich eine Schriftart, die eine helle, normale und halbfette Variante hat, da das CSS-Gewicht einfach nicht ausreicht. Ich bin mit den CSS-Kursivschriftarten dieser Schriftart zufrieden, aber die Eigenschaft `weight` funktioniert nicht. Wenn ich eine große Schriftgröße wünsche, möchte ich nicht die skalierte Dicke/Breite, die mit dem Erhöhen der Schriftgröße bei „normalen“ Schriftarten einhergeht. Und da die Eigenschaft `weight` diese Schriftart nicht beeinflusst, binde ich auch eine helle Version ein, die ich für Überschriften verwende. Ich verabscheue hauchdünne Schrift, also verwende ich eine Schriftart, die in der hellen Version einfach schlanker ist. So werden meine Überschriften nicht zu breit und brechen um. Für die halbfette Version ist sie perfekt für die Schlüsselwörter, die eine leichte Gewichtszunahme benötigen – da die Gewichtswerte bei der regulären `font-face` nicht wirklich funktionieren. Meine Seite lädt 4 Schriftarten, was für mich in Ordnung ist. Ich habe keine 20, aber dann bin ich nicht das BBC News Outlet. Es wäre großartig, wenn CSS ein Prozent- oder Grad-Attribut enthalten würde, mit dem der Benutzer die Dicke und Kursivschrift besser steuern kann, dann bräuchten wir nicht so viele Schriftartensets.
Bei der Verwendung von `focus-visible` ist es auch wichtig, Ihre Fokus- und Hover-Stile aus Gründen der Abwärtskompatibilität in separaten Deklarationen zu halten. Wenn Sie zum Beispiel `button:hover, button:focus-visible{ color: red; }` machen wollten, würden sowohl die Fokus- als auch die Hover-Deklarationen in Browsern, in denen `focus-visible` nicht unterstützt wird, fehlschlagen.
So toll, dass die Leute anfangen, visuelle Beeinträchtigungen wie Legasthenie zu berücksichtigen. Ich habe sowohl Legasthenie ALS AUCH mehrere Varianten von skotopischer Empfindlichkeit. Ich bin Webentwickler – LOL. Diese sind sehr häufig und betreffen schätzungsweise 40 % oder mehr der Bevölkerung. Legasthenie allein betrifft über 25 %. Und digitaler Text ist ein Albtraum für Menschen mit skotopischer Empfindlichkeit. Ich habe auch eine Konvergenz im rechten Auge, deren Ursache man nicht feststellen kann, da meine Netzhaut intakt ist. Doch ich habe eine bessere Sehkraft als 20/20.
Wenn ich auf meinem Android farbigen Text betrachte, erscheint er je nach Farbe nach vorne oder hinten zu springen, was einen seltsamen 3D-Effekt erzeugt, wenn ich Text oder Grafiken auf mobilen Bildschirmen betrachte (nicht auf dem PC). Und farbiger Text auf farbigem Hintergrund (wie Schaltflächen) ist noch schlimmer. Außerdem verstärkt ein dunkler Hintergrund den 3D-Effekt noch mehr. Rot und elektrisches oder königliches Blau sind sehr, sehr ermüdend für die Augen, aber die meisten Nachrichtenportale verwenden diese Farben. Ich erlebe auch „Flüsse“ und nehme Formen in Texten oder Bildern wahr und sehe Wellenlinien und „marschierende“ Buchstaben. Serifenschrift wie Times ist ein Albtraum zu lesen. Und normale fette Schrift ist schlecht. Und Text auf „Blocksatz“ auszurichten, ist schrecklich. Zentrierter Text ist auch schlecht, wenn ein Absatz mit umbrechenden Zeilen vorhanden ist.
Daher schätze ich es, wenn Menschen visuelle Aspekte bei der Entwicklung ihrer Schriftarten berücksichtigen. Es macht einen Unterschied, wenn die Leute Inhalte leicht lesen können. Dies ist eine Angelegenheit, die viele Webentwickler als selbstverständlich betrachten. Ich quäle mich nicht, um Inhalte von einer Website zu lesen, die lächerliche Schriftarten für den Fließtext verwendet oder kein Schriftartenset verwendet, das eingebaute Gewichte hat – oder bei Bedarf Kursivschrift. Leute, die das nicht erleben, denken, dass 99 % der Benutzer perfekte Sicht haben. Wenn man Presbyopie, Myopie, Hyperopie, Retinopathien, Makulaprobleme zu Legasthenie, skotopischer Empfindlichkeit und schwacher Sehkraft hinzufügt, haben weit über die Hälfte der menschlichen Bevölkerung mindestens eine, wenn nicht mehrere visuelle Herausforderungen.