Dies ist eine alte Version des Dokuments!


LU04b – FAQ Accordion

<div class="accordion">
 
  <div class="accordion-item">
    <button class="accordion-btn" aria-expanded="false">
      Frage 1
    </button>
    <div class="panel">
      Antwort 1...
    </div>
  </div>
 
  <div class="accordion-item">
    <button class="accordion-btn" aria-expanded="false">
      Frage 2
    </button>
    <div class="panel">
      Antwort 2...
    </div>
  </div>
 
  <div class="accordion-item">
    <button class="accordion-btn" aria-expanded="false">
      Frage 3
    </button>
    <div class="panel">
      Antwort 3...
    </div>
  </div>
 
</div>
.accordion {
  border: 1px solid #dde4f0;
  border-radius: 8px;
  overflow: hidden;
}
 
.accordion-item {
  border-bottom: 1px solid #dde4f0;
}
 
.accordion-item:last-child {
  border-bottom: none;
}
 
.accordion-btn {
  width: 100%;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem 1.25rem;
  background: none;
  border: none;
  font-size: 1rem;    /* rem, nicht px! */
  font-weight: 600;
  cursor: pointer;
  text-align: left;
}
 
.accordion-btn:hover {
  background-color: #f5f8ff;
}
 
.accordion-btn:focus-visible {
  outline: 3px solid #263fa9;
  outline-offset: -3px;
}
 
/* Panel: standardmässig versteckt */
.panel {
  display: none;
  padding: 0 1.25rem 1rem;
  font-size: 0.9rem;
  line-height: 1.6;
}
 
/* Panel: sichtbar wenn Klasse 'open' gesetzt */
.panel.open {
  display: block;
}
const buttons = document.querySelectorAll('.accordion-btn');
 
buttons.forEach(btn => {
  btn.addEventListener('click', () => {
    const panel = btn.nextElementSibling;
    const istOffen = panel.classList.contains('open');
 
    // Alle Panels schliessen
    buttons.forEach(andererBtn => {
      andererBtn.nextElementSibling.classList.remove('open');
      andererBtn.setAttribute('aria-expanded', 'false');
    });
 
    // Dieses Panel öffnen (nur wenn es vorher zu war)
    if (!istOffen) {
      panel.classList.add('open');
      btn.setAttribute('aria-expanded', 'true');
    }
  });
});

Bauen Sie Ihr eigenes FAQ Accordion. Ziel für heute: HTML-Struktur, CSS und ein funktionierender Click-Handler.

Schritt 1 – Neues Projekt anlegen

Erstellen Sie den Ordner faq-accordion/ mit folgenden Dateien:

  • index.html
  • style.css
  • script.js

Verlinken Sie CSS und JS in Ihrer HTML-Datei (<link> und <script src=„…“>).

Schritt 2 – HTML-Struktur bauen

Erstellen Sie mindestens 3 FAQ-Items mit der Struktur aus dem Abschnitt oben. Denken Sie an aria-expanded=„false“ an jedem Button.

Schritt 3 – CSS stylen

  • Panel standardmässig mit display: none ausblenden
  • Klasse .open mit display: block definieren
  • Button gestalten: width: 100%, padding, border: none, cursor: pointer

Schritt 4 – JavaScript: Click-Handler

  • Alle Buttons mit querySelectorAll holen
  • forEach über alle Buttons
  • addEventListener('click', …) auf jeden Button
  • Panel mit classList.toggle('open') ein-/ausblenden

Schritt 5 – aria-expanded setzen

Beim Klick den korrekten Wert von aria-expanded mit setAttribute setzen. Tipp: Aktuellen Wert zuerst lesen (getAttribute), dann den umgekehrten setzen.

Kein AI-generierter Code! Schreiben Sie Ihren Code selbst. Sie können diese Seite als Referenz nutzen und Teile übernehmen – aber tippen Sie selbst und verstehen Sie, was Sie schreiben. Das Ziel ist, dass Sie das Muster verinnerlichen.

  • de/modul/m291/learningunits/lu04/aufgaben/b_accordion.1772400416.txt.gz
  • Zuletzt geändert: 2026/03/01 22:26
  • von gkoch