Massnahmen zur Einhaltung der WCAG 2.1 AA-Kriterien und BITV 2.0 im eforms.cloud Frontend
eforms.cloud ist eine oeffentlich zugaengliche Plattform fuer sicheres Hosting elektronischer Formulare mit dynamischer Auswertung. Als Webanwendung im Gesundheitsbereich orientiert sich das System an folgenden Standards:
Ziel ist es, dass alle Nutzerinnen und Nutzer — unabhaengig von Einschraenkungen — das Meldeformular vollstaendig und selbststaendig bedienen koennen.
| Element | Datei | Status |
|---|---|---|
| Logo (linkes Header-Logo) | AppHeader.vue |
OK Dynamischer alt-Text aus Layout-Einstellungen |
| Logo (rechtes Header-Logo) | AppHeader.vue |
Behoben Dynamischer alt-Text aus Layout-Einstellungen |
<fieldset> und <legend>role="group" und aria-labelledbyscope="col"for-Attributen an Eingabefelder gebunden| Element | Vordergrund | Hintergrund | Kontrast | Status |
|---|---|---|---|---|
| Haupttext | #0b0b0b |
#ffffff |
19.4:1 | OK |
| Gedaempfter Text | #6b7280 |
#ffffff |
4.6:1 | OK |
| Admin-Sidebar Text | rgba(255,255,255,0.8) |
#0b3b8c |
~5.5:1 | Behoben |
| Buttons (weiss auf blau) | #ffffff |
#0b3b8c |
9.8:1 | OK |
tabindex="0" und @keydown.enter
Beide Layouts (default.vue und admin.vue) enthalten einen Skip-Link
„Zum Inhalt springen“, der bei Tastaturfokus sichtbar wird und direkt zum
Hauptinhalt (#main-content) springt.
Jede Seite setzt einen individuellen Titel ueber useHead({ title: ... }).
Beispiele:
eforms.cloud - Hinweiseeforms.cloud - Formulareforms.cloud Admin - Einreichungen
Alle interaktiven Elemente haben sichtbare :focus-visible-Styles:
Das lang="de"-Attribut ist in nuxt.config.ts global gesetzt
(htmlAttrs: { lang: 'de' }).
ValidationErrors.vue-Komponente zeigt fehlende Pflichtfelder als Liste an.field-error)role="alert" und aria-live="assertive", damit Screenreader Fehler sofort vorlesenaria-required="true" und aria-invalid (dynamisch) ausgezeichnet
Alle Formularfelder haben beschreibende Labels. Pflichtfelder sind zusaetzlich mit einem
visuellen Stern (*) und dem ARIA-Attribut aria-required="true" gekennzeichnet.
| Element | Massnahme |
|---|---|
| Pflichtfelder | aria-required="true" auf bundesland, landkreis, datumVorfall, berufsgruppe, consent |
| Fehlerhafte Felder | :aria-invalid="fieldErrors.includes('...')" (dynamisch) |
| Checkbox-Gruppen | role="group" mit aria-labelledby |
| Klickbare Tabellenzeilen | role="link", tabindex="0", aria-label |
| Toggle-Switch | aria-label="Wartungsmodus" auf dem versteckten Checkbox-Input |
| Fehlermeldungen | role="alert" und aria-live="assertive" |
| Admin-Sidebar | aria-label="Admin-Navigation" auf <aside>, <nav>-Element mit aria-label |
| Massnahme | Betroffene Dateien | WCAG-Kriterium |
|---|---|---|
| Skip-Link hinzugefuegt | layouts/default.vue, layouts/admin.vue |
2.4.1 |
| Focus-Visible-Styles fuer Buttons und Links | assets/css/main.css |
2.4.7 |
| Farbkontrast in Admin-Sidebar verbessert | assets/css/main.css |
1.4.3 |
aria-required und aria-invalid auf Pflichtfeldern |
components/forms/OrtFieldset.vue, ZeitpunktFieldset.vue, BerichtendeFieldset.vue, ConsentSection.vue |
4.1.2, 3.3.1 |
role="group" und aria-labelledby auf Checkbox-Gruppen |
components/forms/*.vue, pages/meldung/[slug].vue |
1.3.1, 4.1.2 |
role="alert" und aria-live auf Fehlermeldungen |
components/forms/ValidationErrors.vue |
3.3.1, 4.1.3 |
| Alt-Text des Partnerlogos verbessert | components/AppHeader.vue |
1.1.1 |
scope="col" auf Tabellen-Header |
pages/admin/meldungen/index.vue, pages/admin/benutzer.vue |
1.3.1 |
| Klickbare Tabellenzeilen per Tastatur bedienbar | pages/admin/meldungen/index.vue |
2.1.1 |
| Toggle-Switch mit ARIA-Label | pages/admin/einstellungen.vue |
4.1.2 |
Externe Links: rel="noopener" und SR-Hinweis |
components/AppFooter.vue, pages/meldung/[slug].vue |
2.4.4 |
Screenreader-only CSS-Klasse (.sr-only) |
assets/css/main.css |
— |
| Semantische Navigation im Admin-Layout | layouts/admin.vue |
1.3.1 |
<label>?aria-required="true" markiert?alt-Text versehen?target="_blank" auch rel="noopener" und einen Screenreader-Hinweis?role="group" und aria-labelledby versehen?