Cascade Layers & Nesting
Moderne CSS-Architektur steuert die Reihenfolge von Regeln bewusst. Layers, Nesting und :has() lösen viele Konflikte ohne !important.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Lerninhalt
Verstehen & anwenden
Cascade Layers
@layer legt eine Reihenfolge fest: Spätere Layers gewinnen bei gleicher Spezifität.
So lassen sich Reset, Basis, Komponenten und Utilities sauber trennen.
Die Reihenfolge wird einmal deklariert. Innerhalb einer Layer bleibt Spezifität wichtig, aber der grobe Konflikt ist bereits entschieden.
@layer reset, base, components, utilities;
@layer base {
a { color: #0f766e; }
}
@layer components {
.button { color: white; }
}Nesting
Mit Nesting steht eine Variante direkt bei ihrer Basisregel.
Das &-Zeichen verweist auf den übergeordneten Selektor.
Nesting ersetzt keine Klassennamen. Tiefe Verschachtelung macht Styles schwer überschaubar, deshalb flach halten.
.card {
padding: 1rem;
&:hover {
border-color: #0f766e;
}
.card__title {
margin: 0;
}
}:has(), :is() und :where()
:has() wählt ein Element danach aus, was es enthält.
Damit lassen sich Eltern stylen, ohne JavaScript.
:is() bündelt mehrere Selektoren, :where() tut dasselbe mit Spezifität null. :where() ist ideal für Baselines, die leicht überschrieben werden sollen.
.form-field:has(input:invalid) {
border-color: #b91c1c;
}
:where(h1, h2, h3) {
line-height: 1.2;
}Vertiefung
Reihenfolge vor Spezifität
Cascade Layers legen eine grobe Reihenfolge fest: reset, base, components, utilities. Innerhalb einer Layer entscheidet weiterhin die Spezifität, aber konkurrierende Architekturbereiche sind getrennt.
Nesting hält Varianten bei ihrer Basisregel. :has() erlaubt Elternselektoren, :where() senkt die Spezifität auf null. Zusammen ersetzen sie viele fragile Selektorketten.
@layer reset, base, components;
@layer components {
.field:has(input:invalid) {
border-color: #b91c1c;
}
}
:where(h1, h2, h3) {
line-height: 1.2;
}Merksatz: Layers ordnen Architektur, Nesting ordnet Nähe, :where() senkt Spezifität. Das ist wartbarer als !important.
Übungsaufgabe
Layer-Struktur für ein Design-System
Lege die Layers reset, base und components an. Style einen Button in components und hebe ein Formularfeld mit :has(input:invalid) hervor.
Das soll dein Programm können
- @layer in fester Reihenfolge
- Button in der components-Layer
- Nesting für den Hover-Zustand
- :has() für ein fehlerhaftes Feld
- Kein !important
Schreibe den Code hier oder in deiner IDE und vergleiche ihn dann mit der Lösung.
Dein Code wird automatisch auf diesem Gerät gespeichert.
Hinweis anzeigen
Die Reihenfolge im @layer-Statement entscheidet. Der Hover kann verschachtelt als &:hover geschrieben werden.
Lösung anzeigen
@layer reset, base, components;
@layer components {
.button {
background: #0f766e;
color: white;
&:hover {
background: #115e59;
}
}
.field:has(input:invalid) {
border-color: #b91c1c;
}
}Warum funktioniert das?
Die Layer-Reihenfolge bleibt stabil, auch wenn später weitere Regeln dazukommen. :has() hebt das Feld hervor, ohne JavaScript oder eine zusätzliche Fehlerklasse.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Transfer
Mini-Projekt: Design-System-Karte
Baue eine Karte mit Cascade Layers, Container Query, Fokusring und reduzierter Bewegung. Prüfe sie in einem schmalen und einem breiten Container.
Selbstcheck
Kann ich das schon?
Hake ab, was du wirklich erklären oder selbst bauen könntest.
Fortschritt
Bereit zum Abschließen?
Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.