NCA Social Media
Aktualisiert:
Autor:
Roland Golla
Grünes Schild mit Schriftzug Native HTML neben zerfallendem JavaScript Stapel Schwebendes Panel mit Schriftzug Dialog und grünem Fokusrahmen auf Gitterboden Gesetzbuch mit Schriftzug BFSG und grünem Schild mit weißem Haken

JavaScript ablösen: Frontend Refactoring für Barrierefreiheit und Performance

Ein nachgebautes Menü sieht aus wie ein Menü. Für einen Screenreader ist es ein Haufen div Elemente. Der Fokus springt beim Tab in den versteckten Hintergrund, Escape schließt nichts, und nach dem Schließen weiß niemand mehr, wo der Cursor steht.

Wir lösen genau dieses JavaScript ab. Modals werden dialog, Akkordeons werden details, Dropdowns werden Popover. Der Browser übernimmt Fokus, Escape und Screenreader Ankündigung. Ihr behaltet euer Design, verliert Code und gewinnt Konformität.

Was ein nachgebautes Widget wirklich kostet

Die Kosten stehen in keiner Rechnung. Sie stehen in den Tagen, die eine neue Entwicklerin braucht, um zu verstehen, warum das Menü drei Zustände an drei Stellen hält. Sie stehen in dem Fehler, der nur auftritt, wenn zwei Bibliotheken gleichzeitig auf dasselbe Element zugreifen. Und sie stehen in den nicht standardisierten Attributen, die euer Validator nicht kennt und deshalb pauschal wegfiltert. Genau dieser Filter versteckt irgendwann einen echten Fehler.

Der teuerste Posten ist unsichtbar. Ein Overlay, das den Fokus nicht festhält, ist kein Schönheitsfehler, sondern ein Verstoß gegen WCAG 2.2 und damit gegen das Barrierefreiheitsstärkungsgesetz. Seit dem 28. Juni 2025 gilt es für Onlineshops, Banken und viele weitere B2C Dienste. Bußgelder bis 100.000 Euro und Abmahnungen stehen im Raum.

Dazu kommt, was der Nutzer sofort merkt. Jede Bibliothek kostet Download, Parsing und Ausführung, bevor irgendetwas klickbar ist. Das schlägt direkt auf die Core Web Vitals durch. Am Ende zahlt ihr für Verhalten, das der Browser längst kostenlos mitbringt, und sichert es zusätzlich mit Cypress und axe-core ab, damit es nicht wieder kippt.

Euer Frontend, barrierefrei und schnell

Finde das passende Angebot für dein Projekt

Anfrage-Konfiguration

Starten Sie Ihre Anfrage

Projektart
Infos
Nachricht

Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.

CORE EXPERTISE

Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.

BFSG COMPLIANT

Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.

ENTERPRISE READY

Wie wir vorgehen: Analyse, Ersetzen, Testen, Übergabe

Wir fangen nie mit einem Rewrite an, sondern mit einer Bestandsaufnahme. Welche Komponenten hängen wirklich an JavaScript, welche sind nur historisch gewachsen, welche lassen sich ohne Risiko durch native Elemente ersetzen.

1. Analyse
Wir gehen euer Markup durch, prüfen mit Tastatur und Screenreader und lassen den HTML Validator laufen. Am Ende steht eine Liste mit Befunden, Aufwand und Priorität. Diese Liste gehört euch, auch wenn ihr danach selbst weitermacht.

2. Ersetzen
Modal wird dialog, Akkordeon wird details, Tooltip und Dropdown werden Popover. Jede Komponente einzeln, jede mit sichtbarem Vorher und Nachher. Was sich nicht nativ abbilden lässt, bleibt JavaScript, aber als dünne, dokumentierte Schicht.

3. Testen
Wir bauen Accessibility Tests in eure Pipeline. Cypress fährt die kritischen Pfade ab, axe-core prüft jede Seite, der HTML Validator läuft als eigener Schritt. Rot heißt: geht nicht live.

4. Übergabe
Wir arbeiten hands on mit eurem Team, nicht daneben. Pair Sessions, Pull Request Reviews, dokumentierte Patterns. Ziel ist, dass ihr die nächste Komponente selbst nativ baut. Wer die Pipeline dafür noch nicht hat, bekommt sie über unser CI CD Pipeline Setup dazu.

Aufsteigendes Säulendiagramm der vier Refactoring Phasen Analyse Ersetzen Testen Übergabe. Die Phasen stehen textuell im Absatz daneben.

Vorher mit Alpine, nachher nativ: das Ergebnis aus einem echten Refactoring

Anforderung Vorher mit Alpine Nachher nativ
Focus Trap Kein Trap, Tab landet im versteckten Hintergrund Nativ über showModal()
Fokus zurückgeben Fokus geht beim Schließen verloren Nativ, Fokus kehrt zum auslösenden Button zurück
Escape Taste Nicht behandelt Nativ, dialog schließt bei Escape
Hintergrund inaktiv Versuch über manuelles inert, fehleranfällig Nativ, der gesamte Hintergrund ist inert
Screenreader Drawer bleibt im Accessibility Tree, auch wenn er unsichtbar ist Geschlossen ausgeblendet, offen korrekt angekündigt
Scroll Lock Kein Lock, die Seite scrollt hinter dem Drawer weiter html.is-locked plus overscroll-behavior contain
Klick nach außen Nur ein manueller Backdrop Handler closedby any nativ, für Safari ein kleiner JavaScript Fallback
Akkordeon Semantik x-data Toggle ohne native Semantik details und summary, funktioniert auch ohne JavaScript
Tastaturbedienung Klick Handler auf Elementen ohne Button Rolle summary ist nativ mit Enter und Space bedienbar
HTML Validität 41 Fehler durch nicht standardisierte Attribute 0 Fehler

dialog und details ersetzen den Eigenbau

Das dialog Element ist seit März 2022 in allen modernen Browsern verfügbar und gilt als Baseline. Ein Aufruf von showModal() reicht, und der Browser erledigt vier Dinge auf einmal: Er fängt den Fokus im Dialog, macht den Rest der Seite inert, schließt bei Escape und gibt den Fokus beim Schließen an den auslösenden Button zurück. Genau das, wofür ein Eigenbau mehrere hundert Zeilen und trotzdem Lücken braucht.

Code:
          

<button type="button" data-open-menu>Menü</button>

<dialog id="menu" closedby="any" aria-label="Hauptnavigation">
  <button type="button" data-close-menu>Schließen</button>
  <nav>
    <a href="/leistungen">Leistungen</a>
    <a href="/kontakt">Kontakt</a>
  </nav>
</dialog>

Für Akkordeons gilt dasselbe in kleiner. details und summary sind das native Disclosure Pattern. Kein Zustand im JavaScript, kein aria-expanded von Hand, kein kaputter Tab Stop. Und wenn das JavaScript beim Laden hängt oder ein Fehler eine Datei blockiert, funktioniert der Inhalt trotzdem.

Code:
          

<details name="faq">
  <summary>Wie lange dauert ein Frontend Refactoring?</summary>
  <p>Das hängt an der Anzahl der Komponenten. Wir schätzen den Aufwand vorab.</p>
</details>

Wer eigene Widgets braucht, kommt weiter um ARIA nicht herum. Aber ARIA ist Beschriftung, nicht Funktion. Die erste Regel lautet seit Jahren: erst natives HTML, dann ARIA. Genau danach arbeiten wir.

BFSG: Fokus, Escape und Screenreader sind Pflicht, kein Extra

Seit dem 28. Juni 2025 gilt das Barrierefreiheitsstärkungsgesetz für Onlineshops, Banken, Buchungsplattformen und viele weitere B2C Dienste. Bußgelder bis 100.000 Euro und wettbewerbsrechtliche Abmahnungen stehen im Raum. Ein Menü, aus dem der Tastaturfokus herausfällt, ist dabei kein Randthema, sondern ein direkter Verstoß gegen mehrere Erfolgskriterien der WCAG 2.2.

Die Zeile in der Tabelle oben, in der 41 Validierungsfehler auf 0 fallen, ist deshalb mehr als Kosmetik. Nicht standardisierte Attribute im Markup bedeuten, dass Browser und Assistenztechnologien raten müssen. Sauberes HTML ist die Grundlage jeder A11Y Strategie und macht die Prüfung im Accessibility Webdesign überhaupt erst belastbar.

Automatisierte Scans finden nur einen Teil der Probleme. Fokusreihenfolge, Screenreader Ausgabe und die Frage, ob ein Dialog sich sinnvoll anfühlt, bleiben manuelle Arbeit. Native Elemente verkleinern diesen manuellen Teil massiv, weil der Browser die schwierigen Anteile bereits richtig macht. Wer tiefer einsteigen will, findet bei uns eine Übersicht zu Accessibility Testing Tools und zu barrierefreien Icons.

Performance: weniger Bundle, keine Wartezeit auf Hydration

Jede JavaScript Bibliothek im Head kostet dreimal: Download, Parsing und Ausführung. Bei einem Menü, das der Browser selbst kann, zahlt ihr diesen Preis für nichts. Native Elemente sind bereits da, wenn das HTML ankommt. Es gibt keine Phase, in der die Seite sichtbar ist, aber noch nicht reagiert.

Das schlägt direkt auf die Core Web Vitals durch, besonders auf Interaction to Next Paint. Ein Klick auf ein summary Element wird vom Browser verarbeitet, nicht von einem Event Listener, der erst nach der Hydration existiert. In Astro Islands Projekten sparen wir damit ganze Inseln ein, die vorher nur wegen eines Toggles interaktiv waren.

Wir arbeiten täglich mit Astro, React und Vue. Die Frage ist nie Framework oder kein Framework, sondern: welcher Teil eurer Seite braucht wirklich Laufzeitlogik. Für alles andere gilt die Script Tag Best Practice: so wenig wie möglich, so spät wie möglich.

Absicherung mit Cypress und axe-core, damit es so bleibt

Ein Refactoring ohne Tests hält bis zum nächsten Sprint. Deshalb endet unsere Arbeit nicht beim funktionierenden Dialog, sondern bei der Pipeline, die ihn festhält. Wir schreiben Cypress Tests, die den kritischen Pfad mit der Tastatur abfahren: Menü öffnen, Fokus prüfen, Escape drücken, Fokus zurück auf dem Button.

Code:
          

it('gibt den Fokus nach dem Schließen zurück', () => {
  cy.visit('/')
  cy.get('[data-open-menu]').focus().type('{enter}')
  cy.get('#menu').should('be.visible')
  cy.focused().type('{esc}')
  cy.focused().should('have.attr', 'data-open-menu')
  cy.checkA11y()
})

Dazu läuft axe-core über cypress-axe auf jeder Seite und der HTML Validator als eigener Schritt. Beides als Quality Gate: Wer neue Fehler einbaut, merkt es im Pull Request und nicht im Audit. Für schnelle Zwischenstände nutzen wir zusätzlich den Lighthouse Accessibility Audit.

Wir sind Cypress Ambassador und setzen Cypress mit Cypress Cloud in eigenen Projekten täglich ein. Unit Tests im Frontend laufen bei uns über Vitest, typsicher mit TypeScript im Strict Mode. Das ist kein Zusatzangebot, das ist unsere normale Arbeitsweise.

Warum NCA und was das für euch bedeutet

Roland Golla ist der Gründer von Never Code Alone in Duisburg. Sein Thema: Die KI schreibt den Code, er sorgt für die Qualität. Seit über 20 Jahren Webentwicklung, seit 2013 Schwerpunkt Softwarequalität und automatisiertes Testen, Cypress Ambassador und Contributor im TYPO3 Core.

Wir kommen nicht mit einem Foliensatz, sondern mit einem Pull Request. Die Arbeit passiert in eurem Repository, in eurem Branch, mit eurem Team. Das gilt für Frontend Development genauso wie für PHP Refactoring oder Vibe Coding Consulting. Wer im Symfony Umfeld arbeitet und zusätzlich jQuery, Alpine und Stimulus gleichzeitig im Projekt hat, findet den passenden Einstieg beim Symfony Frontend Refactoring.

Wir starten mit einem kostenlosen Kennenlernen. Ihr zeigt uns die Komponenten, die euch Bauchschmerzen machen, wir schätzen den Aufwand ehrlich ein. Abgerechnet wird danach transparent minutengenau, ohne Paket und ohne Mindestlaufzeit. Wenn nach der Analyse klar ist, dass ihr das selbst schafft, sagen wir das auch.

Modals are actually the boss battle at the end of web accessibility.

Rob Dodson, Developer Advocate im Chrome Team bei Google – robdodson.me, Building better accessibility primitives
CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.

Frontend 2025: Optimieren Sie Ihre Webseite mit Astro JS und nutzen Sie die Vorteile der Barrierefreiheit

Optimieren Sie Ihre Webseite mit Astro JS und nutzen Sie die Vorteile einer schnellen, sicheren und barrierefreien Webseite. Erfüllen Sie die gesetzlichen Anforderungen und verbessern Sie die Benutzererfahrung Ihrer Webseite. Mit Astro JS können Sie die Ladezeit reduzieren, die Sicherheit maximieren und die SEO-Optimierung verbessern. Kontaktieren Sie uns, um mehr zu erfahren und um Ihre Webseite auf ein neues Level zu heben.

Astro JS Frontend E-Mail Kontakt

Häufige Fragen zum Frontend Refactoring

Die häufigsten Fragen aus Erstgesprächen zum Ablösen von JavaScript, zu Aufwand, Risiko und Browserunterstützung.

Lohnt sich das Ablösen von JavaScript 2026 überhaupt noch?

Ja, weil der Browser heute kann, was 2018 noch eine Bibliothek brauchte. dialog, details und die Popover API decken Modal, Akkordeon und Dropdown nativ ab. Ihr streicht Code, den ihr sonst pflegen und testen müsst, und bekommt Fokus Management, Escape und Screenreader Unterstützung ohne eigenen Aufwand dazu. Der Wartungsaufwand sinkt dauerhaft.

Welche Browser unterstützen dialog und details 2026?

Das dialog Element ist seit März 2022 in Chrome, Edge, Firefox und Safari verfügbar und gilt als Baseline. details und summary sind noch länger überall verfügbar. Für diese Basis braucht ihr keinen Polyfill mehr. Nur einzelne neuere Zusätze wie das closedby Attribut sind noch nicht überall angekommen und werden als Progressive Enhancement eingebaut.

Was kostet ein Frontend Refactoring 2026?

Das hängt an der Anzahl und Komplexität eurer Komponenten. Wir starten mit einem kostenlosen Kennenlernen, schauen uns den Code an und schätzen den Aufwand vorab ein. Abgerechnet wird transparent minutengenau. Es gibt keine Pakete und keine Mindestlaufzeit, ihr zahlt die tatsächlich geleistete Arbeit.

Wie lange dauert ein Frontend Refactoring 2026?

Wir arbeiten in kleinen Schritten statt in einem großen Rewrite. Eine einzelne Komponente wie Navigation oder Akkordeon ist meist schnell erledigt. Danach wächst die Umstellung mit eurem normalen Sprintrhythmus mit. Jeder Schritt ist deploybar, ihr müsst also nie auf ein großes Release warten, bevor etwas besser wird.

Ist ein Refactoring 2026 ein Risiko für laufende Projekte?

Nicht, wenn es abgesichert ist. Wir bauen zuerst Tests für das bestehende Verhalten, danach ersetzen wir die Implementierung. Cypress fährt die kritischen Pfade ab, axe-core prüft die Barrierefreiheit, der HTML Validator läuft als eigener Schritt. Was rot ist, geht nicht live. Jede Komponente kommt einzeln, nicht alles auf einmal.

Müssen wir Alpine komplett rauswerfen?

Nein. Ziel ist nicht null JavaScript, sondern so wenig wie nötig. Was der Browser nativ kann, geben wir an den Browser ab. Was echte Laufzeitlogik braucht, bleibt in JavaScript, dann aber als dünne, dokumentierte Schicht mit klarer Zuständigkeit. Oft bleibt am Ende ein Bruchteil des ursprünglichen Codes übrig.

Funktioniert das auch mit React, Vue oder Astro?

Ja. Native Elemente sind Framework unabhängig, ein dialog funktioniert in einer React Komponente genauso wie in einem Twig Template. In Astro Projekten sparen wir damit häufig ganze Islands ein, die vorher nur wegen eines Toggles interaktiv waren. Wir arbeiten täglich mit Astro, React und Vue.

Was ist mit dem closedby Attribut und Safari?

closedby steuert, ob ein Dialog per Klick nach außen oder per Escape schließt. Chrome, Edge und Firefox unterstützen es, Safari noch nicht. Es ist Teil von Interop 2026, die Umsetzung läuft also. Wir bauen es als Progressive Enhancement ein und ergänzen für Safari einen kleinen JavaScript Fallback, der beim Klick auf den Backdrop schließt.

Brauchen wir dann überhaupt noch ARIA?

Für native Elemente in der Regel nicht. Die erste Regel von ARIA lautet: Nutze natives HTML, wenn es die Semantik bereits liefert. ARIA bleibt wichtig für Widgets, die es in HTML nicht gibt, etwa Comboboxen mit Autocomplete oder Live Regionen. Dort setzen wir die Patterns aus dem WAI-ARIA Authoring Practices Guide ein.

Wie prüft ihr, ob das Ergebnis wirklich barrierefrei ist?

Auf drei Ebenen. Automatisiert mit axe-core in der Pipeline, manuell mit reiner Tastaturbedienung und mit echten Screenreadern wie NVDA oder VoiceOver auf den kritischen Pfaden. Automatisierte Scans finden nur einen Teil der Probleme, deshalb ersetzt kein Tool den manuellen Durchlauf. Beides zusammen ergibt ein belastbares Ergebnis.

Ändert sich dabei unser Design?

Nein. dialog, details und Popover sind vollständig mit CSS gestaltbar, inklusive Backdrop und Animationen. Optisch bleibt alles so, wie eure Designerin es entworfen hat. Was sich ändert, ist das Verhalten unter der Oberfläche: Fokus, Tastatur und Screenreader Ausgabe funktionieren danach so, wie Nutzer es erwarten.

Arbeitet ihr remote oder vor Ort?

Beides. Der Großteil läuft remote über Pull Requests, Pair Sessions und Code Reviews in eurem Repository. Für Workshops und Kickoffs kommen wir auch ins Haus. Never Code Alone sitzt in Duisburg und arbeitet mit Teams im gesamten deutschsprachigen Raum.