Informatik

Für jeden Bildschirm gestalten

Deine Seite wird auf einem Handy gelesen, auf einem Tablet, auf einem großen Bildschirm – und vielleicht vorgelesen. Sie muss überall funktionieren. Das nennt man responsiv.

Die Grundlage: nichts festnageln

Die meiste Arbeit erledigt sich von selbst, wenn man keine festen Breiten vorgibt. Ein <p> ohne jede CSS-Regel ist bereits responsiv – es füllt den vorhandenen Platz und bricht um.

Vier Regeln, die fast immer richtig sind:

* { box-sizing: border-box; }
 
img { max-width: 100%; height: auto; }
 
body { max-width: 70rem; margin-inline: auto; padding: 1rem; }
  • max-width statt width – so wird es bei wenig Platz schmaler statt überzustehen
  • Bilder nie breiter als ihr Platz
  • Innenabstand am body, damit der Text auf dem Handy nicht am Rand klebt

Mit der Größe rechnen

<h1>Diese Überschrift wächst mit</h1> <p>Verschiebe die Trennlinie zwischen Vorschau und Editor und beobachte die Überschrift und die Abstände.</p>
* { box-sizing: border-box; } body { font-family: system-ui, sans-serif; padding: clamp(1rem, 4vw, 3rem); line-height: 1.6; } h1 { font-size: clamp(1.5rem, 5vw, 3rem); }

clamp(kleinster, gewünschter, größter) klemmt einen Wert zwischen zwei Grenzen ein.

clamp(1.5rem, 5vw, 3rem) bedeutet: „Nimm 5 % der Fensterbreite – aber nie weniger als 1.5rem und nie mehr als 3rem."

Damit wächst die Schrift mit dem Bildschirm, ohne auf dem Handy unlesbar klein und auf dem Fernseher absurd groß zu werden. Und man braucht dafür keine einzige Fallunterscheidung.

Fallunterscheidungen: Media Queries

Manches lässt sich nicht rechnen. Dann fragt man nach der Fensterbreite.

<div class="seite"> <header>Kopfbereich</header> <nav>Navigation</nav> <main>Hauptinhalt</main> <footer>Fußbereich</footer> </div>
* { box-sizing: border-box; } body { font-family: system-ui, sans-serif; margin: 0; } .seite { display: grid; gap: 1rem; padding: 1rem; } header { background: hsl(210 60% 80%); } nav { background: hsl(140 40% 82%); } main { background: hsl(45 80% 85%); } footer { background: hsl(0 40% 85%); } header, nav, main, footer { padding: 1rem; border-radius: 0.5rem; } @media (min-width: 45rem) { .seite { grid-template-columns: 12rem 1fr; } header, footer { grid-column: 1 / -1; } }
@media (min-width: 45rem) {
  /* gilt nur, wenn das Fenster mindestens 45rem breit ist */
}

Eine Media Query ist eine Bedingung. Die Regeln darin gelten nur, wenn sie erfüllt ist – so wie ein if in Java.

Schreib von schmal nach breit. Also zuerst die Regeln für kleine Bildschirme, dann mit min-width die Ergänzungen für größere. Man nennt das mobile first.

Der Grund: Auf einem schmalen Bildschirm ist einfach alles untereinander – das ist der einfachste Fall und der Ausgangszustand von HTML. Alles Weitere kommt hinzu, wenn Platz da ist.

a) Verschiebe die Trennlinie langsam. An welcher Stelle springt das Layout um?

b) Ändere 45rem auf 30rem. Was ändert sich?

c) Schreibe die Media Query um: Sie soll max-width statt min-width benutzen und dasselbe Ergebnis liefern. Warum ist die min-width-Fassung trotzdem die bessere?

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Was der Browser sonst noch weiß

<article class="karte"> <h2>Helles und dunkles Design</h2> <p>Stell in deinem Betriebssystem auf dunkles Design um und lade diese Seite neu.</p> </article>
* { box-sizing: border-box; } :root { color-scheme: light dark; --hintergrund: white; --text: hsl(220 15% 20%); --rahmen: hsl(220 20% 80%); } @media (prefers-color-scheme: dark) { :root { --hintergrund: hsl(220 15% 15%); --text: hsl(220 15% 92%); --rahmen: hsl(220 15% 35%); } } body { font-family: system-ui, sans-serif; background: var(--hintergrund); color: var(--text); padding: 1rem; margin: 0; } .karte { border: 1px solid var(--rahmen); border-radius: 0.5rem; padding: 1rem; max-width: 40rem; }

prefers-color-scheme fragt nach der Einstellung des Betriebssystems. Es gibt noch mehr solcher Fragen:

Abfrage Bedeutung
prefers-reduced-motion Jemand hat Animationen abgeschaltet – oft wegen Übelkeit bei Bewegung.
print Die Seite wird gedruckt.
hover: none Das Gerät kennt kein Überfahren mit der Maus, also ein Touchscreen.

Bemerkenswert daran: Der Browser weiß Dinge über die Person vor dem Bildschirm und ihre Bedürfnisse – und du kannst darauf eingehen, ohne irgendetwas über sie zu erfahren. Die Seite fragt nicht „wer bist du", sondern „was brauchst du".

Beachte auch, wie wenig Arbeit die eigenen Eigenschaften aus Lektion 3 hier machen: Für das dunkle Design mussten nur drei Werte neu gesetzt werden, nicht jede einzelne Regel.

Aufgabe

Baue eine Kartenübersicht, die sich anpasst:

a) Die Karten sollen in einem Raster liegen, das von selbst so viele Spalten macht, wie bei mindestens 14rem Breite hineinpassen.

b) Der Abstand zwischen den Karten soll zwischen 0.5rem und 2rem mit der Fensterbreite wachsen.

c) Die Überschrift soll zwischen 1.5rem und 2.5rem mitwachsen.

d) Ab 50rem Fensterbreite soll die Seite höchstens 60rem breit und zentriert sein.

<h1>Unsere Pflanzen</h1> <div class="karten"> <article><h2>Tomaten</h2><p>Brauchen viel Sonne.</p></article> <article><h2>Basilikum</h2><p>Mag es warm.</p></article> <article><h2>Erdbeeren</h2><p>Tragen im Juni.</p></article> <article><h2>Minze</h2><p>Wuchert gern.</p></article> </div>
* { box-sizing: border-box; } body { font-family: system-ui, sans-serif; padding: 1rem; } .karten article { background: hsl(140 40% 92%); border-radius: 0.5rem; padding: 1rem; }
Tipp 1: zu a)

Die Zeile kennst du aus Lektion 5 – nur mit einer anderen Mindestbreite.

Tipp 2: zu b) und c)

gap und font-size vertragen beide ein clamp(…).

Lösung. Erfrage das Passwort bei deiner Lehrkraft.

Selbsttest

Für jeden Bildschirm gestalten

Teilbare URL erstellen

Abschnitte auswählen