css-orientation-lock
CSS darf die Seite nicht auf eine einzige Ausrichtung festlegen
Prüft, dass keine @media (orientation: portrait|landscape)-Regel ein transform: rotate(...) auf die Seite anwendet, eine bekannte Technik, um die Geräteausrichtung auszuhebeln, und fragt bei jeder solchen Regel nach, die den Hauptinhalt der Seite ausblendet.
Anwendbarkeit. Jedes zugängliche Stylesheet (im selben Dokument, nicht Cross-Origin): Inline-<style>-Blöcke und bereits in document.styleSheets geladene <link>-Stylesheets desselben Ursprungs, vom Dokument übernommene (adopted) Stylesheets und die jedes offenen Shadow Root, deren Regeln mit den Elementen dieses Roots abgeglichen werden.
Erwartung. Kein @media (orientation: portrait)- oder @media (orientation: landscape)-Block setzt eine Drehung per transform/-webkit-transform/rotate um etwa 90 Grad (mod 180, also ~90 oder ~270). Das ist die bekannte Technik, um visuell eine Ausrichtung zu erzwingen, unabhängig von der tatsächlichen Ausrichtung des Geräts, und sie hebelt die Anforderung von WCAG 1.3.4 aus, dass Inhalte ihre Darstellung nicht auf eine einzige Bildschirmausrichtung beschränken, sofern diese nicht wesentlich ist. Eine solche Drehung wird an den sichtbaren Elementen beurteilt, auf die ihr Selektor passt (ACT b33eff), wobei die Sichtbarkeit ohne die Drehung selbst beurteilt wird: Sie ergibt fail, wo eines davon den Inhalt der Seite enthält (wie unten für ausgeblendete Inhalte definiert), und zu jedem anderen so gedrehten Element wird nachgefragt (cantTell): Ein Pfeil, der in der einen Ausrichtung auf ein Panel daneben und in der anderen auf eines darunter zeigt, sperrt nichts. Eine Regel, die kein sichtbares Element oder nur ein Pseudo-Element dreht, hat nichts zu beurteilen. Eine zweite Form wird nachgefragt (cantTell): ein Ausrichtungs-Media-Block, der den Inhalt der Seite mit display: none oder visibility: hidden ausblendet, die übliche Form von WCAG F100 (Inhalt in einer Ausrichtung durch eine Meldung wie „rotate your device“ ersetzt). Das ausgeblendete Element gilt als Inhalt der Seite, wenn es html oder body ist, die main-Landmark, ein Vorfahre davon oder, auf einer Seite ohne main-Landmark, ein Element, das mindestens die Hälfte des Textes im body enthält. Hat die Seite weder ein <main> noch role="main", ist ein Custom Element, dem seine ElementInternals die Rolle main geben (this.attachInternals().role), die main-Landmark. Ob die Ausrichtung wesentlich ist und ob die Seite nutzbar bleibt, entscheidet eine Person.
Was ein Befund meldet.
mediaText(eine Drehung oder ausgeblendeter Inhalt): die Media Query, die die Regel enthält, etwa(orientation: portrait). Eine Drehung eines Elements, das nicht den Inhalt der Seite enthält, wird für dieses Element gemeldet (ORIENTATION_MEDIA_ROTATES_ELEMENT).selectorText(eine Drehung oder ausgeblendeter Inhalt): der Selektor der Stilregel, die dreht oder ausblendet. Leer, wenn er sich nicht lesen ließ.unreadableSheetCount(STYLESHEETS_NOT_READABLE): wie viele Stylesheets sich nicht lesen ließen, meist weil sie von einer anderen Herkunft stammen.
Diese Felder in data.details helfen, einen Befund zu lesen und zu reproduzieren. Außer reasonCode und den wenigen Feldern, die Ausgabeschema als stabil nennt, sind sie kein stabiler Vertrag: Ein Feld kann in einer Minor-Version umbenannt werden oder wegfallen, bauen Sie also nicht darauf auf.
Beispiele
<html><head><title>Page title</title><style>body { background: #fff; }</style></head><body>Hi</body></html>
Keine Media Query zur Ausrichtung dreht die Seite.
<html><head><title>Page title</title><style>@media (orientation: landscape) {body { transform: rotate(90deg); }}</style></head><body>Hi</body></html>
Eine Media Query für das Querformat erzwingt eine Drehung um 90 Grad und legt die Seite unabhängig von der Geräteausrichtung auf das Hochformat fest.
So prüfen Sie es
Wenn diese Regel nicht entscheiden kann, meldet sie cantTell und überlässt die Frage einer Person. Jede Frage, die sie stellen kann, steht hier unter ihrem Reason-Code, mit den Schritten, um sie zu beantworten. Ein Befund enthält dieselben Schritte in howToCheck, in der Sprache des Scans. Siehe Ausgabeschema.
ORIENTATION_MEDIA_HIDES_CONTENT
- Betrachten Sie die Seite mit der Gerätesymbolleiste der Entwicklertools oder einem echten Gerät im Hochformat und dann im Querformat.
- Prüfen Sie in der im Bericht genannten Ausrichtung, was verborgen und was stattdessen angezeigt wird.
- Prüfen Sie, ob dieselben Inhalte und Funktionen weiterhin verfügbar sind, etwa über ein anderes Layout.
- Entscheiden Sie, ob eine Ausrichtung wesentlich ist (etwa bei einer Klavier-App oder dem Foto eines Bankschecks).
Bestanden. Die Inhalte bleiben in beiden Ausrichtungen verfügbar, oder eine einzelne Ausrichtung ist wesentlich.
Nicht bestanden. Inhalte werden verborgen und stattdessen erscheint etwa die Meldung „Drehen Sie Ihr Gerät“, sodass die Seite in dieser Ausrichtung unbenutzbar ist; das verstößt gegen WCAG 1.3.4 (F100).
ORIENTATION_MEDIA_ROTATES_ELEMENT
- Suchen Sie das im Bericht genannte Element und notieren Sie, was es ist (ein Symbol, ein Banner, ein Panel, ein Teil des Inhalts).
- Betrachten Sie die Seite mit der Gerätesymbolleiste der Entwicklertools oder einem echten Gerät im Hochformat und dann im Querformat.
- Prüfen Sie, ob sich das Element in einer Ausrichtung zur Seite dreht und ob Inhalte dadurch schwer zu lesen oder zu bedienen sind.
Bestanden. Das gedrehte Element ist klein oder dekorativ, und alle Inhalte lassen sich in beiden Ausrichtungen lesen und bedienen.
Nicht bestanden. Inhalte drehen sich in einer Ausrichtung zur Seite, sodass sie nicht normal gelesen oder bedient werden können; das verstößt gegen WCAG 1.3.4 (ACT b33eff).
STYLESHEETS_NOT_READABLE
- Betrachten Sie die Seite mit der Gerätesymbolleiste der Entwicklertools oder einem echten Gerät im Hochformat.
- Wechseln Sie ins Querformat und laden Sie neu; wechseln Sie dann zurück.
- Prüfen Sie in jeder Ausrichtung, dass alle Inhalte aufrecht angezeigt werden, lesbar sind und nicht durch eine Meldung wie „Drehen Sie Ihr Gerät“ ersetzt werden.
Bestanden. Die Seite zeigt ihre Inhalte aufrecht und funktioniert in beiden Ausrichtungen.
Nicht bestanden. Die Seite ist auf eine Ausrichtung festgelegt (Inhalte verborgen, zur Seite gedreht oder durch eine Meldung ersetzt); das verstößt gegen WCAG 1.3.4.