3. Unterrichtsblock: Größen, Text, Schriften und Icons

Inhaltsverzeichnis
Breite und Höhe
Mit width und height legst du die Größe des Inhalts fest (mit box-sizing: border-box bis zur Außenkante des Rahmens, wie in Block 2). Die Angabe kann in Pixeln erfolgen oder in Prozent. Prozent beziehen sich auf die Größe des Elternelements.
<div class="a">width: 200px</div>
<div class="b">width: 50%</div>
<div class="c">width: 100% (Standard bei Blöcken)</div>
div { background-color: #bfdbfe; padding: 10px; margin-bottom: 8px; box-sizing: border-box; }
.a { width: 200px; height: 60px; }
.b { width: 50%; }
Für Seiten, die auf großen und kleinen Bildschirmen funktionieren sollen, ist width oft zu starr. Besser sind Höchst- und Mindestwerte: max-width begrenzt die Breite nach oben, min-width nach unten. Mit margin: 0 auto; zentrierst du ein Element mit Breite: auto verteilt den übrigen Platz gleichmäßig links und rechts.
<div class="seite">Eine zentrierte Spalte mit max-width: 400px</div>
.seite { max-width: 400px; margin: 0 auto; background-color: #bfdbfe; padding: 10px; }
Zwei Dinge fallen auf, wenn man mit Größen arbeitet:
- Inline-Elemente wie
spanundaignorierenwidthundheight. Sie sind genau so groß wie ihr Inhalt. Bilder sind eine Ausnahme: Sie nehmen beides an. - Ein Bild, das größer ist als sein Platz, macht die Seite zu breit. Mit
max-width: 100%; height: auto;schrumpft es auf die Breite des Elternelements, ohne verzerrt zu werden.
max-width statt width: Ein Element mit max-width: 800px; wird nie breiter als 800 px, darf aber schmaler sein. Genau das brauchst du für Seiten, die auf jedem Bildschirm gut aussehen sollen.Kontur (outline)
Neben border gibt es outline. Es sieht ähnlich aus, verhält sich aber anders: Eine Kontur wird um das Element gemalt, gehört aber nicht zum Box-Modell. Sie belegt keinen Platz und verschiebt nichts.
border | outline | |
|---|---|---|
| Platz | gehört zur Box, vergrößert sie | belegt keinen Platz |
| Einzelne Seiten | ja (border-left, …) | nein, immer rundherum |
| Abgerundete Ecken | mit border-radius | folgt meist der Form des Elements |
| Abstand zum Rahmen | nein | ja, mit outline-offset |
<p class="a">border: 4px</p>
<p class="b">outline: 4px, offset 8px</p>
p { margin: 16px; padding: 8px; }
.a { border: 4px solid seagreen; }
.b { outline: 4px solid crimson; outline-offset: 8px; }
Ihr wichtigster Einsatz: der Fokus. Wenn du in ein Formularfeld klickst oder mit der Tab-Taste hinspringst, zeichnet der Browser eine Kontur darum. Mit input:focus { outline: ... } bestimmst du ihr Aussehen. :focus ist eine Art Zustand, den du später genauer kennenlernst.
outline: none;, ohne sie zu ersetzen. Wer nur die Tastatur bedient, sieht sonst nicht mehr, wo er gerade ist.Aufgabe 1 – border oder outline?
Zeit: ca. 7 Minuten
Zwei Boxen sind gleich breit eingestellt, die eine hat einen Rahmen (border), die andere eine Kontur (outline). Sage voraus, wie breit jede Box in Wirklichkeit ist.
Lege outline.html an (Inhalt des body, das style-Element gehört in den head):
<div class="a">border: 10px</div>
<div class="b">outline: 10px</div>
<div class="c">outline-offset: 10px</div>
- Gib allen
divdie Regelwidth: 200px; background-color: lightyellow; margin-bottom: 30px;. .abekommtborder: 10px solid seagreen;,.bbekommtoutline: 10px solid crimson;,.cbekommtoutline: 4px solid navy;undoutline-offset: 10px;.- Schreibe auf, wie breit du jede der drei Boxen erwartest. Miss dann in den Entwicklerwerkzeugen (Reiter „Elemente“, Maus über das Element halten) und vergleiche.
- Erkläre in einem Satz, warum
outlinedas Layout nicht verschiebt.
Kontrolle: Die erste Box ist 220 px breit (200 + 2 × 10), die beiden anderen sind 200 px breit, obwohl die Konturen weit nach außen reichen.
Text gestalten
Zum Gestalten von Text gibt es viele Eigenschaften. Hier die wichtigsten, mit allen Werten im Beispiel:
<p class="l">text-align: left</p>
<p class="c">text-align: center</p>
<p class="r">text-align: right</p>
<p class="j">text-align: justify. Beim Blocksatz verteilt der Browser die Wörter so, dass jede Zeile gleich lang ist, außer der letzten. Das sieht ordentlich aus, kann aber große Lücken erzeugen.</p>
p { margin: 4px 0; background-color: #f1f5f9; }
.l { text-align: left; }
.c { text-align: center; }
.r { text-align: right; }
.j { text-align: justify; }
text-align richtet den Text innerhalb seiner Box aus, nicht die Box selbst. Weitere Eigenschaften:
| Eigenschaft | Beispiel | Wirkung |
|---|---|---|
line-height | 1.6 | Zeilenabstand; ohne Einheit als Vielfaches der Schriftgröße (1.5 bis 1.7 liest sich gut) |
text-transform | uppercase | alles GROSS (lowercase klein, capitalize jedes Wort groß) |
letter-spacing | 2px | Abstand zwischen den Buchstaben |
word-spacing | 10px | Abstand zwischen den Wörtern |
text-indent | 30px | Einrückung der ersten Zeile |
text-shadow | 2px 2px 4px gray | Schatten: Versatz rechts, Versatz unten, Unschärfe, Farbe |
<p class="a">Unterwegs in den Alpen</p>
<p class="b">Unterwegs in den Alpen</p>
<p class="c">Unterwegs in den Alpen: Der Text dieses Absatzes ist so lang, dass er in eine zweite Zeile umbrechen muss, damit man die Einrückung sieht.</p>
<p class="d">Unterwegs in den Alpen</p>
.a { text-transform: uppercase; letter-spacing: 3px; }
.b { text-shadow: 2px 2px 4px gray; font-size: 28px; }
.c { text-indent: 30px; line-height: 1.8; }
.d { word-spacing: 12px; }
Mit text-decoration setzt du Linien an den Text. Am häufigsten brauchst du none, um bei Links die Unterstreichung zu entfernen:
| Wert | Wirkung |
|---|---|
none | keine Linie; entfernt zum Beispiel die Unterstreichung von Links |
underline | Linie unter dem Text |
overline | Linie über dem Text |
line-through | durchgestrichen |
<p class="a">underline</p>
<p class="b">overline</p>
<p class="c">line-through</p>
<p><a href="#" class="d">Link ohne Unterstreichung</a></p>
.a { text-decoration: underline; }
.b { text-decoration: overline; }
.c { text-decoration: line-through; }
.d { text-decoration: none; }
line-height ohne Einheit an (1.6 statt 1.6em). Dann rechnet jedes Element mit seiner eigenen Schriftgröße, und verschachtelte Texte bekommen keinen falschen Zeilenabstand.Schriften
Die Schrift bestimmst du mit font-family. Weil nicht jeder Rechner jede Schrift hat, gibst du eine Liste an: Der Browser nimmt die erste, die er kennt. Am Ende steht eine generische Familie als Notlösung:
body {
font-family: "Segoe UI", Arial, sans-serif;
}
Namen mit Leerzeichen stehen in Anführungszeichen. Diese fünf generischen Familien kennt jeder Browser:
| Familie | Aussehen | Ihr Browser zeigt |
|---|---|---|
serif | Schrift mit Serifen (kleinen Füßchen) | Bergwandern in den Alpen |
sans-serif | Schrift ohne Serifen | Bergwandern in den Alpen |
monospace | jedes Zeichen gleich breit (für Code) | Bergwandern in den Alpen |
cursive | Handschrift-Stil | Bergwandern in den Alpen |
fantasy | Zierschrift (selten sinnvoll) | Bergwandern in den Alpen |
Für die Größe gibt es mehrere Einheiten:
| Einheit | Bedeutung | Beispiel |
|---|---|---|
px | feste Pixel | font-size: 16px; |
em | Vielfaches der Schrift des Elternelements | 1.5em im Absatz mit 20 px: 30 px |
rem | Vielfaches der Schrift von html (Standard 16 px) | 1.5rem: immer 24 px |
% | Prozent der Schrift des Elternelements | 150% entspricht 1.5em |
font-weight stellt die Stärke ein (normal, bold oder 100 bis 900), font-style die Schräglage (italic):
<p class="a">font-weight: bold</p>
<p class="b">font-style: italic</p>
<p class="c">font-size: 1.5rem</p>
.a { font-weight: bold; }
.b { font-style: italic; }
.c { font-size: 1.5rem; }
Wer eine besondere Schrift haben will, kann sie bei Google Fonts aussuchen. Die Seite liefert eine link-Zeile für den head; danach benutzt du den Namen in font-family wie jede andere Schrift. Gib immer eine Ersatzfamilie an:
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap">
<p class="logo">Alpenblick</p>
.logo { font-family: Pacifico, cursive; font-size: 40px; margin: 0; }
Aufgabe 2 – Wie groß wird der Text?
Zeit: ca. 8 Minuten
Drei Elemente stecken ineinander. Das äußere hat font-size: 20px;, die beiden inneren font-size: 1.5em;. Sage voraus, wie groß die Schrift auf jeder Stufe ist.
Lege schriftgroesse.html an (Inhalt des body):
<div class="stufe1">Stufe 1
<div class="stufe2">Stufe 2
<div class="stufe3">Stufe 3</div>
</div>
</div>
- Schreibe deine Vorhersage für alle drei Stufen auf. Gib dann
.stufe1die Schrift20pxund.stufe2, .stufe3die Schrift1.5em. - Prüfe die Größen mit den Entwicklerwerkzeugen: Markiere ein Element und lies rechts im Reiter „Berechnet“ den Wert von
font-sizeab. Wo lagst du falsch? - Ersetze bei den beiden inneren Stufen
emdurchrem. Sage voraus, was sich ändert, und prüfe es.
Kontrolle: Mit em sind es 20 px, 30 px und 45 px. Mit rem sind die Stufen 2 und 3 beide 24 px groß.
em rechnet vom Elternelement aus, deshalb wächst die Schrift bei jeder Verschachtelung weiter (20 × 1,5 × 1,5 = 45). rem rechnet immer von der Schrift des html-Elements aus (Standard 16 px), egal wie tief ein Element steckt: 1,5 × 16 = 24.
Icons
Kleine Symbole machen Seiten übersichtlicher. Du kannst sie als Bilder einbinden oder als Icon-Schrift: Eine Schrift, in der die Buchstaben Symbole sind. Das Gute daran: Du gestaltest sie wie Text, mit font-size für die Größe und color für die Farbe.
Eine kostenlose Icon-Schrift sind die Google Material Icons. Du bindest das Stylesheet im head ein und schreibst den Namen des Icons in ein span mit der Klasse material-icons. Alle Namen findest du auf fonts.google.com/icons.
<!-- im head -->
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<!-- im body -->
<span class="material-icons">home</span>
<span class="material-icons">schedule</span>
<span class="material-icons">terrain</span>
<span class="material-icons">home</span>
<span class="material-icons gross">home</span>
<span class="material-icons rot">favorite</span>
<p><span class="material-icons mitte">schedule</span> Gehzeit: 2 Stunden</p>
.gross { font-size: 48px; }
.rot { color: crimson; }
.mitte { vertical-align: middle; color: seagreen; }
vertical-align: middle; sitzt ein Icon auf Höhe der Textmitte.Übungsaufgaben
Die Aufgaben 3 bis 6 sind der Kern und dauern zusammen etwa 45 Minuten. Du arbeitest wieder an deiner Projektseite. Sage bei jeder Aufgabe zuerst voraus, was passiert, und prüfe es dann. Wer früher fertig ist, macht die Bonusaufgaben.
Aufgabe 3 – Typografie der Projektseite
Zeit: ca. 12 Minuten
Auf großen Bildschirmen laufen Zeilen über 1500 Pixel Breite. Das liest niemand gern. Du gibst deiner Projektseite eine gut lesbare Spalte und eine bessere Schrift.
- Gib
maineine Höchstbreite von 800 px (max-width) und zentriere es mitmargin: 0 auto;. - Stelle bei
bodyeine Schriftliste ein:font-family: "Segoe UI", Arial, sans-serif;. Ergänzeline-height: 1.6;(ohne Einheit). - Stelle die Schriftgröße der Klasse
hervorgehobenauf1.25remum, statt in Pixeln. - Ziehe das Browserfenster breit und schmal. Beschreibe, was mit der Textspalte passiert.
Kontrolle: Im breiten Fenster steht der Text in einer mittigen Spalte, in den Entwicklerwerkzeugen ist main höchstens 800 px breit. Im schmalen Fenster füllt der Text die ganze Breite. Der größere Zeilenabstand macht die Absätze luftiger.
max-width begrenzt nur nach oben: Ist das Fenster schmaler, gibt der Browser dem Element weniger Breite. margin: 0 auto; verteilt den übrigen Platz links und rechts gleichmäßig. Das funktioniert nur, weil main eine Breite hat. Die vollständige Datei steht in style.css der Musterlösung.
Aufgabe 4 – Tourenkarten mit Icons
Zeit: ca. 12 Minuten
Die Tourenkarten werden lesbarer, wenn Gehzeit und Schwierigkeit ein Symbol haben. Du verwendest dafür die Google Material Icons.
- Binde im
headvonindex.htmldas Icon-Stylesheet ein (siehe Abschnitt „Icons“) und setze vor die Gehzeit das Iconschedule, vor die Schwierigkeit das Iconterrain, vor den Titel das Icondirections_walk. - Färbe alle Icons über
colorin einem Blauton deiner Palette. Bei der Klasseschwersollen sie rot sein. - Die Icons sitzen vermutlich etwas zu hoch oder zu tief. Mit
vertical-align: middle;richtest du sie an der Mitte der Textzeile aus. Setze zusätzlichmargin: 4px 0;für die Absätze in den Karten. - Mache die Titel-Icons mit
font-sizegrößer (28 px) als die kleinen Icons in den Absätzen (der Standard sind 24 px).
Kontrolle: Jede Karte hat drei Icons, die auf Höhe des Textes sitzen. Die Icons der Gipfeltour sind rot, die anderen blau.
Die Regel .schwer .material-icons trifft nur Icons innerhalb von .schwer (Nachfahrenselektor mit Leerzeichen, wie nav a im Bonus von Block 1). Sie steht unter der allgemeinen Regel und ist außerdem genauer, deshalb gewinnt sie.
Aufgabe 5 – Ein Hero-Bild, das nie zu breit ist
Zeit: ca. 8 Minuten
Ein großes Bild kann auf schmalen Bildschirmen die Seite breiter machen als das Fenster. Dann erscheint ein waagerechter Rollbalken. Das vermeidest du mit zwei Zeilen CSS.
- Füge am Anfang von
maininindex.htmlein großes Bild ein:<img class="hero" src="images/hobby.svg" alt="Gezeichnete Berge mit Sonne" width="1200">. Nimm gern ein eigenes Foto, wenn du eins hast. - Ziehe das Fenster schmaler als 1200 px. Was passiert mit dem Bild, was mit der Seite?
- Schreibe eine Regel für
.heromitmax-width: 100%;undheight: auto;. Sage voraus, was sich ändert, und prüfe es. - Erkläre in einem Satz, wozu
height: auto;nötig ist.
Kontrolle: Ohne die Regel entsteht im schmalen Fenster ein waagerechter Rollbalken. Mit der Regel passt sich das Bild der Breite an, ohne verzerrt zu werden.
max-width: 100%; begrenzt das Bild auf die Breite seines Elternelements. height: auto; rechnet die Höhe passend zur Breite aus; ohne das bliebe sie fest, und das Bild würde gestaucht. display: block; entfernt die kleine Lücke, die Bilder als Inline-Elemente unter sich lassen.
Aufgabe 6 – Kontaktformular mit sichtbarem Fokus
Zeit: ca. 8 Minuten
Wer die Tab-Taste benutzt, springt von Feld zu Feld. Damit er sieht, wo er gerade ist, braucht das aktive Feld eine deutliche Kontur.
Lege kontakt.html mit dieser Formularstruktur an (oder nimm das Formular aus deinem HTML-Projekt) und binde style.css ein:
<form action="#" method="post">
<p>
<label for="name">Name</label><br>
<input type="text" id="name" name="name">
</p>
<p>
<label for="mail">E-Mail</label><br>
<input type="email" id="mail" name="mail">
</p>
<p>
<label for="text">Nachricht</label><br>
<textarea id="text" name="text" rows="5"></textarea>
</p>
<p><button type="submit">Absenden</button></p>
</form>
- Gib
inputundtextareadie Breite100%,padding: 10px;, einen Rahmen2px solidin einem hellen Blaugrau undborder-radius: 6px;. - Klicke in ein Feld. Der Browser zeichnet eine Standard-Kontur. Ersetze sie durch deine eigene:
input:focus, textarea:focus { ... }mitoutline: 3px solidin einem kräftigen Blau undoutline-offset: 2px;.:focusgilt nur für das Feld, in dem der Cursor gerade steht. - Springe mit der Tab-Taste durch die Felder. Sage voraus, ob jedes Feld seine Kontur bekommt, und prüfe es.
- Teste, was passiert, wenn du
outline: none;einstellst. Warum ist das für Tastaturnutzer schlecht?
Kontrolle: Jedes Feld zeigt beim Anklicken und beim Anspringen mit Tab deine blaue Kontur. Ohne Kontur erkennt man nicht, welches Feld aktiv ist.
Der Fokus-Teil der style.css:
Mit outline: none; verschwindet jede Markierung. Wer nur die Tastatur benutzt, weiß dann nicht mehr, wo er ist. Ersetze die Kontur deshalb nie durch nichts, sondern durch eine eigene.
Bonus für Schnelle
Bonusaufgabe 1 – Ein Flyer für den Wandertag
Gestalte frei einen Flyer (bonus-flyer.html) für den Wandertag am Bergsee. Du darfst alles aus den Blöcken 1 bis 3 benutzen.
- Der Flyer ist eine zentrierte Karte (
max-widthetwa 480 px) mit Rahmen, Rundung und Innenabstand. - Er enthält ein Bild (
max-width: 100%), eine Überschrift mit eigener Schrift,letter-spacingundtext-transform, drei Informationen mit je einem Icon (Datum, Ort, Mitbringen) und einen auffälligen Anmeldehinweis. - Alle Farben bestehen aus
hsl()mit einem gemeinsamen Farbton.
Kontrolle: Aus einem Meter Abstand erkennst du sofort, wann und wo der Wandertag stattfindet. Wenn du den Farbton änderst, ändert sich der ganze Flyer.
Bonusaufgabe 2 – Logo-Schriftzug mit Google Font
Mit einer Schrift von Google Fonts und text-shadow baust du einen Schriftzug für den Wanderverein (bonus-logo.html).
- Wähle auf Google Fonts eine auffällige Schrift, zum Beispiel „Pacifico“, und binde sie mit dem
link-Element imheadein. - Setze den Namen „Alpenblick“ in dieser Schrift auf einen dunklen Hintergrund, groß (60 px) und weiß. Gib eine Ersatzschrift mit an, falls die Google-Schrift nicht lädt (
cursive). - Ergänze
letter-spacingund einentext-shadowaus einer hellen Farbe, der etwas versetzt hinter dem Text liegt. Der Schatten besteht aus Versatz rechts, Versatz unten, Unschärfe und Farbe.
Kontrolle: Der Schriftzug steht in der gewählten Schrift, hat sichtbaren Schatten, und mit ausgeschaltetem Internet erscheint die Ersatzschrift.
widthundheightlegen die Größe des Inhalts fest.max-widthbegrenzt nach oben.margin: 0 auto;zentriert ein Element mit Breite. Bilder bekommenmax-width: 100%; height: auto;.outlinezeichnet eine Kontur außerhalb des Rahmens, belegt keinen Platz und eignet sich für den Fokus bei Formularfeldern. Entfernen darf man sie nur, wenn man sie ersetzt.- Text:
text-align,line-height(ohne Einheit, etwa 1.5 bis 1.7),text-decoration,text-transform,letter-spacing,text-indentundtext-shadow. font-familynimmt eine Liste: erst die Wunschschrift, am Ende eine Familie wiesans-serif.emrechnet vom Elternelement,remvomhtml-Element.- Icons kommen als Schrift (Google Material Icons):
<span class="material-icons">name</span>. Größe überfont-size, Farbe übercolor.
