Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:m291:learningunits:lu02:theorie:a_css-intro [2026/02/02 00:12] – gkoch | de:modul:m291:learningunits:lu02:theorie:a_css-intro [2026/02/02 01:29] (aktuell) – gkoch | ||
|---|---|---|---|
| Zeile 6: | Zeile 6: | ||
| - die Schrift (Google Font) einbinden, | - die Schrift (Google Font) einbinden, | ||
| - Designwerte als CSS-Variablen definieren und | - Designwerte als CSS-Variablen definieren und | ||
| - | - Mit Media Queries das Responsive-Layout für Mobile umsetzen. | + | - mit Media Queries das Responsive-Layout für Mobile umsetzen. |
| </ | </ | ||
| ==== Lernziele ==== | ==== Lernziele ==== | ||
| - | * Sie können eine Google Font per ''< | + | * Sie können eine Google Font per ''< |
| - | * Sie verstehen | + | * Sie verstehen '' |
| - | * Sie können CSS-Variablen in '': | + | * Sie können CSS-Variablen in '': |
| - | * Sie verstehen die CSS-**Cascade** (Reihenfolge/ | + | * Sie verstehen die CSS-**Kaskade** (Vererbung, Spezifität, |
| * Sie können Media Queries für Responsive Design nutzen und mit DevTools testen. | * Sie können Media Queries für Responsive Design nutzen und mit DevTools testen. | ||
| + | ---- | ||
| - | ===== Fonts im Web ===== | + | ===== 1) Fonts im Web ===== |
| + | {{: | ||
| ==== Google Fonts via CDN ==== | ==== Google Fonts via CDN ==== | ||
| - | In vielen Projekten werden Fonts schnell über ein CDN eingebunden (z.B. Google Fonts) | + | In vielen Projekten werden Fonts schnell über ein CDN eingebunden (z.B. Google Fonts). Das ist praktisch für Schulprojekte |
| - | **Typischer Aufbau im ''< | + | <WRAP center round box 80%> |
| + | **Typischer Aufbau im ''< | ||
| <code html> | <code html> | ||
| <link rel=" | <link rel=" | ||
| <link rel=" | <link rel=" | ||
| - | <link href=" | + | <link |
| + | | ||
| + | | ||
| + | /> | ||
| </ | </ | ||
| + | </ | ||
| + | <WRAP center round box 80%> | ||
| **Dann im CSS verwenden: | **Dann im CSS verwenden: | ||
| <code css> | <code css> | ||
| Zeile 35: | Zeile 43: | ||
| } | } | ||
| </ | </ | ||
| + | </ | ||
| - | <WRAP center round box 80%> | + | <WRAP center round tip 70%> |
| - | **Hinweis zur Praxis:** In professionellen Projekten werden Fonts häufig | + | **Praxis-Hinweis:** In professionellen Projekten werden Fonts oft **lokal** gespeichert (Datenschutz, Performance, Offline-Fähigkeit). Für dieses Modul genügt zu Beginn das Einbinden via ''< |
| </ | </ | ||
| - | ==== Besser in der Praxis: | + | ==== Fonts lokal speichern ==== |
| - | Mit '' | + | Wenn Fonts lokal im Projekt liegen, werden sie mit '' |
| + | <WRAP center round box 80%> | ||
| <code css> | <code css> | ||
| @font-face { | @font-face { | ||
| Zeile 51: | Zeile 61: | ||
| } | } | ||
| </ | </ | ||
| + | </ | ||
| - | ==== Wichtige | + | ((Für lokale Fonts brauchen Sie die Font-Dateien im Projekt, idealerweise |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | ==== Einheiten bei Fonts: px vs em vs rem (mit Accessibility) | + | ==== Wichtige Font-Eigenschaften |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | === Kurzdefinitionen === | + | ---- |
| - | * **px**: „fixe“ Design-Einheit. '' | + | |
| - | * **em**: relativ zur **berechneten Schriftgrösse** ('' | + | |
| - | * **rem**: relativ zur **Root-Schriftgrösse** ('' | + | |
| + | ==== Einheiten bei Schriftgroessen ==== | ||
| + | <WRAP center round box 80%> | ||
| + | **Wichtig: | ||
| + | \\ | ||
| + | Viele Menschen nutzen Browser-Zoom oder haben eine grössere Standard-Schrift eingestellt. | ||
| + | </ | ||
| - | === Warum em/rem oft besser sind als px === | + | === px === |
| + | * '' | ||
| + | * Vorteil: direkt und einfach. | ||
| + | * Nachteil: In grossen Projekten wird es schnell unübersichtlich, | ||
| - | ==== 1) Skalierung & Nutzer-Einstellungen | + | ((Browser-Zoom vergrössert zwar alles. Trotzdem ist '' |
| - | Viele Nutzerinnen und Nutzer verändern bewusst die **Standard-Schriftgrösse** im Browser oder verwenden **Zoom** bzw. Betriebssystem-Einstellungen (z.B. Sehhilfe, grosse Schrift). | + | |
| - | * Mit **rem/em** „gehen“ Ihre Schriftgrössen **automatisch** mit dieser Einstellung mit, weil sie relativ gerechnet werden. | + | <WRAP center round box 80%> |
| - | | + | <code css> |
| + | h1 { font-size: 64px; } | ||
| + | p { font-size: 18px; } | ||
| + | </ | ||
| + | </ | ||
| - | ==== 2) Konsistenz über das ganze Projekt (Designsystem) ==== | + | === em === |
| - | Mit **rem** können Sie ein klares System bauen: | + | * '' |
| - | | + | * '' |
| - | * Alles andere wird in rem definiert (z.B. h1 = 4rem, p = 1.125rem) | + | |
| - | Damit können Sie das „Gesamtbild“ sehr kontrolliert skalieren, ohne jedes Element einzeln anzufassen. | + | ((Historisch stammt |
| + | <WRAP center round box 80%> | ||
| + | <code css> | ||
| + | body { font-size: 16px; } /* Basis */ | ||
| + | h1 { font-size: 2em; } /* 2 × 16px = 32px */ | ||
| + | </ | ||
| + | </ | ||
| - | ==== 3) Robustheit bei Komponenten ==== | + | **Die typische EM-Falle** |
| - | **em** ist besonders nützlich innerhalb von Komponenten: | + | Wenn mehrere Eltern-Elemente die Schrift bereits verändern, multipliziert sich der Effekt: |
| - | * Buttons, Badges, Cards können Abstände (padding/ | + | |
| - | * so bleiben sie proportional zur Textgrösse | + | |
| - | Beispiel: Wenn ein Button-Text grösser wird, wächst das Padding automatisch mit – das wirkt typografisch sauber und verhindert „gequetschte“ Buttons. | + | <WRAP center round box 80%> |
| + | <code css> | ||
| + | body { font-size: 1.2em; } /* 1.2 × 16px = 19.2px */ | ||
| + | div { font-size: 1.3em; } /* 1.3 × 19.2px = 24.96px */ | ||
| + | h1 { font-size: 2em; } /* 2 × 24.96px = 49.92px */ | ||
| + | </ | ||
| + | </ | ||
| + | ((Darum ist '' | ||
| - | === px – wann ist es trotzdem okay? === | + | **Wann ist em sinnvoll** |
| - | **px ist nicht „verboten“**, aber Sie sollten wissen, wofür: | + | * Für Proportionen innerhalb einer Komponente: Padding, Icon-Grössen, |
| - | * **sehr feine Linien** (z.B. 1px border) | + | |
| - | * **pixelgenaue Details**, wenn es wirklich fix sein muss | + | |
| - | * einzelne Sonderfälle im Layout | + | |
| - | Viele moderne Designsysteme nutzen rem für Typografie + Spacing und px nur für kleine, technische Details. | + | <WRAP center round box 80%> |
| + | <code css> | ||
| + | button { | ||
| + | font-size: 1rem; | ||
| + | padding: 0.8em 1.2em; /* wächst mit der Button-Schrift */ | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | === rem === | ||
| + | * '' | ||
| + | * Vorteil: bleibt konsistent, egal wie tief ein Element verschachtelt ist. | ||
| - | === em vs rem – wann welches? === | + | <WRAP center round box 80%> |
| - | * **rem**: für **globale Typografie** (h1, p, nav, Standardtext) → konsistent im ganzen Projekt | + | <code css> |
| - | * **em**: für **komponenten-interne Proportionen** (Padding, Icon-Grösse, | + | html { font-size: 16px; } |
| + | h1 { font-size: 4rem; } /* 64px */ | ||
| + | p { font-size: 1.125rem; } /* 18px */ | ||
| + | </ | ||
| + | </ | ||
| + | ((Mit '' | ||
| - | === line-height | + | ==== Empfehlung für dieses Modul ==== |
| - | Für Lesbarkeit ist eine passende Zeilenhöhe zentral. | + | |
| - | * Best Practice: | + | * **em** gezielt innerhalb von Komponenten einsetzen. |
| + | * **px** sparsam einsetzen, z.B. für 1px Linien oder sehr feine Details. | ||
| - | Einheitenlose | + | ==== line-height |
| + | Setzen Sie '' | ||
| + | <WRAP center round box 80%> | ||
| + | <code css> | ||
| + | body { line-height: | ||
| + | </ | ||
| + | </ | ||
| - | ===== CSS-Variablen | + | ((Einheitenlose '' |
| - | ==== Was sind CSS-Variablen? ==== | + | ---- |
| - | CSS-Variablen (korrekt: Custom Properties) sind benannte Werte, die Sie **einmal zentral** definieren und dann überall mit '' | + | |
| - | **Beispiel: | + | ===== 2) CSS-Variablen ===== |
| + | |||
| + | ==== Was sind CSS-Variablen ==== | ||
| + | CSS-Variablen sind benannte Werte, die Sie einmal zentral definieren und dann überall wiederverwenden. | ||
| + | |||
| + | <WRAP center round box 80%> | ||
| <code css> | <code css> | ||
| :root { | :root { | ||
| --primary: #263fa9; | --primary: #263fa9; | ||
| --text: #223344; | --text: #223344; | ||
| + | --h1-size: 4rem; | ||
| } | } | ||
| - | body { | + | |
| - | | + | body { color: var(--text); |
| - | } | + | button { background: var(--primary); |
| - | button { | + | h1 { font-size: var(--h1-size); |
| - | | + | |
| - | } | + | |
| </ | </ | ||
| + | </ | ||
| - | ==== Warum ist das nützlich? | + | ==== Warum lohnt sich das ==== |
| - | * **Wiederverwendbarkeit**: Farben/Grössen müssen nicht überall kopiert werden. | + | * **Wiederverwendbarkeit:** weniger Copy/Paste, weniger Fehler |
| - | * **Wartbarkeit**: Eine Änderung in '': | + | * **Wartbarkeit:** 1 Änderung in '': |
| - | * **Semantik**: '' | + | * **Lesbarkeit:** Namen sind verständlicher als zufällige Hex-Zahlen |
| <WRAP center round box 80%> | <WRAP center round box 80%> | ||
| - | **Vergleich zu Print-Design | + | **Vergleich zu Print-Design** |
| \\ | \\ | ||
| - | CSS-Variablen | + | CSS-Variablen |
| </ | </ | ||
| + | ---- | ||
| - | ===== CSS Cascade | + | ===== 3) CSS Cascade ===== |
| + | {{: | ||
| + | \\ | ||
| + | //Viele CSS-Regeln funktionieren nach dem Prinzip " | ||
| <WRAP center round box 80%> | <WRAP center round box 80%> | ||
| - | **Was ist die Kaskade?** | + | **Was ist die Kaskade** |
| \\ | \\ | ||
| - | Die CSS-Kaskade | + | Die CSS-Kaskade entscheidet, |
| - | \\ | + | |
| - | Kurz: Wenn CSS „streitet“, | + | |
| </ | </ | ||
| - | ==== Warum ist das wichtig? | + | ==== Vererbung |
| - | In echten Projekten schreiben Sie nicht nur 1 Regel pro Element: | + | Einige Eigenschaften werden von Eltern an Kinder |
| - | | + | |
| - | | + | |
| - | | + | |
| - | * Responsive Regeln (Media Queries) | + | |
| - | * und manchmal überschreibt man später etwas gezielt | + | |
| - | Ohne Kaskade wäre unklar, was am Ende gilt. | + | * Häufig vererbt: '' |
| + | * Meist nicht vererbt: '' | ||
| - | ==== 1) Vererbung (Inheritance): | + | <WRAP center round box 80%> |
| - | Einige CSS-Eigenschaften werden vom Eltern-Element an Kinder **weitergegeben**, | + | |
| - | + | ||
| - | **Typisch vererbt (sehr häufig): | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | **Typisch NICHT vererbt: | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | **Beispiel: | + | |
| <code css> | <code css> | ||
| - | body { | + | body { |
| font-family: | font-family: | ||
| color: #223344; | color: #223344; | ||
| Zeile 188: | Zeile 223: | ||
| } | } | ||
| </ | </ | ||
| + | </ | ||
| - | Alle Textelemente im Body erhalten diese Werte, solange sie nicht selbst etwas anderes | + | ==== Überschreiben ==== |
| + | Wenn zwei Regeln dieselbe Eigenschaft | ||
| - | ==== 2) Überschreiben (Overriding): Wer gewinnt bei Konflikten? ==== | + | - **Wichtigkeit:** '' |
| - | Wenn mehrere Regeln dieselbe Eigenschaft setzen (z.B. '' | + | - **Spezifität: |
| - | Das passiert in dieser | + | - **Reihenfolge: |
| - | === Regel 1: Wichtigkeit ('' | + | <WRAP center round box 80%> |
| - | * '' | + | |
| - | + | ||
| - | ((In diesem Modul: '' | + | |
| - | + | ||
| - | === Regel 2: Spezifität (Specificity) === | + | |
| - | Je „genauer“ ein Selektor ist, desto stärker ist er. | + | |
| - | + | ||
| - | **Grob von schwach nach stark:** | + | |
| - | - Elementselektor: | + | |
| - | - Klassenselektor: | + | |
| - | - ID-Selektor: | + | |
| - | + | ||
| - | **Beispiel: | + | |
| <code css> | <code css> | ||
| - | a { color: black; } /* schwach */ | + | a { color: black; } |
| - | .menu a { color: gray; } /* stärker */ | + | .menu a { color: gray; } |
| - | a.active { color: blue; } /* ähnlich stark wie .menu a (Klasse + Element) */ | + | a.active { color: blue; } |
| - | #special a { color: red; } /* sehr stark */ | + | #special a { color: red; } |
| </ | </ | ||
| + | </ | ||
| - | === Regel 3: Reihenfolge im CSS (Last Rule Wins) === | + | ==== Reihenfolge im CSS ==== |
| - | Wenn zwei Regeln **gleich spezifisch** sind, gewinnt die Regel, die **später im CSS** steht. | + | Bei gleicher Spezifität |
| - | **Beispiel: | + | <WRAP center round box 80%> |
| <code css> | <code css> | ||
| .menu a { color: gray; } | .menu a { color: gray; } | ||
| .menu a { color: green; } /* gewinnt, weil später */ | .menu a { color: green; } /* gewinnt, weil später */ | ||
| </ | </ | ||
| + | </ | ||
| + | Für ein vertieftes Verständnis schauen Sie sich diese interaktive Darstellung an: | ||
| + | [[https:// | ||
| + | ---- | ||
| - | ==== Media Queries und Kaskade: „CSS gilt nur wenn Bedingung stimmt“ | + | ===== 4) Media Queries und Responsive Design ===== |
| - | Media Queries | + | {{: |
| - | Sie sind wie zusätzliche Regeln, die nur aktiv werden, wenn die Bedingung erfüllt ist. | + | |
| - | **Beispiel: | + | ==== Was macht eine Media Query ==== |
| - | <code css> | + | Media Queries passen |
| - | # | + | |
| - | + | ||
| - | @media screen and (width < 1024px) { | + | |
| - | # | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | Was passiert? | + | |
| - | * Über 1024px gilt: '' | + | |
| - | * Unter 1024px wird die zweite Regel aktiv und überschreibt '' | + | |
| - | + | ||
| - | Media Query überschreibt nur dann, wenn sie „an“ ist. Und auch dort gilt: Spezifität + Reihenfolge entscheiden. | + | |
| + | ==== Breakpoints ==== | ||
| + | Ein Breakpoint ist eine Breite, bei der Sie das Layout anpassen, weil es sonst nicht mehr sauber wirkt. | ||
| <WRAP center round box 80%> | <WRAP center round box 80%> | ||
| - | **CSS debuggen** | + | <code css> |
| - | \\ | + | @media (width < 1024px) { ... } |
| - | Wenn etwas „komisch“ aussieht, schauen Sie in DevTools: Welche Regel ist durchgestrichen? | + | </ |
| </ | </ | ||
| + | Typische Hinweise, dass ein Breakpoint nötig ist: | ||
| + | * Elemente überlappen oder stossen sich | ||
| + | * Navigation passt nicht mehr | ||
| + | * 2 Spalten werden zu eng | ||
| + | * horizontales Scrollen entsteht | ||
| - | ===== Media Queries & Responsive Design ===== | + | <WRAP center round tip 70%> |
| - | + | **Merksatz:** Ein Breakpoint ist ein Layout-Umbruchpunkt, | |
| - | ==== Was macht eine Media Query? ==== | + | </ |
| - | Media Queries erlauben, dass sich das Layout an verschiedene Bildschirmgrössen anpasst, ohne den Inhalt zu ändern – nur die Darstellung wird angepasst. | + | |
| - | + | ||
| - | ==== Breakpoints: | + | |
| - | Setzen Sie Breakpoints dann, wenn Ihr Layout | + | |
| ==== Beispiel aus unserem Projekt ==== | ==== Beispiel aus unserem Projekt ==== | ||
| - | Unser Desktop-Layout ist 2-spaltig (Text links, Bild rechts). | + | Desktop: Text links, Bild rechts. |
| - | Auf Mobile | + | Mobile: |
| + | |||
| + | <WRAP center round box 80%> | ||
| <code css> | <code css> | ||
| + | # | ||
| + | |||
| @media screen and (width < 1024px) { | @media screen and (width < 1024px) { | ||
| - | # | + | # |
| - | | + | |
| - | | + | |
| } | } | ||
| </ | </ | ||
| + | </ | ||
| ==== Media Queries und Kaskade ==== | ==== Media Queries und Kaskade ==== | ||
| - | * Innerhalb der Media Query überschreiben Sie **nur** die Eigenschaften, | + | Media Queries folgen denselben Regeln wie normales CSS: |
| - | * Wenn ein Selektor gleich bleibt (z.B. ''# | + | * Bei aktivem Breakpoint |
| + | * Bei gleicher Spezifität | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== 5) Responsive Testing mit DevTools ===== | ||
| + | {{: | ||
| - | ===== Responsive Testing mit DevTools ===== | ||
| * Öffnen Sie DevTools (Chrome/ | * Öffnen Sie DevTools (Chrome/ | ||
| - | * Aktivieren Sie den **Device Toolbar** (Handy/ | + | * Aktivieren Sie Device Toolbar (Handy/ |
| * Testen Sie: | * Testen Sie: | ||
| - | - Breitenwechsel über/ | + | - Breitenwechsel über/unter 1024px |
| - | - verschiedene | + | - Presets (z.B. iPhone, iPad) |
| - | - Landscape/Portrait | + | - Hoch-/Querformat |
| - | * Prüfen Sie auch: | + | * Prüfen Sie: |
| - | - ob Elemente verschwinden/ | + | - Überlappungen oder abgeschnittene Bereiche |
| - | - ob Text zu klein/gross wirkt | + | - horizontales Scrollen |
| - | - ob es horizontales Scrollen gibt (meist ein Zeichen für zu grosse Breiten) | + | - Lesbarkeit der Schrift |
| + | <WRAP center round box 80%> | ||
| + | **Praxis-Tipp** | ||
| + | \\ | ||
| + | Wenn etwas nicht greift: DevTools → „Styles“ öffnen und schauen, welche Regel durchgestrichen ist. Das ist Kaskade in Aktion. | ||
| + | </ | ||