Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:m291:learningunits:lu05:theorie:c_accessibility [2026/03/08 21:08] – gkoch | de:modul:m291:learningunits:lu05:theorie:c_accessibility [2026/03/08 22:22] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== LU05c – Accessibility Basics (A11y) ====== | ====== LU05c – Accessibility Basics (A11y) ====== | ||
| - | < | + | {{: |
| - | **Weiterführende | + | |
| + | < | ||
| + | **Weiterführende | ||
| </ | </ | ||
| Zeile 18: | Zeile 20: | ||
| Eine schlecht zugängliche Website kann für jemanden, der einen Screenreader benutzt, komplett unbenutzbar sein – genau wie eine fehlende Rampe jemanden im Rollstuhl ausschliesst. | Eine schlecht zugängliche Website kann für jemanden, der einen Screenreader benutzt, komplett unbenutzbar sein – genau wie eine fehlende Rampe jemanden im Rollstuhl ausschliesst. | ||
| + | |||
| ==== Warum ist A11y wichtig? ==== | ==== Warum ist A11y wichtig? ==== | ||
| + | |||
| + | {{: | ||
| Barrierefreiheit ist kein «Nice-to-have» mehr – sie ist aus drei Gründen relevant: | Barrierefreiheit ist kein «Nice-to-have» mehr – sie ist aus drei Gründen relevant: | ||
| Zeile 30: | Zeile 35: | ||
| ===== WCAG – Der internationale Standard ===== | ===== WCAG – Der internationale Standard ===== | ||
| - | Die **Web Content Accessibility Guidelines (WCAG)** werden vom World Wide Web Consortium (W3C) entwickelt und gelten als internationaler Goldstandard für digitale Barrierefreiheit. Sie bieten Entwickler: | + | {{youtube> |
| - | ==== Konformitätsstufen ==== | + | Die **Web Content Accessibility Guidelines (WCAG)** werden vom World Wide Web Consortium (W3C) entwickelt und gelten als internationaler Standard für digitale Barrierefreiheit. Sie bieten Entwickler: |
| - | ^ Stufe ^ Bedeutung ^ Einsatz ^ | ||
| - | | **A** | Mindestanforderungen | Ohne diese ist die Nutzung fast unmöglich | | ||
| - | | **AA** | Internationaler Standard | Pflicht für Unternehmen und öffentliche Stellen | | ||
| - | | **AAA** | Höchste Stufe | Oft schwer vollständig umsetzbar | | ||
| - | |||
| - | Für die meisten Projekte gilt **Stufe AA** als Ziel. | ||
| ==== POUR – Die vier Grundprinzipien ==== | ==== POUR – Die vier Grundprinzipien ==== | ||
| + | |||
| + | {{: | ||
| Die WCAG sind um vier Grundprinzipien aufgebaut, die unter dem Kürzel **POUR** zusammengefasst werden: | Die WCAG sind um vier Grundprinzipien aufgebaut, die unter dem Kürzel **POUR** zusammengefasst werden: | ||
| === 1. Wahrnehmbarkeit (Perceivable) === | === 1. Wahrnehmbarkeit (Perceivable) === | ||
| + | |||
| + | {{: | ||
| Inhalte müssen für Augen, Ohren oder Screenreader erkennbar sein. | Inhalte müssen für Augen, Ohren oder Screenreader erkennbar sein. | ||
| * Bilder brauchen aussagekräftige '' | * Bilder brauchen aussagekräftige '' | ||
| - | * Videos benötigen Untertitel | + | * Videos benötigen Untertitel |
| * Texte müssen ausreichend Kontrast zum Hintergrund haben (Mindest-Verhältnis: | * Texte müssen ausreichend Kontrast zum Hintergrund haben (Mindest-Verhältnis: | ||
| === 2. Bedienbarkeit (Operable) === | === 2. Bedienbarkeit (Operable) === | ||
| + | |||
| + | {{: | ||
| Die Website muss ohne Maus – also nur mit Tastatur oder Sprachsteuerung – vollständig nutzbar sein. | Die Website muss ohne Maus – also nur mit Tastatur oder Sprachsteuerung – vollständig nutzbar sein. | ||
| Zeile 62: | Zeile 67: | ||
| === 3. Verständlichkeit (Understandable) === | === 3. Verständlichkeit (Understandable) === | ||
| + | |||
| + | {{: | ||
| Sprache und Aufbau müssen logisch und vorhersehbar sein. | Sprache und Aufbau müssen logisch und vorhersehbar sein. | ||
| Zeile 70: | Zeile 77: | ||
| === 4. Robustheit (Robust) === | === 4. Robustheit (Robust) === | ||
| + | |||
| + | {{: | ||
| Inhalte müssen auf verschiedenen Geräten und mit Hilfstechnologien (Screenreader, | Inhalte müssen auf verschiedenen Geräten und mit Hilfstechnologien (Screenreader, | ||
| Zeile 79: | Zeile 88: | ||
| ===== Screenreader ===== | ===== Screenreader ===== | ||
| - | Ein **Screenreader** ist ein Hilfsprogramm, | + | Ein **Screenreader** ist ein Hilfsprogramm, |
| - | + | ||
| - | ^ Screenreader ^ Plattform ^ Kosten ^ | + | |
| - | | **VoiceOver** | macOS / iOS | integriert | + | |
| - | | **NVDA** | Windows | + | |
| - | | **JAWS** | Windows | kostenpflichtig | | + | |
| - | | **TalkBack** | Android | integriert (kostenlos) | | + | |
| - | + | ||
| - | ==== Live-Demo: Alarado Landingpage mit VoiceOver ==== | + | |
| - | + | ||
| - | In der Lektion demonstrieren wir, was ein Screenreader auf der Alarado Landingpage vorliest. Die Beobachtungen: | + | |
| - | * **Navigation: | ||
| - | * **Buttons: | ||
| - | * **Dark-/ | ||
| Zeile 108: | Zeile 104: | ||
| * Für Screenreader als «Schaltfläche» erkennbar | * Für Screenreader als «Schaltfläche» erkennbar | ||
| - | Ein '' | ||
| - | <code html> | + | < |
| - | <!-- ❌ Nicht barrierefrei ohne viel Zusatzarbeit --> | + | |
| - | <div onclick=" | + | |
| - | + | ||
| - | <!-- ✅ Semantisch korrekt – sofort barrierefrei --> | + | |
| - | <button onclick=" | + | |
| - | </ | + | |
| - | + | ||
| - | < | + | |
| **Erste ARIA-Regel: | **Erste ARIA-Regel: | ||
| </ | </ | ||
| + | |||
| Zeile 127: | Zeile 115: | ||
| ARIA ist eine Sammlung von HTML-Attributen, | ARIA ist eine Sammlung von HTML-Attributen, | ||
| + | <WRAP center round box 80%> | ||
| **Drei ARIA-Konzepte: | **Drei ARIA-Konzepte: | ||
| Zeile 133: | Zeile 122: | ||
| | **Zustand** | '' | | **Zustand** | '' | ||
| | **Eigenschaft** | '' | | **Eigenschaft** | '' | ||
| + | </ | ||
| Zeile 140: | Zeile 130: | ||
| Im HTML setzen wir '' | Im HTML setzen wir '' | ||
| + | <WRAP center round box 80%> | ||
| <code html> | <code html> | ||
| <button class=" | <button class=" | ||
| Zeile 149: | Zeile 139: | ||
| </p> | </p> | ||
| </ | </ | ||
| + | </ | ||
| **Was der Screenreader vorliest:** | **Was der Screenreader vorliest:** | ||
| Zeile 154: | Zeile 145: | ||
| * Aufgeklappt: | * Aufgeklappt: | ||
| - | Im JavaScript aktualisieren wir '' | ||
| - | |||
| - | <code javascript> | ||
| - | buttons.forEach((button) => { | ||
| - | button.addEventListener(' | ||
| - | const btn = e.currentTarget; | ||
| - | const panelElement = btn.nextElementSibling; | ||
| - | const panelIsOpen | ||
| - | |||
| - | // Alle Panels schliessen + aria-expanded zurücksetzen | ||
| - | buttons.forEach((andererBtn) => { | ||
| - | andererBtn.nextElementSibling.classList.remove(' | ||
| - | andererBtn.setAttribute(' | ||
| - | }); | ||
| - | |||
| - | // Dieses Panel öffnen | ||
| - | if (!panelIsOpen) { | ||
| - | panelElement.classList.add(' | ||
| - | btn.setAttribute(' | ||
| - | } | ||
| - | }); | ||
| - | }); | ||
| - | </ | ||
| ===== Tastaturbedienbarkeit ===== | ===== Tastaturbedienbarkeit ===== | ||
| Zeile 182: | Zeile 150: | ||
| Nicht alle Nutzenden arbeiten mit einer Maus. Menschen mit motorischen Einschränkungen, | Nicht alle Nutzenden arbeiten mit einer Maus. Menschen mit motorischen Einschränkungen, | ||
| - | ^ Taste ^ Aktion ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | Pfeiltasten | Navigation innerhalb von Komponenten | | ||
| - | |||
| - | ==== Focus-Styles nicht entfernen! ==== | ||
| - | |||
| - | Der sichtbare Fokusrahmen ('' | ||
| - | |||
| - | <code css> | ||
| - | /* ❌ Nie so – macht Tastaturnavigation unsichtbar */ | ||
| - | button: | ||
| - | outline: none; | ||
| - | } | ||
| - | |||
| - | /* ✅ Eigenes Design anbieten, aber nie einfach weglassen */ | ||
| - | button: | ||
| - | outline: 3px solid var(--violet-600); | ||
| - | outline-offset: | ||
| - | border-radius: | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | <WRAP tip> | ||
| - | **'': | ||
| - | </ | ||
| Zeile 215: | Zeile 155: | ||
| ==== Das Problem ==== | ==== Das Problem ==== | ||
| + | <WRAP center round box 80%> | ||
| Im Alarado-Projekt wurde der ''< | Im Alarado-Projekt wurde der ''< | ||
| Zeile 226: | Zeile 166: | ||
| Das entfernt das Eingabefeld **komplett** aus dem Accessibility Tree. Screenreader und Tastaturnavigation überspringen den Switch – er ist für Nutzende von Hilfstechnologien unsichtbar und nicht bedienbar. | Das entfernt das Eingabefeld **komplett** aus dem Accessibility Tree. Screenreader und Tastaturnavigation überspringen den Switch – er ist für Nutzende von Hilfstechnologien unsichtbar und nicht bedienbar. | ||
| + | </ | ||
| ==== Das HTML im Alarado-Projekt ==== | ==== Das HTML im Alarado-Projekt ==== | ||
| + | <WRAP center round box 80%> | ||
| <code html> | <code html> | ||
| <label class=" | <label class=" | ||
| Zeile 236: | Zeile 177: | ||
| </ | </ | ||
| </ | </ | ||
| + | </ | ||
| ==== Die Lösung: Visuell verstecken, aber zugänglich halten ==== | ==== Die Lösung: Visuell verstecken, aber zugänglich halten ==== | ||
| Statt '' | Statt '' | ||
| + | <WRAP center round box 80%> | ||
| <code css> | <code css> | ||
| /* Visuell versteckt, aber für Screenreader sichtbar */ | /* Visuell versteckt, aber für Screenreader sichtbar */ | ||
| Zeile 290: | Zeile 232: | ||
| * «Dark Mode aktivieren, Schalter, ausgeschaltet» | * «Dark Mode aktivieren, Schalter, ausgeschaltet» | ||
| * Nach Klick: «Dark Mode aktivieren, Schalter, eingeschaltet» | * Nach Klick: «Dark Mode aktivieren, Schalter, eingeschaltet» | ||
| + | </ | ||
| ===== A11y-Grundsätze für jedes Projekt ===== | ===== A11y-Grundsätze für jedes Projekt ===== | ||