02_MediaQuery
Code-Dateien
| Dateiname | Aktion |
|---|---|
| CODECode_MediaQuery.zip | Download |
Videos
| Dateiname | Aktion |
|---|---|
| VIDEOVideo_MediaQuery_D | Abspielen |
Lernmaterialien
Was ist eine Media Query?
Eine Media Query ist ein Teil von CSS, mit dem du unterschiedliche CSS-Regeln abhängig vom Gerät / Bildschirm anwenden kannst.
Damit kannst du z. B. festlegen:
Auf Handys soll alles untereinander stehen.
Auf PCs sollen Inhalte nebeneinander stehen.
Im Dark Mode sollen andere Farben gelten.
➡️ Media Queries sind ein Kernwerkzeug für Responsive Design.
Warum braucht man Media Queries?
Webseiten werden auf sehr unterschiedlichen Geräten geöffnet:
Smartphone (schmal) 📱
Tablet (mittel)
Laptop / PC (breit) 💻
großer Monitor 🖥️
Wenn du nur „fixes“ CSS schreibst (z. B. feste Breiten), sieht die Seite oft:
am Handy zu breit (man muss scrollen),
am PC zu leer oder unübersichtlich aus.
Media Queries lösen das, indem sie Layout und Schriftgröße anpassen.
Der wichtigste HTML-Eintrag für Mobile
Damit Media Queries auf Handys richtig funktionieren, gehört in den
<head>:
<meta name="viewport" content="width=device-width, initial-scale=1.0">Bedeutung:
width=device-width→ die Seitenbreite = Gerätebreiteinitial-scale=1.0→ nicht automatisch rauszoomen
Syntax einer Media Query
@media (Bedingung) {
/* CSS-Regeln, die nur dann gelten */
}Beispiel:
@media (max-width: 600px) {
body {
background: lightyellow;
}
}➡️ Der Hintergrund wird nur gelb, wenn der Bildschirm 600px oder schmaler ist.
Die häufigsten Bedingungen
1) Breite:
max-width und min-width
✅ max-width (bis zu
einer Breite)
@media (max-width: 600px) { ... }➡️ gilt für 600px und kleiner (typisch: Handy)
✅ min-width (ab einer
Breite)
@media (min-width: 900px) { ... }➡️ gilt ab 900px (typisch: Desktop)
Beispiel 1: Flexbox auf Handy umstellen
Ziel: Desktop → nebeneinander, Handy → untereinander
.container {
display: flex;
gap: 20px;
}
@media (max-width: 600px) {
.container {
flex-direction: column;
}
}Ergebnis:
Desktop:
row(Standard) → nebeneinanderHandy:
column→ untereinander
Beispiel 2: Grid-Spalten anpassen
Ziel: 3 Spalten am PC, 1 Spalte am Handy
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
}
@media (max-width: 700px) {
.grid {
grid-template-columns: 1fr;
}
}Beispiel 3: Schriftgrößen anpassen
Ziel: Auf kleinen Geräten etwas kleinere Schrift
h1 { font-size: 2.2rem; }
p { font-size: 1rem; }
@media (max-width: 600px) {
h1 { font-size: 1.6rem; }
p { font-size: 0.95rem; }
}Beispiel 4: Orientierung (Portrait / Landscape)
@media (orientation: landscape) {
body {
background: lightblue;
}
}➡️ Gilt nur im Querformat.
Beispiel 5: Dark Mode
@media (prefers-color-scheme: dark) {
body {
background: #111;
color: #eee;
}
}➡️ Wenn der Benutzer Dark Mode aktiviert hat, wird die Seite dunkel.
Breakpoints: typische Schwellenwerte
Es gibt keine „einzig richtigen“ Werte, aber oft verwendet man:
| Gerät | Breite (ca.) |
|---|---|
| Handy | bis ~600px |
| Tablet | ~600–900px |
| Desktop | ab ~900px |
Viele Projekte nutzen Breakpoints wie: 576 / 768 / 992 / 1200px (z. B. aus Bootstrap).
Best Practices für den Unterricht
✅ Mobile-first (empfohlen):
Schreibe zuerst CSS für kleine Bildschirme
Dann erweitere mit
min-widthfür größere Geräte
Beispiel:
/* Standard: Mobile */
.grid { grid-template-columns: 1fr; }
/* Tablet und größer */
@media (min-width: 700px) {
.grid { grid-template-columns: repeat(2, 1fr); }
}
/* Desktop und größer */
@media (min-width: 1000px) {
.grid { grid-template-columns: repeat(3, 1fr); }
}Merksatz für Schüler:innen
Media Query = CSS-Regeln, die nur bei bestimmten Bildschirmbedingungen gelten.
Damit wird eine Webseite responsive.
Beispiel
index.html
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Responsive Media Query Example</title>
<!-- Wichtig für Responsive Design -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
</head>
<body>
<header>
<h1>My Responsive Website</h1>
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Projects</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</header>
<main>
<section class="intro">
<h2>Welcome 👋</h2>
<p>
This is a simple example website that demonstrates
<strong>Media Queries</strong>, <strong>Flexbox</strong>,
<strong>Grid</strong> and <strong>Responsive Design</strong>.
</p>
</section>
<section class="cards">
<h2>My Cards</h2>
<div class="grid">
<div class="card">Card A</div>
<div class="card">Card B</div>
<div class="card">Card C</div>
<div class="card">Card D</div>
<div class="card">Card E</div>
<div class="card">Card F</div>
</div>
</section>
</main>
<footer>
<p>© 2025 – Responsive Design Demo</p>
</footer>
</body>
</html>1️⃣ Dokumenttyp & HTML-Grundgerüst
<!DOCTYPE html>
<html lang="de">Erklärung:
<!DOCTYPE html>
→ sagt dem Browser: Das ist modernes HTML5
→ wichtig für korrektes Rendering<html lang="de">
→ Wurzelelement der Seite
→lang="de"hilft:Screenreadern (Barrierefreiheit)
Suchmaschinen
Browsern (z. B. Rechtschreibung)
2️⃣ <head> –
Metadaten (nicht sichtbar)
<head>
<meta charset="UTF-8">
<title>Responsive Media Query Example</title>Erklärung:
<meta charset="UTF-8">
→ ermöglicht Umlaute & Sonderzeichen (ä, ö, ü, €)<title>
→ Titel im Browser-Tab
→ wichtig für SEO & Übersicht
📱 Viewport (sehr wichtig!)
<meta name="viewport" content="width=device-width, initial-scale=1.0">Erklärung:
sorgt dafür, dass die Seite auf Smartphones korrekt skaliert
ohne diesen Tag:
Seite wird „herausgezoomt“
Media Queries funktionieren nicht richtig
🎨 CSS einbinden
<link rel="stylesheet" href="style.css">Erklärung:
verbindet HTML mit der externen CSS-Datei
trennt:
Inhalt (HTML)
Design (CSS)
3️⃣ <body> –
Sichtbarer Seiteninhalt
<body>Alles ab hier ist sichtbar im Browser.
4️⃣ <header> –
Kopfbereich der Seite
<header>
<h1>My Responsive Website</h1>Erklärung:
<header>ist ein semantisches HTML5-Elemententhält meist:
Überschrift
Logo
Navigation
<h1>
→ wichtigste Überschrift der Seite
→ sollte nur einmal pro Seite vorkommen
5️⃣ Navigation <nav>
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Projects</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>Erklärung:
<nav>
→ semantisch: Navigationsbereich<ul>
→ ungeordnete Liste (typisch für Menüs)<li>
→ einzelner Menüpunkt<a href="#">
→ Link
→#ist ein Platzhalter (führt zu keiner Seite)
💡 Warum Listen für Menüs?
logisch
barrierefrei
gut mit CSS (Flexbox) formatierbar
6️⃣ <main> –
Hauptinhalt der Seite
<main>Erklärung:
enthält den zentralen Inhalt
pro Seite nur einmal
wichtig für Screenreader & SEO
7️⃣ Erste Section: Einführung
<section class="intro">
<h2>Welcome 👋</h2>
<p>
This is a simple example website that demonstrates
<strong>Media Queries</strong>, <strong>Flexbox</strong>,
<strong>Grid</strong> and <strong>Responsive Design</strong>.
</p>
</section>Erklärung:
<section>
→ thematischer Abschnittclass="intro"
→ Verbindung zu CSS<h2>
→ Unterüberschrift (logische Hierarchie nachh1)<p>
→ Absatz<strong>
→ semantische Betonung (wichtig, nicht nur fett!)
8️⃣ Zweite Section: Karten / Grid
<section class="cards">
<h2>My Cards</h2>neuer thematischer Bereich
Überschrift erklärt den Inhalt
Grid-Container
<div class="grid">Erklärung:
divist ein neutraler ContainerKlasse
.gridaktiviert im CSS das Grid-Layout
Einzelne Karten
<div class="card">Card A</div>
<div class="card">Card B</div>
<div class="card">Card C</div>Erklärung:
jede Karte ist ein Grid-Item
gleiche Klasse → gleiches Styling
Layout (3 / 2 / 1 Spalte) kommt nur aus CSS
9️⃣ <footer> –
Fußbereich
<footer>
<p>© 2025 – Responsive Design Demo</p>
</footer>Erklärung:
<footer>
→ Abschluss der Seiteenthält oft:
Copyright
Impressum
Links
<p>
→ normaler Text
🔟 Struktur als Übersicht (DOM-Sicht)
html
├── head
└── body
├── header
│ ├── h1
│ └── nav
│ └── ul → li → a
├── main
│ ├── section.intro
│ └── section.cards
│ └── div.grid → div.card
└── footer
style.css
/* =========================
CSS VARIABLES
========================= */
:root {
--brand: #0a66c2;
--accent: #f39c12;
--bg: #f5f5f5;
--text: #333;
--radius: 10px;
}
/* =========================
GLOBAL STYLES (Vererbung)
========================= */
body {
margin: 0;
font-family: Arial, sans-serif;
color: var(--text);
background-color: var(--bg);
line-height: 1.6;
}
/* =========================
HEADER + NAV (Flexbox)
========================= */
header {
background-color: var(--brand);
color: white;
text-align: center;
padding: 20px;
}
nav ul {
list-style: none;
display: flex;
justify-content: center;
gap: 20px;
padding: 0;
margin: 10px 0 0 0;
}
nav a {
color: white;
text-decoration: none;
font-weight: bold;
}
/* =========================
MAIN CONTENT
========================= */
main {
max-width: 900px;
margin: 20px auto;
padding: 20px;
background: white;
border-radius: var(--radius);
}
.intro {
margin-bottom: 30px;
}
/* =========================
GRID SECTION
========================= */
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
}
.card {
background-color: var(--brand);
color: white;
padding: 30px;
border-radius: var(--radius);
text-align: center;
font-size: 1.1rem;
}
/* =========================
FOOTER
========================= */
footer {
text-align: center;
padding: 15px;
background-color: var(--brand);
color: white;
margin-top: 30px;
}
/* =========================
MEDIA QUERY (RESPONSIVE)
========================= */
/* Tablet & smaller */
@media (max-width: 900px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* Smartphone */
@media (max-width: 600px) {
nav ul {
flex-direction: column;
gap: 10px;
}
.grid {
grid-template-columns: 1fr;
}
header h1 {
font-size: 1.5rem;
}
}Gerne — ich erkläre dir das CSS aus dem Beispiel Schritt für Schritt, so dass du es direkt im Unterricht verwenden kannst.
1) CSS-Variablen :root
:root {
--brand: #0a66c2;
--accent: #f39c12;
--bg: #f5f5f5;
--text: #333;
--radius: 10px;
}:rootist das oberste Element (<html>).--brand,--accentusw. sind CSS-Variablen (Custom Properties).Vorteil: Du kannst das gesamte Design ändern, indem du nur hier Farben/Rundungen änderst.
Verwendung später im CSS:
color: var(--text);
background-color: var(--brand);
border-radius: var(--radius);2) Globale Basis (Vererbung)
body
body {
margin: 0;
font-family: Arial, sans-serif;
color: var(--text);
background-color: var(--bg);
line-height: 1.6;
}Das ist der Grundstil für die ganze Seite:
margin: 0;→ Browser haben standardmäßig Außenabstände. Wir entfernen sie.font-family→ Schriftart für die ganze Seite (wird vererbt).color→ Textfarbe für die ganze Seite (wird vererbt).background-color→ Seitenhintergrund (wird nicht „vererbt“, gilt aber fürs body).line-height: 1.6;→ Zeilenabstand, macht Text besser lesbar (wird vererbt).
👉 Vererbung: p, h1,
h2 usw. übernehmen automatisch Schrift, Textfarbe,
Zeilenhöhe, solange sie nichts Eigenes definieren.
3) Header-Stil
header {
background-color: var(--brand);
color: white;
text-align: center;
padding: 20px;
}background-color→ Hintergrundfarbe des Headers.color: white;→ Textfarbe im Header (wird anh1, Links etc. vererbt, außer überschrieben)text-align: center;→ zentriert Text im Header.padding: 20px;→ Innenabstand (damit es nicht „klebt“).
4) Navigation (Flexbox)
nav ul {
list-style: none;
display: flex;
justify-content: center;
gap: 20px;
padding: 0;
margin: 10px 0 0 0;
}Das betrifft nur die Liste in der Navigation.
list-style: none;→ entfernt die Punkte (•).display: flex;→ macht die Menüeinträge nebeneinander.justify-content: center;→ zentriert die Einträge horizontal.gap: 20px;→ Abstand zwischen den Menüeinträgen.padding: 0;→ entfernt Standard-Innenabstand der Liste.margin: 10px 0 0 0;→ 10px Abstand oben, sonst 0.
Links:
nav a {
color: white;
text-decoration: none;
font-weight: bold;
}text-decoration: none;→ entfernt Unterstreichung.font-weight: bold;→ fett.
5) Hauptbereich main
main {
max-width: 900px;
margin: 20px auto;
padding: 20px;
background: white;
border-radius: var(--radius);
}Das macht den Content wie eine „Card“ in der Mitte:
max-width: 900px;→ nicht zu breit auf großen Bildschirmen.margin: 20px auto;→ oben/unten 20px, links/rechts automatisch → zentriert.padding: 20px;→ Innenabstand.background: white;→ weiße Fläche auf grauem Hintergrund.border-radius→ runde Ecken.
6) Grid für Karten
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px;
}display: grid;→ aktiviert Grid Layout.grid-template-columns: repeat(3, 1fr);3 Spalten
1fr= „ein Anteil“ der verfügbaren Breite → alle Spalten gleich groß
gap: 15px;→ Abstand zwischen den Karten.
Karten:
.card {
background-color: var(--brand);
color: white;
padding: 30px;
border-radius: var(--radius);
text-align: center;
font-size: 1.1rem;
}Hintergrund blau, Text weiß.
paddingmacht sie größer/luftiger.font-sizesetzt die Schriftgröße (1.1 × Standardschrift).
7) Footer
footer {
text-align: center;
padding: 15px;
background-color: var(--brand);
color: white;
margin-top: 30px;
}Optisch ähnlich wie Header.
margin-top: 30px;→ Abstand zum Inhalt.
8) Media Queries (Responsive Design)
Tablet (≤ 900px)
@media (max-width: 900px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}Wenn Bildschirm 900px oder kleiner:
- Grid wechselt von 3 Spalten auf 2 Spalten.
Smartphone (≤ 600px)
@media (max-width: 600px) {
nav ul {
flex-direction: column;
gap: 10px;
}
.grid {
grid-template-columns: 1fr;
}
header h1 {
font-size: 1.5rem;
}
}Wenn Bildschirm 600px oder kleiner:
flex-direction: column;→ Menü wird untereinander statt nebeneinander.grid-template-columns: 1fr;→ Karten nur eine Spalte (untereinander).Überschrift wird kleiner, damit sie am Handy passt.