Alles zusammen: HTML-Struktur, CSS-Styling, JavaScript-Interaktion — ihr baut eine interaktive Profilkarten-Seite von Grund auf.
Modul 01
Das Projekt
Ihr baut eine Seite mit interaktiven Profilkarten — wie ein kleines Team-Verzeichnis. Jede Karte zeigt einen Namen, eine Rolle, Skills, und einen Button, der mehr Infos aufklappt. Dafür nutzt ihr alles aus A1–A6.
A1–A2
HTML-Struktur
Tags, Attribute, Semantik
A3–A4
CSS-Styling
Selektoren, Boxmodell, Farben
A5
Layout
Flexbox, Grid, Responsive
A6
JavaScript
DOM, Events, classList
Modul 02
Schritt für Schritt
Folgt den 5 Schritten — kopiert den Code in den Editor unten, passt ihn an, und baut Stück für Stück eure eigene Version.
Schritt 1
HTML-Grundgerüst + Karten-Struktur
Erstellt die HTML-Basis mit einer Überschrift und einem Container für die Karten. Jede Karte bekommt Name, Rolle, Skills und einen versteckten Detail-Bereich.
Fügt den Code aus den Schritten zusammen, passt ihn an und klickt Ausführen. Eure Seite erscheint in der Vorschau.
Fortschritt
Projekt-Checkliste
Hakt ab, was ihr geschafft habt — so behaltet ihr den Überblick.
☐HTML-Grundgerüst mit <!DOCTYPE>, head und body
☐Mindestens 3 Profilkarten mit Name, Rolle, Skills
☐CSS-Reset und Basis-Styling (Schrift, Hintergrund)
☐Grid-Layout für die Karten (auto-fit + minmax)
☐Karten mit Schatten, Rundungen und Hover-Effekt
☐Skills als farbige Badges gestaltet
☐Button mit professionellem Styling
☐JavaScript: Details aufklappen per classList.toggle()
☐Button-Text ändert sich (Mehr/Weniger)
☐Eigene Anpassungen: Farben, Texte, Extras
0 / 10 erledigt
Bonus-Aufgaben
Selber coden
Vier Aufgaben, die ihr in eurem eigenen Projekt umsetzen könnt — egal ob Profilkarten, Portfolio, Rezeptseite oder etwas ganz anderes. Nutzt den Live-Editor oben zum Ausprobieren. Zu jeder Aufgabe gibt es Tipps, ein Code-Gerüst zum Ausfüllen und eine Musterlösung zum Aufdecken.
Aufgabe 1
Darkmode-Toggle
Füge deiner Seite einen Button hinzu, der zwischen hellem und dunklem Design umschaltet. Im Darkmode sollen Hintergrund und Textfarbe wechseln.
Du brauchst:classList.toggle() auf document.body, eine CSS-Klasse .dark mit neuen Farben, einen <button> mit addEventListener("click", ...)
Baue ein Eingabefeld, das Elemente auf deiner Seite in Echtzeit filtert. Beim Tippen sollen nur die Elemente sichtbar bleiben, deren Text zum Suchbegriff passt.
Du brauchst:<input> mit addEventListener("input", ...), querySelectorAll() für die Elemente, textContent.toLowerCase().includes() zum Prüfen, style.display zum Ein-/Ausblenden
// Suchfeld und alle filterbaren Elemente finden:
const suchfeld = document.querySelector(/* ? */);
const elemente = document.querySelectorAll(/* ? */);
Baue ein kleines Formular mit Eingabefeldern und einem „Hinzufügen"-Button. Beim Klick soll per JavaScript ein neues Element erstellt und in die Seite eingefügt werden — z.B. eine neue Karte, ein Listeneintrag oder ein Kommentar.
Du brauchst:<input>-Felder + <button>, document.createElement(), .textContent oder .innerHTML, appendChild() zum Einfügen, .value um den Eingabetext auszulesen
// In die Seite einfügen:
container./* ? */(neu);
});
<!-- HTML: Formular über oder neben dem Inhaltsbereich --> <divclass="formular"> <inputtype="text"id="input-name"placeholder="Name..."> <inputtype="text"id="input-rolle"placeholder="Rolle..."> <buttonid="hinzufuegen">+ Hinzufügen</button> </div>
<!-- Der Container, in den neue Elemente eingefügt werden: --> <divclass="karten-grid"> <!-- bestehende Karten ... --> </div>
addBtn.addEventListener("click", function() { // Werte aus den Eingabefeldern lesen: const titel = document.querySelector("#input-name").value; const rolle = document.querySelector("#input-rolle").value;
// Prüfen ob Felder ausgefüllt sind: if (!titel || !rolle) { alert("Bitte beide Felder ausfüllen!"); return; }
// Neues Element erstellen: const neu = document.createElement("div");
neu.className = "karte";
neu.innerHTML = `
<h2>${titel}</h2>
<p class="rolle">${rolle}</p>
`;
// In die Seite einfügen:
container.appendChild(neu);
Zeige mehrere Inhalte (Bilder, Karten, Zitate …) nacheinander an, steuerbar per Vor- und Zurück-Buttons. Immer nur ein Element ist sichtbar.
Du brauchst:
Eine Index-Variable (let aktuell = 0), querySelectorAll() für alle Slider-Elemente, eine Funktion die alle auf display: none setzt und nur das aktuelle auf display: block, zwei Buttons mit addEventListener("click", ...) die den Index erhöhen/verringern
// Alle Slides und Buttons finden:
const slides = document.querySelectorAll(/* ? */);
let aktuell = /* ? */;
Euer Button funktioniert nicht. In welcher Reihenfolge geht ihr beim Debugging vor?
☰ Fix anwenden und erneut testen
☰ Konsole öffnen (F12) und Fehlermeldung lesen
☰ Problem identifizieren: Was genau funktioniert nicht?
☰ Ergebnis prüfen und Code committen
☰ Fehlerquelle lokalisieren: Welche Zeile? Welcher Selektor?
Abschluss-Quiz
Quiz: Gesamtwissen
7 Fragen quer durch A1–A7 — das Finale.
Nachschlagen
Glossar Flip-Karten
Die wichtigsten Begriffe der gesamten Serie — klicke zum Aufdecken.
Semantisches HTMLklickenHTML-Tags, die ihre Bedeutung beschreiben: <header>, <nav>, <main>, <article>, <section>, <footer>.
CSS GridklickenZweidimensionales Layout-System. Definiert Zeilen und Spalten gleichzeitig. Ideal für Seiten-Layouts und Kartenraster.
classList.toggle()klickenJavaScript-Methode: Fügt eine CSS-Klasse hinzu, wenn sie fehlt — entfernt sie, wenn sie da ist. Perfekter Schalter für UI-Effekte.
box-sizing: border-boxklickenCSS-Eigenschaft, die Padding und Border in die Gesamtbreite einrechnet. Verhindert, dass Elemente größer werden als erwartet.
closest()klickenDOM-Methode: Sucht vom aktuellen Element aufwärts im Baum nach dem nächsten Vorfahren, der zum Selektor passt.
auto-fit + minmax()klickenGrid-Muster für responsive Layouts ohne Media Queries: repeat(auto-fit, minmax(250px, 1fr)) erstellt so viele Spalten wie passen.
Reflexion & Ausblick
Diskussion
„Präsentiert euer Projekt der Gruppe. Was war die größte Herausforderung? Welches Konzept aus A1–A7 war am nützlichsten? Und: Was würdet ihr als Nächstes lernen wollen — Animationen, APIs, ein eigenes Backend?"