Das Entwicklungsteam von Medium hat einige schlechte Praktiken besprochen, die die Barrierefreiheit beeinträchtigen. In einem Beispiel argumentieren sie, dass opacity von Screenreadern nicht gut unterstützt wird und dass wir daher immer das Attribut visibility verwenden sollten, wenn wir ein Element in einer Übergangssequenz ausblenden wollen.
.m-fadeOut {
visibility: hidden;
opacity: 0;
transition: visibility 0s linear 300ms, opacity 300ms;
}
.m-fadeIn {
visibility: visible;
opacity: 1;
transition: visibility 0s linear 0s, opacity 300ms;
}
Denken Sie daran, dass opacity und visibility ein Element immer noch im Dokumentenfluss belassen. Wenn Sie es aus dem Fluss entfernen müssen, gibt es noch mehr zu tun. Tatsächlich gibt es eine Möglichkeit, darüber nachzudenken...
| kann Dinge unsichtbar machen | kann Dinge unklickbar machen | wird aus dem Dokumentenfluss entfernt | kann animiert werden | kann auf Kindelemente umgekehrt werden | |
|---|---|---|---|---|---|
| opacity | ja | nein | nein | ja | nein |
| visibility | ja | ja | nein | ja | ja |
| display | ja | ja | ja | nein | nein |
| pointer-events | nein | ja | nein | nein | nein |
Wenn Sie den `display`-Wert eines Elements nach einem Ausblenden ändern müssen, ist das schwieriger. In CSS nicht wirklich möglich, da display nicht animierbar ist. Snook hat darüber geschrieben, einschließlich einiger JavaScript-Hilfen.
Ich hatte das gleiche Problem für meinen barrierefreien Karussell http://a11y.nicolas-hoffmann.net/carrousel/: Ich musste erkennen, wann der Übergang beendet war, um Klassen auf „versteckte“ Inhalte anzuwenden.
Manchmal ist es eine echte Qual, das zu managen :-\
Das gilt nicht nur für Screenreader, sondern auch für die Tastaturfokus-Navigation.
In dieser Tabelle sollte eine weitere Spalte stehen
kann Dinge unfokussierbar machen
opacity
nein
visibility
ja
display
ja
pointer-events
nein
(Markdown-Tabellenfehler, hier ein Codeblock)
Obwohl außerhalb des Rahmens des Ausblendens eines Elements, habe ich einen (ehrlichen) Fehler gefunden
Tatsächlich kann die Deckkraft für die Kindelemente deaktiviert werden, wenn der Zielbrowser Unterstützung für die CSS-Eigenschaften background-blend-mode, mix-blend-mode und isolation hat.
Diese haben jedoch eine sehr begrenzte Unterstützung; ältere Browser werden Probleme haben.
Ich bin etwas spät dran, aber in der Tabelle sollte stehen, dass visibility nicht animiert werden kann, da ein Element entweder vollständig sichtbar oder nicht sichtbar sein kann (es gibt keine „halbsichtbaren“ Elemente). Das Einzige, was wir tun können, ist die Verwendung einer `transition-delay`, die nicht genau dasselbe ist wie das Animieren der Sichtbarkeit.
Guter Beitrag, versuchen Sie, eine nächste Zurück-Schaltfläche hinzuzufügen, um zum nächsten Beitrag zu gelangen. Hier ist es sehr schwierig, Ihre Beiträge zu finden.
Es scheint, dass Sie die `transition-delay` nicht mehr für korrektes Ein- und Ausblenden benötigen – siehe Link für eine Demo (getestet in Chrome und Firefox) – hat jemand Informationen dazu?
Ja, es gibt einen Trick, den ich jetzt oft verwende: `visibility` kann verzögert angewendet werden, um am Ende der Übergangssequenz zu erfolgen.
Beispiel hier: https://van11y.net/accessible-hide-show/
Im Grunde werden die Inhalte am Ende der Übergangssequenz mit `visibility: hidden` „versteckt“.
Leider meldet PageSpeed Insights, dass `visibility` nicht kombinierbar ist https://github.com/GoogleChrome/lighthouse/issues/11658
obwohl es IE8 und älter nicht unterstützt,
`pointer-events: none;` ist meiner Meinung nach in Ordnung zu verwenden, oder `z-index: -1`
Übrigens funktioniert die Code-Einbindung auf dieser Website nicht richtig.