01_Inheritance
Code-Dateien
| Dateiname | Aktion |
|---|---|
| CODECode_Inheritance.zip | Download |
Lernmaterialien
Vererbung Inheritance
DOM Tree
Der DOM Tree (Document Object Model) ist die Baumstruktur, in der der Browser ein HTML- oder XML-Dokument intern darstellt, damit JavaScript (und auch CSS) es lesen und verändern kann.
Grundidee
Ein HTML-Dokument besteht aus verschachtelten Elementen.
Diese Verschachtelung wird im DOM als Knoten (Nodes) in einem Baum abgebildet.
Jedes Element wird zu einem Knoten: z. B.
<html>,<body>,<p>, aber auch Text in einem Element ist ein eigener Knoten (Text Node).
Typische Baumstruktur
Nehmen wir dieses HTML:
<html>
<body>
<h1>Titel</h1>
<p>Hallo <b>Welt</b></p>
</body>
</html>Dann sieht der DOM Tree vereinfacht so aus:
Document
└── html
└── body
├── h1
│ └── #text "Titel"
└── p
├── #text "Hallo "
└── b
└── #text "Welt"
Wichtig: Text ist ein eigener Knoten
(#text) – das wird oft vergessen.
Begriffe im DOM Tree
Root: oberster Knoten, meist
document(bzw.Document)Parent (Eltern): z. B.
bodyist Parent vonh1undpChild (Kind):
h1ist Child vonbodySiblings (Geschwister):
h1undpsind Geschwister, weil sie denselben Parent haben
Warum ist das wichtig?
Weil du damit:
Elemente finden kannst (
querySelector,getElementById, …)Inhalte ändern kannst (
textContent,innerHTML, Attribute)Knoten hinzufügen/entfernen kannst (
append,remove)Styles dynamisch anpassen kannst (direkt oder über Klassen)
Mini-Beispiel (DOM manipulieren)
const p = document.querySelector("p");
p.textContent = "Neuer Text!";Hier greift JS in den DOM Tree ein und ersetzt den Text-Knoten im
<p>.
Inheritance
Inheritance (Vererbung) bedeutet in CSS: Manche CSS-Eigenschaften, die auf ein Element gesetzt werden, werden automatisch von seinen „Kindern“ übernommen – und das passt genau zur Parent/Child-Struktur im DOM Tree.
Inheritance im DOM Tree
Im DOM ist jedes Element ein Knoten mit
Parent (Eltern) und Children
(Kinder).
Wenn CSS-Eigenschaften vererbbar sind,
„fließen“ sie im Baum von oben nach unten:
Document
└── html
└── body
└── p
├── #text "Hallo "
└── b
└── #text "Welt"
Wenn du z. B. body { color: blue; } setzt, dann wird
diese Textfarbe im Normalfall auch in p, b und
im Textknoten sichtbar, weil color vererbbar
ist.
Beispiel
<body>
<p>Hallo <b>Welt</b></p>
</body>body {
color: blue;
font-family: Arial;
}Ergebnis:
pundberscheinen blau und in Arial, obwohl sie selbst keincoloroderfont-familygesetzt haben.Das ist Inheritance.
Wichtig: Nicht alles wird vererbt
Viele Eigenschaften werden nicht vererbt – besonders Layout/Box-Modell:
Typisch vererbbar (häufige Beispiele):
colorfont-family,font-size,font-style,font-weightline-heighttext-alignvisibility
Typisch nicht vererbbar:
margin,padding,borderwidth,heightbackground,background-colordisplay,position
Beispiel:
body { background: yellow; }➡️ Der Hintergrund ist nicht „vererbt“ an jedes Kind, sondern der Body-Hintergrund „liegt“ einfach hinter dem Inhalt. (Darum wirkt es manchmal so, als wäre es vererbt.)
Override
Bei CSS bedeutet „überschreiben“, dass für dieselbe Eigenschaft am Ende ein anderer Wert gilt als ein zuvor gesetzter — weil eine andere CSS-Regel gewinnt.
Das passiert durch die Cascade (die „Regel-Auswahl“ in CSS). Wichtig: Überschreiben ist nicht Vererbung, sondern Konfliktlösung, wenn mehrere Regeln auf dasselbe Element wirken.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="01_style.css">
</head>
<body>
<p>Hallo <b>Welt</b></p>
<p>Hallo <b>Thomas</b></p>
<p>Hallo <b>Andrea</b></p>
<article>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui ad sit ducimus? Expedita est esse, ipsa, aut nihil culpa nesciunt ullam obcaecati consequatur doloremque quam quasi accusamus sint temporibus similique.
</article>
</body>
</html>body {
color: blue;
font-family: Arial;
}
b {
color: red;
}
article {
color: green;
}body { color: blue; } → Vererbung
colorist vererbbar.Also erben
pund auchberstmal blau, wenn sie selbst keine Farbe setzen.
➡️ Ohne extra Regel wäre alles blau.
b { color: red; } → Überschreiben
Hier bekommt
bexplizitcolor: red.Das überschreibt den geerbten Wert
bluevonbody.
➡️ Ergebnis:
„Hallo “ ist blau
„Welt/Thomas/Andrea“ (in
<b>) ist rot
article { color: green; } → gilt nur im
<article>
- Der Text im
<article>wird grün (auch durch Vererbung innerhalb vonarticleweiter nach unten, falls dort Kinder wären).
Cascading
CSS Cascade (Kaskade) heißt einfach:
Wenn mehrere CSS-Regeln auf dasselbe
Element passen und dieselbe Eigenschaft setzen
(z. B. color), dann entscheidet der Browser: Welche
Regel gilt am Ende?
Mini-Beispiel
p { color: blue; }
p { color: red; }➡️ Das <p> wird rot, weil die
zweite Regel die erste „überstimmt“.
Wie entscheidet der Browser?
!important gewinnt fast immer
p { color: blue !important; }
p { color: red; }➡️ blau
Die genauere Regel gewinnt
#idist genauer als.klasse.klasseist genauer alsp
p { color: blue; }
.text { color: red; }<p class="text">Hallo</p>➡️ rot (weil .text genauer ist als
p)
Wenn gleich genau: die spätere Regel gewinnt
.text { color: blue; }
.text { color: red; }➡️ rot (weil später)
Beispiel
index.html
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>CSS Inheritance Example</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<main>
<h1>Inheritance Example</h1>
<p>
This is a paragraph with a
<span>highlighted word</span>.
</p>
<p>
Another paragraph with a
<a href="#">link</a>.
</p>
</main>
</body>
</html>style.css
/* Parent element */
main {
font-family: Arial, sans-serif;
color: darkblue;
line-height: 1.6;
}
/* Child element overrides inheritance */
span {
color: red;
font-weight: bold;
}
/* Link inherits color from parent */
a {
color: inherit;
text-decoration: underline;
}🧠 Was passiert hier? (Schritt für Schritt)
1️⃣ Vererbung vom Elternelement
(main)
main {
font-family: Arial, sans-serif;
color: darkblue;
}➡️ Alle Kindelemente von <main> erben
automatisch:
Schriftart (
font-family)Textfarbe (
color)Zeilenhöhe (
line-height)
Das betrifft:
<h1><p><span><a>
2️⃣ Kindelement
übernimmt die Vererbung (p, span)
<p>This is a paragraph with a <span>highlighted word</span>.</p><p>erbt Schrift + Farbe von<main><span>erbt ebenfalls alles
➡️ Standardmäßig ist alles dunkelblau.
3️⃣ Vererbung gezielt
überschreiben (span)
span {
color: red;
font-weight: bold;
}➡️ Das <span>:
erbt zuerst
darkbluewird dann überschrieben →
red
Das zeigt:
Vererbung kann durch eigene CSS-Regeln überschrieben werden.
4️⃣ Sonderfall: Links (a)
Browser geben Links eine eigene Farbe (blau).
a {
color: inherit;
}➡️ inherit bedeutet:
„Nimm die Farbe deines Elternelements.“
Der Link wird also auch dunkelblau statt Standard-Blau.
🔍 DOM-Struktur (wichtig für Vererbung)
main
├── h1
├── p
│ └── span
└── p
└── a
➡️ Vererbung folgt immer der DOM-Hierarchie.
❌ Was hier NICHT vererbt wird
marginpaddingborderbackground-color
Diese Eigenschaften müssten explizit gesetzt werden.