Produktbilder und Galerien barrierefrei gestalten
A11Y
WCAG
Barrierefreiheit · Produktgalerien · Bildzoom · Frontend
Produktbilder und Galerien barrierefrei gestalten
Tastaturbedienung, Live-Ankündigungen und Alt-Text ohne Redundanz

Produktgalerien mit mehreren Bildern, Zoom-Funktion und Karussell-Navigation gehören zu den komplexesten Bausteinen einer Produktseite. Wer nur Alt-Text ergänzt, aber Tastaturbedienung, Fokus-Management und Ankündigungen für Screenreader vergisst, baut eine Galerie, die für viele Nutzergruppen unbedienbar bleibt. Dieser Beitrag zeigt ein vollständiges, praxiserprobtes Muster für barrierefreie Produktgalerien in Magento und Hyvä.

16 Min. Lesezeit Tastatur · ARIA Live · Alt-Text · Fokus-Management Magento 2.4.8 · Hyvä Theme · WCAG 2.2

1. Warum Produktgalerien eine eigene Zugänglichkeitsherausforderung sind

Eine Produktgalerie ist selten nur eine Ansammlung von Bildern. Sie kombiniert mehrere zusammenhängende Aufnahmen, ein Karussell mit vor und zurück blätternden Steuerelementen, eine Thumbnail-Leiste zur Direktauswahl und häufig eine Zoom- oder Lightbox-Funktion für Detailansichten. Jede dieser Komponenten bringt eigene Anforderungen mit: Bilder brauchen aussagekräftigen Alt-Text nach WCAG-Kriterium 1.1.1, das Karussell muss vollständig mit der Tastatur bedienbar sein nach Kriterium 2.1.1, Statusänderungen wie ein Bildwechsel müssen nach Kriterium 4.1.3 auch ohne Fokuswechsel angekündigt werden, und automatisch wechselnde Bilder benötigen nach Kriterium 2.2.2 eine Pause-Funktion.

In der Praxis wird meist nur ein Teilaspekt gelöst, üblicherweise der Alt-Text, während Tastaturbedienung und Ankündigungen komplett fehlen. Das Ergebnis: Ein Screenreader-Nutzer hört zwar eine Bildbeschreibung, kann aber nicht zum nächsten Bild wechseln, weil die Pfeil-Buttons nicht fokussierbar sind. Ein sehender Tastaturnutzer ohne Maus erreicht den Zoom-Button nicht, weil er nur per Mausklick sichtbar wird. Ein Nutzer mit vestibulärer Störung wird von einem automatisch weiterlaufenden Karussell irritiert, das sich nicht anhalten lässt. Die folgenden Abschnitte lösen jedes dieser Teilprobleme einzeln und fügen sie am Ende zu einem vollständigen Muster für Magento und Hyvä zusammen.

2. Tastaturbedienbare Galerie- und Zoom-Widgets

Der Grundfehler bei den meisten Galerie-Implementierungen: Vor- und Zurück-Pfeile werden als <div> oder <span> mit onclick-Handler gebaut, statt als echte <button>-Elemente. Damit sind sie weder per Tab erreichbar noch reagieren sie auf Enter oder Leertaste. Die Lösung folgt derselben Regel wie bei jedem anderen interaktiven Element: natives <button> verwenden, dann kommen Fokussierbarkeit und Tastenaktivierung automatisch mit. Zusätzlich sollte die Galerie Pfeiltasten unterstützen, sobald der Fokus innerhalb des Karussells liegt, damit erfahrene Screenreader- und Tastaturnutzer nicht bei jedem Bildwechsel erneut zum Steuerungs-Button tabben müssen.

Der Zoom-Trigger verdient besondere Aufmerksamkeit, weil er häufig nur als vergrößertes Cursor-Icon beim Hover implementiert wird, ganz ohne fokussierbares Element. Ein barrierefreier Zoom-Trigger ist ein eigener <button> mit erkennbarem Text oder aria-label, der auf Enter und Leertaste reagiert und beim Öffnen den Fokus zuverlässig in den Zoom-Dialog verschiebt. Wichtig ist außerdem, dass das Hauptbild selbst niemals der alleinige Klick-Trigger ohne Tastaturzugang bleibt, sonst bleibt Zoom für Tastaturnutzer komplett unerreichbar.


<!-- WRONG: Pfeile und Zoom nur per Maus erreichbar -->
<div class="gallery-arrow" onclick="nextImage()">
  <svg aria-hidden="true">...</svg>
</div>
<img src="produkt-2.jpg" alt="Produkt" onclick="openZoom()">

<!-- RIGHT: echte Buttons, tastaturbedienbar, mit Beschriftung -->
<div class="relative" role="group" aria-label="Produktbilder-Navigation">
  <img id="hero-image" src="produkt-2.jpg" alt="Sneaker Modell Aurora, Frontansicht">

  <button type="button" class="gallery-arrow gallery-arrow--prev"
          aria-label="Vorheriges Bild" @click="prevImage()">
    <svg aria-hidden="true" focusable="false">...</svg>
  </button>
  <button type="button" class="gallery-arrow gallery-arrow--next"
          aria-label="Nächstes Bild" @click="nextImage()">
    <svg aria-hidden="true" focusable="false">...</svg>
  </button>

  <button type="button" class="gallery-zoom-trigger"
          aria-label="Bild vergrößern" @click="openZoom()">
    <svg aria-hidden="true" focusable="false">...</svg>
    <span class="sr-only">Vergrößern</span>
  </button>
</div>

3. Bildwechsel im Karussell für Screenreader ankündigen

Ein visueller Bildwechsel im Karussell ist für sehende Nutzer sofort erkennbar, für Screenreader-Nutzer bleibt er dagegen unbemerkt, solange der Fokus nicht auf dem neuen Bild liegt. Genau dafür ist eine aria-live-Region gedacht: Ein unsichtbarer, aber im Accessibility Tree vorhandener Bereich, dessen Textänderung dem Screenreader automatisch vorgelesen wird, ohne dass sich der Fokus bewegt. Für einen Bildwechsel eignet sich aria-live="polite", weil die Ankündigung warten kann, bis der Screenreader eine Sprechpause hat, ein abrupt unterbrechendes assertive wäre hier unangemessen aufdringlich.

Wichtig ist die Balance zwischen Informationsgehalt und Geschwätzigkeit: Die Ankündigung sollte die Position im Set und eine kurze Beschreibung enthalten, etwa "Bild 3 von 8: Detailansicht Sohle", aber nicht den vollständigen Alt-Text jedes Mal wiederholen. Bei schnellem Durchklicken mehrerer Bilder sollte die Ankündigung debounced werden, damit nicht jede Zwischenposition einzeln vorgelesen wird und den Nutzer mit einer Kaskade von Ansagen überflutet. aria-atomic="true" stellt sicher, dass immer der komplette Textinhalt der Region neu vorgelesen wird, nicht nur das geänderte Fragment.


// Debounced live-region announcement for gallery position changes
let announceTimeout = null;

function announceImageChange(index, total, shortLabel) {
  clearTimeout(announceTimeout);

  // Wait briefly so rapid arrow presses only announce the final position
  announceTimeout = setTimeout(() => {
    const region = document.getElementById('gallery-live-region');
    region.textContent = `Bild ${index + 1} von ${total}: ${shortLabel}`;
  }, 300);
}

// Usage inside the gallery controller
function nextImage() {
  activeIndex = (activeIndex + 1) % images.length;
  announceImageChange(activeIndex, images.length, images[activeIndex].shortLabel);
}

Die Live-Region selbst gehört fest in das Markup, nicht dynamisch per JavaScript nachträglich eingefügt, weil manche Screenreader neu eingefügte Live-Regionen nicht zuverlässig erkennen. Ein leeres <div aria-live="polite" aria-atomic="true" class="sr-only"></div> direkt im initialen HTML der Galerie ist die robusteste Variante.

4. Alt-Text-Strategie für Produktgalerien ohne Redundanz

Der häufigste Alt-Text-Fehler bei Produktgalerien ist Redundanz: Jedes Bild bekommt denselben Alt-Text wie das erste, meist den vollständigen Produktnamen, manchmal ergänzt um "Bild 1", "Bild 2". Für einen Screenreader-Nutzer, der sich durch acht Bilder eines Sneakers klickt, bedeutet das acht Mal denselben Produktnamen zu hören, ohne zu erfahren, was das jeweilige Bild tatsächlich zeigt. Die bessere Strategie: Das erste Bild bekommt den vollständigen, beschreibenden Alt-Text mit Produktname und Hauptansicht, jedes weitere Bild beschreibt ausschließlich, was es zusätzlich oder anders zeigt, etwa die Perspektive, das Detail oder die Farbvariante.

Die Position im Set, "Bild 3 von 8", gehört nicht in den Alt-Text selbst, sondern in die Live-Region oder in ein separates aria-label am Thumbnail-Button, sonst wird sie bei jedem Bildaufruf redundant mitgelesen. Rein dekorative Zusatzelemente innerhalb der Galerie, etwa ein Badge-Icon "Neu" oder ein Wasserzeichen, erhalten alt="", damit sie im Accessibility Tree als reine Dekoration markiert sind und nicht vorgelesen werden. Produktvarianten-Bilder, etwa dieselbe Ansicht in unterschiedlichen Farben, sollten die Farbe explizit im Alt-Text benennen, weil sie sich visuell oft nur durch die Farbe unterscheiden.


<!-- WRONG: identischer, redundanter Alt-Text bei jedem Bild -->
<img src="sneaker-1.jpg" alt="Sneaker Aurora">
<img src="sneaker-2.jpg" alt="Sneaker Aurora">
<img src="sneaker-3.jpg" alt="Sneaker Aurora">
<img src="sneaker-4.jpg" alt="Sneaker Aurora, Bild 4">

<!-- RIGHT: erstes Bild vollständig, weitere Bilder differenzierend -->
<img src="sneaker-1.jpg" alt="Sneaker Modell Aurora in Anthrazit, Frontansicht">
<img src="sneaker-2.jpg" alt="Rückansicht mit Fersenlogo">
<img src="sneaker-3.jpg" alt="Detailansicht der Sohle und Profilstruktur">
<img src="sneaker-4.jpg" alt="Seitliche Ansicht, am Fuß getragen">

<!-- Dekoratives Badge: leerer Alt-Text -->
<img src="badge-neu.svg" alt="" class="absolute top-2 left-2">

<!-- Farbvariante: Farbe explizit benennen -->
<img src="sneaker-blau-1.jpg" alt="Sneaker Modell Aurora in Ozeanblau, Frontansicht">

5. Thumbnail-Navigation: Rollen, Zustände und Fokus-Reihenfolge

Für die Thumbnail-Leiste stellt sich regelmäßig die Frage, ob eine explizite ARIA-Rolle wie role="listbox" mit role="option"-Kindern nötig ist. In den meisten Fällen ist die Antwort nein: Eine Gruppe schlichter <button>-Elemente mit aria-current="true" auf dem aktiven Thumbnail erreicht dieselbe Zugänglichkeit mit deutlich weniger Implementierungsaufwand und ohne das vollständige Tastaturverhalten eines Listbox-Patterns nachbauen zu müssen. aria-current ist speziell für genau diesen Fall gedacht: ein Element als aktuell aktiv innerhalb einer Menge verwandter Elemente zu markieren, ohne eine komplexe Widget-Rolle zu benötigen.

Für die Fokus-Reihenfolge empfiehlt sich das Roving-Tabindex-Muster: Nur der aktuell aktive Thumbnail-Button erhält tabindex="0", alle anderen tabindex="-1", die Navigation zwischen den Thumbnails erfolgt per Pfeiltasten. So muss ein Tastaturnutzer nicht durch acht einzelne Thumbnail-Buttons tabben, um zum eigentlichen Seiteninhalt danach zu gelangen, sondern verlässt die Gruppe mit einem einzigen Tab-Schritt. Der Alt-Text jedes Thumbnail-Bildes sollte identisch mit dem zugehörigen Hauptbild sein, während die Positionsinformation separat über aria-label am Button ergänzt wird, etwa aria-label="Bild 3 von 8 anzeigen: Detailansicht Sohle".

6. Zoom und Lightbox: Fokus-Falle vermeiden und Fokus zurückgeben

Sobald ein Zoom-Dialog oder eine Lightbox geöffnet wird, muss der Fokus zuverlässig hinein verschoben werden, typischerweise auf den Schließen-Button oder das vergrößerte Bild selbst. Der Dialog braucht role="dialog" und aria-modal="true", damit Screenreader den Rest der Seite als vorübergehend inaktiv behandeln. Innerhalb des geöffneten Dialogs muss der Tab-Fokus auf die enthaltenen interaktiven Elemente begrenzt bleiben, eine sogenannte Fokus-Falle im positiven Sinn: Wer am letzten fokussierbaren Element im Dialog erneut Tab drückt, landet wieder am ersten, nicht draußen im Hintergrund der Seite.

Escape muss den Dialog zuverlässig schließen und den Fokus exakt auf das Element zurückgeben, das den Dialog ursprünglich geöffnet hat, meist den Zoom-Trigger-Button. Ohne diese Fokus-Rückgabe landet der Tastaturfokus nach dem Schließen irgendwo am Seitenanfang, und der Nutzer muss sich komplett neu orientieren. Ein zweiter, unbeabsichtigter Fehler betrifft nativen Pinch-to-Zoom: user-scalable=no oder maximum-scale=1 im Viewport-Meta-Tag verhindert, dass Nutzer mit Sehbehinderung die Seite mit Browser-Bordmitteln vergrößern, und verstößt gegen WCAG-Kriterium 1.4.4. Ein eigener Zoom-Dialog darf den nativen Browser-Zoom niemals ersetzen oder blockieren.


/* Accessible zoom dialog: visible focus, no removed native zoom */
.gallery-zoom-dialog {
  position: fixed;
  inset: 0;
  z-index: 50;
  background: rgba(15, 23, 42, 0.92);
  display: flex;
  align-items: center;
  justify-content: center;
}

.gallery-zoom-dialog:focus-visible,
.gallery-zoom-dialog *:focus-visible {
  outline: 3px solid #f4f4f5;
  outline-offset: 3px;
  border-radius: 4px;
}

.gallery-zoom-close {
  position: absolute;
  top: 1rem;
  right: 1rem;
}

/* Never disable native pinch zoom on the zoomed image */
.gallery-zoom-dialog img {
  touch-action: pinch-zoom;
  max-width: 100%;
  max-height: 90vh;
}

7. Praxisbeispiel: Barrierefreie Produktgalerie für Magento/Hyvä

In einem Hyvä-Theme lässt sich das gesamte Muster in einer einzigen Alpine.js-Komponente bündeln: aktiver Index als reaktiver Zustand, Roving Tabindex für die Thumbnails, eine feste Live-Region für Ankündigungen und ein Dialog mit Fokus-Falle für den Zoom. Der Vorteil gegenüber mehreren separaten Komponenten: Zustand, Fokus-Management und Ankündigung bleiben an einer Stelle synchron, statt in mehreren phtml-Templates auseinanderzudriften und dabei aus dem Takt zu geraten.

Wichtig für die Magento-Integration: Die Alt-Texte sollten bereits im Produkt-Media-Gallery-Datensatz differenziert gepflegt werden, nicht erst im Frontend nachträglich generiert. Ein Attribut wie label pro Bild im Admin-Backend erlaubt genau die in Abschnitt 4 beschriebene, redundanzfreie Alt-Text-Strategie, ohne dass das Template selbst Text generieren muss. Für die Zoom-Funktion empfiehlt sich, den nativen Hyvä-Media-Gallery-Viewer als Basis zu nehmen und ausschließlich Fokus-Management und Live-Region zu ergänzen, statt eine komplett neue Zoom-Bibliothek einzubinden.


<!-- Hyva phtml: accessible product gallery with keyboard, live region and zoom -->
<div x-data="productGallery({
       images: [
         { src: 'sneaker-1.jpg', alt: 'Sneaker Modell Aurora in Anthrazit, Frontansicht' },
         { src: 'sneaker-2.jpg', alt: 'Rückansicht mit Fersenlogo' },
         { src: 'sneaker-3.jpg', alt: 'Detailansicht der Sohle und Profilstruktur' }
       ]
     })" x-init="init()">

  <div class="relative" role="group" aria-label="Produktbilder">
    <img :src="images[active].src" :alt="images[active].alt" class="w-full">

    <button type="button" aria-label="Vorheriges Bild" @click="prev()">‹</button>
    <button type="button" aria-label="Nächstes Bild" @click="next()">›</button>

    <button type="button" aria-label="Bild vergrößern" @click="zoomOpen = true; $nextTick(() => $refs.zoomClose.focus())">
      Vergrößern
    </button>
  </div>

  <!-- Live region: fixed in markup, never inserted dynamically -->
  <div aria-live="polite" aria-atomic="true" class="sr-only" x-text="liveMessage"></div>

  <!-- Thumbnails: roving tabindex, aria-current instead of role=listbox -->
  <div class="flex gap-2 mt-3" role="group" aria-label="Bildauswahl">
    <template x-for="(img, index) in images" :key="index">
      <button type="button"
              :tabindex="index === active ? 0 : -1"
              :aria-current="index === active ? 'true' : 'false'"
              :aria-label="`Bild ${index + 1} von ${images.length} anzeigen: ${img.alt}`"
              @click="select(index)"
              @keydown.arrow-right.prevent="focusNext(index)"
              @keydown.arrow-left.prevent="focusPrev(index)">
        <img :src="img.src" :alt="img.alt" class="w-16 h-16 object-cover">
      </button>
    </template>
  </div>

  <!-- Zoom dialog: focus trap, Escape closes, focus returns to trigger -->
  <div x-show="zoomOpen" x-trap.inert.noscroll="zoomOpen"
       @keydown.escape="zoomOpen = false"
       role="dialog" aria-modal="true" aria-label="Bild vergrößert"
       class="gallery-zoom-dialog">
    <button type="button" x-ref="zoomClose" class="gallery-zoom-close"
            aria-label="Vergrößerung schließen" @click="zoomOpen = false">
      Schließen
    </button>
    <img :src="images[active].src" :alt="images[active].alt">
  </div>
</div>

8. Responsive Bilder, Performance und Barrierefreiheit

Barrierefreiheit und Bildperformance widersprechen sich nicht, sie ergänzen sich, sofern die responsive Bereitstellung sauber umgesetzt ist. srcset und sizes liefern jedem Endgerät die passende Auflösung, ohne dass sich das am Alt-Text oder an der Rollenstruktur etwas ändert, die Barrierefreiheits-Attribute gehören immer an das <img>-Element selbst, unabhängig von der gewählten Bildquelle. loading="lazy" ist für Bilder unterhalb des sichtbaren Bereichs sinnvoll, sollte aber niemals auf dem initial sichtbaren Hero-Bild der Galerie stehen, weil ein verzögert ladendes erstes Bild sowohl den Largest Contentful Paint verschlechtert als auch Screenreader-Nutzer kurzzeitig ohne Bildinhalt zurücklässt.

Die Steuerelemente der Galerie selbst, Pfeile, Zoom-Button und Thumbnail-Rahmen, unterliegen WCAG-Kriterium 1.4.11 für Nicht-Text-Kontrast: Der Kontrast zwischen dem Rand eines Bedienelements und seinem Hintergrund muss mindestens 3:1 betragen, ein sehr dezenter grauer Pfeil auf hellem Bildhintergrund unterschreitet diesen Wert häufig. Für den aktiven Zustand eines Thumbnails reicht eine reine Farbänderung nicht aus, weil Farbe allein kein zuverlässiges Unterscheidungsmerkmal ist, ein zusätzlicher Rahmen oder ein Häkchen-Icon neben der Farbänderung macht den aktiven Zustand auch für Nutzer mit Farbsehschwäche erkennbar.

9. Testen und Galerie-Patterns im Vergleich

Automatisierte Tools wie axe-core finden fehlenden oder leeren Alt-Text zuverlässig, erkennen aber weder eine fehlende Live-Region-Ankündigung noch eine Fokus-Falle im Zoom-Dialog, weil beides erst im tatsächlichen Interaktionsverlauf sichtbar wird. Ein vollständiger Test einer Produktgalerie besteht deshalb immer aus drei Schritten: automatisierte Prüfung mit axe-core oder Lighthouse für strukturelle Fehler, ein kompletter Durchlauf ausschließlich mit der Tastatur ohne Maus, und mindestens ein Durchgang mit einem echten Screenreader wie NVDA oder VoiceOver, um die tatsächlichen Ansagen beim Bildwechsel zu verifizieren.

Aufgabe Unsicher / Falsch Empfohlenes Pattern Vorteil
Bildwechsel ankündigen Kein Hinweis für Screenreader aria-live="polite" mit Position Nutzer weiß, welches Bild aktiv ist
Alt-Text für 8 Bilder Identischer Produktname bei jedem Bild Differenzierender Alt-Text pro Ansicht Kein redundantes Vorlesen
Zoom öffnen onclick ohne Tastaturzugang Button mit Enter/Space und Fokus-Trap Tastaturnutzer erreichen den Zoom
Thumbnail-Navigation Tab durch jedes einzelne Thumbnail Roving Tabindex mit Pfeiltasten Schnellere, erwartungskonforme Navigation
Zoom schließen Fokus verschwindet im Leeren Escape gibt Fokus an Trigger zurück Kein Verlust der Orientierung

Die Tabelle zeigt denselben roten Faden wie bei anderen ARIA-Widgets: Ein einzelnes korrektes Attribut löst nichts, wenn Tastaturverhalten und Fokus-Management fehlen. Ein Zoom-Button mit korrektem aria-label, aber ohne Fokus-Falle im Dialog, ist für Screenreader-Nutzer genauso unbedienbar wie ein Zoom-Button ganz ohne ARIA. Erst das vollständige Zusammenspiel aus Semantik, Tastatur und Ankündigung macht eine Produktgalerie tatsächlich barrierefrei.

Mironsoft

Barrierefreie Produktgalerien und Accessibility-Audits für Magento-Shops

Produktgalerie, die wirklich für alle bedienbar ist?

Wir bauen bestehende Bildkarussells und Zoom-Widgets auf ein vollständiges Barrierefreiheits-Muster um: Tastaturbedienung, Live-Ankündigungen, redundanzfreier Alt-Text und ein Fokus-Management, das im echten Screenreader-Test besteht.

Galerie-Audit

axe-core-Analyse und manuelle Prüfung von Tastatur, Fokus und Live-Regionen

Hyvä-Umsetzung

Alpine.js-Galerie mit Zoom-Dialog, Roving Tabindex und Fokus-Falle

Alt-Text-Strategie

Redundanzfreie Bildbeschreibungen direkt in der Magento Media Gallery pflegen

10. Zusammenfassung

Eine barrierefreie Produktgalerie löst mehrere Teilprobleme gleichzeitig: Tastaturbedienung für Pfeile, Thumbnails und Zoom-Trigger, eine aria-live-Region für Bildwechsel ohne Fokusverschiebung, eine redundanzfreie Alt-Text-Strategie, bei der nur das erste Bild vollständig beschrieben wird, und ein Zoom-Dialog mit korrekter Fokus-Falle und zuverlässiger Fokus-Rückgabe nach dem Schließen. Keines dieser Elemente ersetzt die anderen, erst das vollständige Zusammenspiel macht die Galerie tatsächlich für Tastaturnutzer, Screenreader-Nutzer und Menschen mit Sehbehinderung bedienbar.

Der größte Hebel liegt in der frühzeitigen Alt-Text-Pflege direkt im Magento-Backend, statt sie nachträglich im Frontend zu generieren, und in der konsequenten Nutzung nativer <button>-Elemente statt nachgebauter Klick-Flächen. Automatisierte Tools wie axe-core decken nur den strukturellen Teil ab, ein manueller Test mit Tastatur und echtem Screenreader bleibt für jede Produktgalerie unverzichtbar, bevor sie live geht.

Produktbilder und Galerien barrierefrei gestalten: Das Wichtigste auf einen Blick

Tastatur zuerst

Pfeile, Thumbnails und Zoom-Trigger als echte <button>-Elemente, niemals als <div onclick> ohne Tastaturzugang.

Live-Region für Wechsel

aria-live="polite" mit Position und kurzer Beschreibung, fest im Markup, debounced bei schnellem Klicken.

Alt-Text ohne Redundanz

Erstes Bild vollständig, weitere Bilder differenzierend. Position gehört in aria-label, nicht in den Alt-Text.

Zoom mit Fokus-Falle

role="dialog", aria-modal="true", Escape schließt und gibt Fokus an den Trigger zurück.

11. FAQ: Produktbilder und Galerien barrierefrei

1Warum reicht Alt-Text allein bei Produktgalerien nicht aus?
Alt-Text beschreibt nur das einzelne Bild, löst aber weder Tastaturbedienung noch Ankündigungen bei Bildwechseln noch Fokus-Management im Zoom-Dialog. Alle drei Aspekte werden gleichzeitig gebraucht.
2Wie navigiert man eine Produktgalerie nur mit der Tastatur?
Pfeile und Zoom-Trigger als echte button-Elemente mit Enter/Space-Unterstützung. Pfeiltasten sollten zusätzlich innerhalb des Karussells funktionieren, sobald der Fokus dort liegt.
3Wie sollte ein Bildwechsel für Screenreader angekündigt werden?
Über eine feste aria-live=polite Region mit Position und kurzer Beschreibung, debounced bei schnellem Durchklicken, um eine Ansagen-Kaskade zu vermeiden.
4Wie vermeidet man redundanten Alt-Text bei mehreren Bildern?
Erstes Bild vollständig mit Produktname beschreiben, weitere Bilder nur das differenzierende Detail: Perspektive, Nahaufnahme oder Farbvariante.
5Welche ARIA-Rolle brauchen Thumbnail-Buttons wirklich?
Meist keine komplexe Rolle. Einfache button-Elemente mit aria-current und Roving Tabindex reichen für dieselbe Zugänglichkeit.
6Wie verhindert man eine Fokus-Falle im Zoom-Dialog?
role=dialog und aria-modal=true setzen, Tab-Fokus auf die Dialog-Elemente begrenzen, sodass Tab am letzten Element zum ersten zurückspringt.
7Was passiert mit dem Fokus beim Schließen des Zoom-Dialogs?
Der Fokus muss exakt zum Trigger-Button zurückkehren. Ohne Rückgabe landet er am Seitenanfang und der Nutzer verliert die Orientierung.
8Darf man nativen Pinch-to-Zoom blockieren?
Nein. user-scalable=no verstößt gegen WCAG-Kriterium 1.4.4 und verhindert, dass Nutzer mit Sehbehinderung die Seite mit Browser-Bordmitteln vergrößern.
9Wie testet man eine Produktgalerie auf Barrierefreiheit?
Automatisierte Prüfung mit axe-core, ein kompletter Durchlauf nur mit der Tastatur und mindestens ein Test mit einem echten Screenreader wie NVDA oder VoiceOver.
10Was ist der häufigste Fehler bei barrierefreien Produktgalerien?
Nur Alt-Text wird ergänzt, während Steuerelemente als div mit onclick bleiben und keine Live-Region existiert. Die Galerie bleibt trotzdem unbedienbar.