Astro für Anfänger · Teil 24TutorialEinsteiger

Astro

Astro-Kurs 24: Interaktive Elemente

Lerne interaktive elemente mit praktischen Beispielen im Astro-Projekt Meine Modellbau-Werkstatt.

Veröffentlicht am

Modul 5 – Webseiten erweitern · Astro-Anfängerkurs der Know-How-Schmiede

Voraussetzung: Etappe 1 und 2 des Kurses. Das Beispielprojekt „Meine Modellbau-Werkstatt“ wird fortgeführt. Kopiere Code nicht blind über schon vorhandene Seiten, sondern ergänze bestehende Bereiche.

Lernziele

Du entwickelst ein bedienbares Menü und verstehst den Unterschied zwischen einer normalen HTML-Schaltfläche und einem JavaScript-Ereignis. Du achtest auf Zugänglichkeit durch aria-expanded und Tastaturbedienung.

1. Ein Menü, das sich öffnen lässt

Lege src/components/MobilesMenue.astro an und nutze die Komponente in deinem Layout. Das hier ist eine eigenständige Alternative zur bisherigen Navigation: Entferne deshalb die alte <nav>-Leiste im Header, bevor du die Komponente einsetzt.

<nav aria-label="Hauptnavigation" class="menue">
  <button type="button" aria-expanded="false" aria-controls="seitenlinks" id="menueknopf">
    Menü öffnen
  </button>
  <div id="seitenlinks" class="links" hidden>
    <a href="/">Startseite</a>
    <a href="/projekte">Projekte</a>
    <a href="/kontakt">Kontakt</a>
    <a href="/rechner">Rechner</a>
  </div>
</nav>
<style>
  .links { display:flex; flex-wrap:wrap; gap:1rem; padding:1rem 0; }
  .links a { color:inherit; }
  button { padding:.7rem 1rem; cursor:pointer; }
</style>
<script>
  const knopf = document.querySelector<HTMLButtonElement>('#menueknopf');
  const links = document.querySelector<HTMLDivElement>('#seitenlinks');
  knopf?.addEventListener('click', () => {
    if (!links) return;
    links.hidden = !links.hidden;
    const offen = !links.hidden;
    knopf.setAttribute('aria-expanded', String(offen));
    knopf.textContent = offen ? 'Menü schließen' : 'Menü öffnen';
  });
</script>

Einbau

In src/layouts/Layout.astro im Frontmatter:

---
import MobilesMenue from '../components/MobilesMenue.astro';
const { title = 'Meine Modellbau-Werkstatt' } = Astro.props;
---

Ersetze die bisherige Navigation im Header durch <MobilesMenue />. Wenn dein Layout aus Etappe 2 einen anderen Dateinamen besitzt, passe den Import entsprechend an.

Warum hidden? Die Links bleiben bei geschlossenem Menü aus der Tab-Reihenfolge heraus. Ein echter öffentlicher Auftritt braucht zusätzlich Styling für Smartphone und Desktop; dieses Beispiel fokussiert zunächst das Verhalten.

Übung

Baue einen weiteren Link zum Blog ein. Teste die Bedienung mit Tab und Enter sowie auf einem schmalen Browserfenster.

Lösungshinweis

Ergänze <a href="/blog">Blog</a> innerhalb des Containers #seitenlinks. Der Pfad muss zu deiner Blog-Routenstruktur aus Teil 22 passen.

---