Mobile First Design

Der moderne Ansatz für responsive Webdesign: Starte mit Mobile, erweitere für Desktop - mit min-width statt max-width.

Was ist Mobile First?

Mobile First bedeutet, dass du dein Design und deinen Code zuerst für mobile Geräte entwickelst und dann schrittweise für größere Bildschirme erweiterst. Das ist das Gegenteil von Desktop First, wo du mit Desktop anfängst und dann für Mobile anpasst.

Die Philosophie
  • Content First: Was ist wirklich wichtig? Mobile zwingt dich, Prioritäten zu setzen
  • Progressive Enhancement: Starte mit dem Basis-Erlebnis, füge dann Features hinzu
  • Performance: Mobile-optimierter Code ist von Natur aus schlanker
  • Zukunftssicher: Mobile Traffic überholt Desktop - bau von Anfang an für Mobile
Warum Mobile First?
  • Über 60% des Web-Traffics kommt von mobilen Geräten
  • Google nutzt Mobile-First Indexing (Mobile-Version ist die Hauptversion)
  • Einfacher zu skalieren: Von klein nach groß ist natürlicher als umgekehrt
  • Bessere Performance auf allen Geräten

Desktop First vs Mobile First

Der Hauptunterschied liegt in der Verwendung von Media Queries: max-width vs min-width.

Mobile First (modern)
/* Standard = Mobile */
.container {
width: 100%;
padding: 20px;
}

/* Dann für größere Screens erweitern */
@media (min-width: 768px) {
.container {
max-width: 1200px;
padding: 40px;
}
}
Desktop First (veraltet)
/* Standard = Desktop */
.container {
width: 1200px;
padding: 40px;
}

/* Dann für kleinere Screens anpassen */
@media (max-width: 768px) {
.container {
width: 100%;
padding: 20px;
}
}
Warum ist min-width besser?
  • Performance: Weniger Code wird auf Mobile geladen (keine Desktop-Styles, die überschrieben werden)
  • Wartbarkeit: Basis-Styles sind einfacher zu verstehen
  • Progressive Enhancement: Füge Features hinzu statt sie wegzunehmen
  • Logik: "Ab dieser Größe mach das" ist intuitiver als "Bis zu dieser Größe mach das"

Mobile First verstehen: Von Klein nach Groß

Mobile-First bedeutet: Du schreibst deine Basis-Styles OHNE @media für Mobile, und erweiterst dann MIT @media für größere Screens.

Mobile (ohne @media)

/* Basis = Mobile */
.grid {
    grid-template-columns: 1fr;
    font-size: 16px;
}

Was passiert:

Gilt für ALLE Bildschirmgrößen als Startpunkt (0-∞px)

Desktop (mit @media)

/* Ab 768px: Erweitern */
@media (min-width: 768px) {
    .grid {
        grid-template-columns: 2fr 1fr;
        font-size: 18px;
    }
}

Was passiert: Überschreibt die Basis ab 768px aufwärts

FR-Einheiten erklärt

fr = "fraction" = Bruchteil des verfügbaren Platzes. So rechnest du aus, wie viel Prozent jede Spalte bekommt:

CSS
/* Beispiel: 2fr 1fr */
grid-template-columns: 2fr 1fr;

/* Rechnung:
   Gesamt: 2 + 1 = 3 Teile
   Spalte 1: 2/3 = 66.6%
   Spalte 2: 1/3 = 33.3% */
Grid-Definition Bedeutung Visuelle Aufteilung
1fr 1fr 2 gleich große Spalten 50% | 50%
2fr 1fr 2:1 Verhältnis 66.6% | 33.3%
1fr 2fr 1:2 Verhältnis 33.3% | 66.6%
repeat(3, 1fr) 3 gleich große Spalten 33.3% | 33.3% | 33.3%
repeat(4, 1fr) 4 gleich große Spalten 25% | 25% | 25% | 25%

repeat() Funktion

repeat(Anzahl, Größe) ist eine Abkürzung, um gleiche Werte nicht zu wiederholen:

Umständlich
grid-template-columns: 
    1fr 1fr 1fr;
Besser mit repeat()
grid-template-columns: 
    repeat(3, 1fr);

min-width vs max-width

min-width = "ab ... aufwärts"
/* Gilt ab 640px bis ∞ */
@media (min-width: 640px) {    
}

Bedeutung: "Wenn Bildschirm höchstens 640px breit ist"

0-639px: ignoriert

640px+: aktiv

MAX-WIDTH = "bis ... abwärts"
/* Gilt von 0px bis 639px */
@media (max-width: 639px) {    
}

Bedeutung: "Wenn Bildschirm mindestens 640px breit ist"

0-639px: aktiv

640px+: ignoriert

Faustregel

Mobile-First = immer min-width verwenden!

  • min-width = Mobile-First - von klein nach groß
  • max-width = Desktop-First - von groß nach klein

CSS Kaskade: Warum @media "gewinnt"

Ein häufiger Irrtum: "@media steht am Ende, also ist es unwichtig." - Falsch! In CSS gilt: Später = Stärker!

Das Überschreibungs-Prinzip

CSS liest von oben nach unten. Wenn zwei Regeln dasselbe Element stylen, gewinnt die spätere:

CSS
/* ERSTE Regel */
.box {
    color: blue;
}

/* ZWEITE Regel - ÜBERSCHREIBT! */
.box {
    color: red;  /* ← Diese gewinnt! */
}

/* Ergebnis: Die Box ist ROT */

@media überschreibt die Basis

Das gleiche Prinzip gilt für Media Queries:

Auf Mobile (400px)

/* Basis-Regel greift */
.grid {
    grid-template-columns: 1fr;
}

/* @media ignoriert (Bedingung nicht erfüllt) */
@media (min-width: 640px) {
    /* Wird nicht gelesen */
}

Ergebnis: 1 Spalte

Auf Desktop (1000px)

/* Basis-Regel greift erstmal */
.grid {
    grid-template-columns: 1fr;
}

/* @media ÜBERSCHREIBT! */
@media (min-width: 640px) {
    .grid {
        grid-template-columns: 2fr 1fr;
    }
}

Ergebnis: 2 Spalten (2:1)

Merksatz

@media am Ende = nicht "ach übrigens optional", sondern "ICH ÜBERSCHREIBE ALLES!" 💪

CSS ist wie ein Stapel Papier: Das oberste Blatt (am Ende des Codes) verdeckt alles darunter!

Warum @media am Ende steht

  • Reihenfolge = Macht: Spätere Regeln überschreiben frühere
  • Mobile-First Logik: Basis (klein) → Erweiterung (groß)
  • Lesbarkeit: Du siehst sofort "ah, das ändert sich ab 640px"

Breakpoints in Aktion

Ändere die Browsergröße und beobachte, wie sich die Anzeige verändert:

Ändere die Fenstergröße!

Diese Box zeigt dir deinen aktuellen Breakpoint

Open HTML
HTML
<div class="breakpoint-demo">
    Ändere die Fenstergröße!
</div>
Open CSS
CSS
/* Breakpoint Visualisierung */
.breakpoint-demo {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    color: white;
    padding: 40px 20px;
    border-radius: 8px;
    text-align: center;
    margin: 20px 0;
    font-weight: bold;
    font-size: 18px;
}

.breakpoint-demo::before {
    content: "📱 Mobile (< 768px)";
}

@media (min-width: 768px) {
    .breakpoint-demo {
        background: linear-gradient(135deg, #f093fb 0%, #4facfe 100%);
    }

    .breakpoint-demo::before {
        content: "📱 Tablet (768px - 1023px)";
    }
}

@media (min-width: 1024px) {
    .breakpoint-demo {
        background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
}

.breakpoint-demo::before {
    content: "💻 Desktop (1024px - 1439px)";
    }
}

@media (min-width: 1440px) {
    .breakpoint-demo {
        background: linear-gradient(135deg, #30cfd0 0%, #330867 100%);
}

.breakpoint-demo::before {
    content: "🖥️ Large Desktop (≥ 1440px)";
}
}

Standard Breakpoints

Diese Breakpoints decken die meisten Geräte ab:

CSS
/* Mobile First Breakpoints */

/* 1. Basis: Mobile (0px - 767px) - Kein Media Query nötig! */
.element {
    font-size: 16px;
    padding: 15px;
}

/* 2. Tablet (768px - 1023px) */
@media (min-width: 768px) {
    .element {
        font-size: 18px;
        padding: 20px;
    }
}

/* 3. Desktop (1024px - 1439px) */
@media (min-width: 1024px) {
    .element {
        font-size: 20px;
        padding: 30px;
    }
}

/* 4. Large Desktop (≥ 1440px) */
@media (min-width: 1440px) {
    .element {
        font-size: 22px;
        padding: 40px;
    }
}
Wichtig

Das sind Richtwerte. Deine Breakpoints sollten sich nach deinem Content richten, nicht nach Geräten! Wenn dein Design bei 850px bricht, setz dort einen Breakpoint.

Praktisches Beispiel: Grid Layout

Ändere die Browsergröße und sieh, wie das Grid von 1 auf 4 Spalten wächst:

1
2
3
4
Open CSS
CSS
/* Mobile First Grid */

/* Basis: Mobile = 1 Spalte */
.grid-4 {
    display: grid;
    grid-template-columns: 1fr;
    gap: 15px;
}

/* Tablet: 2 Spalten */
@media (min-width: 768px) {
    .grid-4 {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* Desktop: 3 Spalten */
@media (min-width: 1024px) {
    .grid-4 {
        grid-template-columns: repeat(3, 1fr);
    }
}

/* Large Desktop: 4 Spalten */
@media (min-width: 1440px) {
    .grid-4 {
        grid-template-columns: repeat(4, 1fr);
    }
}

.grid-item {
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    color: white;
    padding: 30px;
    border-radius: 8px;
    text-align: center;
    font-weight: bold;
}
1
2
3

Spezialfall: Selbst-responsive Grids mit auto-fit

Es gibt eine magische Grid-Technik, die ohne @media Queries automatisch responsiv ist! 🪄

CSS
/* Selbst-responsives Grid - KEINE @media nötig! */
.grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 1.5rem;
}

Was macht auto-fit + minmax()?

Die Magie erklärt
  • minmax(250px, 1fr) = Jede Spalte ist mindestens 250px breit
  • auto-fit = Das Grid entscheidet automatisch, wie viele Spalten passen
  • Automatisches Umbrechen: Wenn nicht genug Platz für 250px, springt die Spalte in die nächste Zeile

Automatisches Umbrechen (Beispiel)

Bei minmax(250px, 1fr) passt sich das Grid automatisch an:

Container-Breite Anzahl Spalten Rechnung
300px (Mobile) 1 Spalte 300 ÷ 250 = 1.2 → 1 Spalte
600px (Tablet) 2 Spalten 600 ÷ 250 = 2.4 → 2 Spalten
1200px (Desktop) 4 Spalten 1200 ÷ 250 = 4.8 → 4 Spalten

Ist das Mobile-First? JAIN!

Technisch gesehen: NEIN

  • Nutzt keine expliziten min-width Breakpoints
  • Keine Media Queries vorhanden

Praktisch gesehen: JA!

  • auto-fit + minmax() ist von Natur aus responsiv
  • Funktioniert auf allen Geräten perfekt
  • Weniger Code als mit @media
Best Practice

Spezialfall: auto-fit + minmax() ist von Natur aus responsiv und passt sich automatisch an - hier brauchst du oft gar keine @media Query! Das ist eine Ausnahme, wo das Grid selbst entscheidet, wie viele Spalten passen.

Wann auto-fit nutzen?

Richtig
  • Für Card-Grids (z.B. Blog-Posts, Produkte)
  • Wenn flexible Spaltenzahl ok ist
  • Für gleich große Items
Falsch
  • Wenn du exakte Kontrolle über Breakpoints brauchst
  • Für komplexe Layouts mit unterschiedlichen Spaltenbreiten

Container Queries: Die Zukunft von Responsive

Während Media Queries auf die Viewport-Breite reagieren, reagieren Container Queries auf die Breite des Eltern-Elements. Das ist besonders für wiederverwendbare Komponenten nützlich.

CSS
/* Container definieren */
.card-container {
    container-type: inline-size;
    container-name: card;
}

/* Styles basierend auf Container-Breite */
@container card (min-width: 400px) {
    .card {
        display: flex;
        gap: 1rem;
    }
    
    .card-image {
        width: 40%;
    }
}
Browser-Support

Container Queries werden seit 2023 von allen modernen Browsern unterstützt (Chrome 105+, Firefox 110+, Safari 16+).

Wann Container Queries?
  • Media Queries: Für Page-Layout (Header, Footer, Haupt-Grid)
  • Container Queries: Für wiederverwendbare Komponenten (Cards, Widgets)

Lokales Testen auf echten Geräten

Das ist MEGA wichtig!

DevTools sind sehr gut für schnelle Checks, aber echte Geräte zeigen dir das wahre Verhalten. Hier erfährst du, wie du deine lokale Website auf deinem Smartphone testen kannst!

Warum echte Geräte testen?
  • Touch-Verhalten: Hover funktioniert nicht auf Touch-Screens
  • Safari auf iOS: Verhält sich oft anders als Chrome DevTools
  • Performance: Echte Netzwerk-Geschwindigkeit und Geräteleistung
  • Viewport-Höhe: Mobile Browser-Leisten ändern die verfügbare Höhe
  • Scrolling: Momentum Scrolling und Pull-to-Refresh

Methode 1: Live Server (empfohlen für VS Code)

Die einfachste Methode, wenn du VS Code verwendest:

Live Server
1. Installiere die "Live Server" Extension in VS Code
2. Rechtsklick auf deine HTML-Datei → "Open with Live Server"
3. Live Server läuft jetzt auf: http://127.0.0.1:5500 (Beispiel)
Schritt-für-Schritt
1. Finde deine lokale IP-Adresse:                            
                
Windows (CMD oder PowerShell):
ipconfig
→ Suche nach "IPv4-Adresse" (z.B. 192.168.1.105)

Mac/Linux (Terminal):
ifconfig | grep "inet "
oder
ip addr show
→ Suche nach deiner lokalen IP (z.B. 192.168.1.105)

2. Öffne auf deinem Smartphone:
http://192.168.1.105:5500
(Ersetze die IP mit deiner eigenen!)

Wichtig: Smartphone und PC müssen im selben WLAN sein!

Methode 2: XAMPP oder MAMP

Falls du bereits XAMPP/MAMP verwendest:

  1. Lege dein Projekt in den htdocs Ordner
  2. Starte Apache
  3. Finde deine IP-Adresse (siehe oben)
  4. Öffne auf deinem Handy: http://DEINE-IP/dein-projekt

Beispiel: http://192.168.1.105/meine-website

Methode 3: ngrok (für externe Tests)

Mit ngrok kannst du deine lokale Website über das Internet zugänglich machen (z.B. für Kunden-Feedback):

  1. Installiere ngrok: ngrok.com
  2. Starte deinen lokalen Server (z.B. Live Server auf Port 5500)
  3. Im Terminal: ngrok http 5500
  4. Ngrok gibt dir eine öffentliche URL wie: https://abc123.ngrok.io
  5. Diese URL kannst du auf jedem Gerät weltweit öffnen!

Achtung: Die kostenlose Version erzeugt zufällige URLs, die nach Neustart wechseln.

Methode 4: BrowserSync (automatisches Reload)

BrowserSync synchronisiert Änderungen automatisch auf allen Geräten:

BrowserSync
# Installation (npm muss installiert sein)
npm install -g browser-sync

# Starten im Projektordner
browser-sync start --server --files "*.html, css/*.css, js/*.js"

# BrowserSync zeigt dir dann automatisch:
# Local: http://localhost:3000
# External: http://192.168.1.105:3000

Vorteil: Änderungen werden automatisch auf allen verbundenen Geräten aktualisiert!

Test auf verschiedenen Geräten

Teste deine Website auf mindestens diesen Geräten:

📱 Mobile
375x667
📱 Tablet
768x1024
💻 Desktop
1920x1080
Test-Strategie
  • Chrome DevTools: Schnelle erste Tests während der Entwicklung
  • iPhone (Safari): iOS verhält sich oft anders - unbedingt testen!
  • Android (Chrome): Test auf mindestens einem Android-Gerät
  • Tablet: Oft vernachlässigt, aber wichtig (iPad, Android Tablets)
  • Desktop: Verschiedene Browsergrößen (nicht nur Vollbild!)

DevTools vs Echte Geräte

DevTools sind großartig für die Entwicklung, aber sie haben Einschränkungen:

DevTools können
  • Viewport-Größen simulieren
  • Touch-Events simulieren
  • Verschiedene Geräte emulieren
  • Netzwerk-Geschwindigkeit drosseln
  • Screenshots für verschiedene Größen
DevTools können NICHT
  • Echtes Touch-Verhalten (Gesten, Scrolling)
  • Safari iOS korrekt darstellen
  • Echte Geräteleistung simulieren
  • Mobile Browser-Leisten (Adressleiste)
  • Echte Netzwerkbedingungen
Best Practice

Nutze DevTools für schnelle Iterationen während der Entwicklung, teste aber immer auf echten Geräten bevor du die Seite veröffentlichst!

Mobile First CSS Patterns

Hier sind bewährte Patterns für Mobile First Development:

1. Navigation

CSS
/* Mobile: Hamburger-Menü */
.nav {
    position: fixed;
    top: 0;
    left: -100%;
    width: 80%;
    height: 100vh;
    background: white;
    transition: left 0.3s ease;
}

.nav.open {
    left: 0;
}

/* Desktop: Horizontale Navigation */
@media (min-width: 1024px) {
    .nav {
        position: static;
        width: auto;
        height: auto;
        display: flex;
        gap: 20px;
    }
}

2. Typography Scaling

CSS
/* Mobile: Kleinere Schrift */
h1 {
    font-size: 28px;
    line-height: 1.2;
}

p {
    font-size: 16px;
    line-height: 1.6;
}

/* Tablet: Mittel */
@media (min-width: 768px) {
    h1 {
        font-size: 36px;
    }
}

/* Desktop: Größer */
@media (min-width: 1024px) {
    h1 {
        font-size: 48px;
    }
    
    p {
        font-size: 18px;
    }
}

3. Container Width

CSS
/* Mobile: Volle Breite mit Padding */
.container {
    width: 100%;
    padding: 0 20px;
}

/* Desktop: Maximale Breite mit Zentrierung */
@media (min-width: 1024px) {
    .container {
        max-width: 1200px;
        margin: 0 auto;
        padding: 0 40px;
    }
}

Touch-Optimierung

Auf mobilen Geräten nutzen User ihre Finger, nicht eine Maus. Das erfordert spezielle Überlegungen!

Mindestgröße für Touch-Targets
  • Apple (iOS): Mindestens 44x44 Pixel
  • Google (Material Design): Mindestens 48x48 Pixel
  • WCAG (Accessibility): Mindestens 44x44 Pixel
Teste die Touch-Targets:
30x30px (zu klein!)
44x44px (gut)
48x48px+ (optimal)
CSS
/* Touch-optimierte Buttons */
.button {
    min-width: 48px;
    min-height: 48px;
    padding: 12px 20px;
    font-size: 16px;
    
    /* Entferne Tap-Highlight auf Mobile */
    -webkit-tap-highlight-color: transparent;
}

/* Links mit genug Platz */
a {
    display: inline-block;
    padding: 10px;
    margin: -10px; /* Vergrößert Click-Area ohne Layout zu ändern */
}
Hover-Probleme auf Touch-Screens

Problem: :hover funktioniert auf Touch-Screens nicht wie erwartet!

Lösung 1: Nutze zusätzlich :focus und :active
.button:hover, 
.button:focus, 
.button:active { 
    background: #007bff; 
}
Lösung 2: Media Query für Hover-fähige Geräte
/* Nur auf Geräten mit Hover-Unterstützung */
@media (hover: hover) and (pointer: fine) {
    .button:hover {
        background: #007bff;
    }
}

Der Viewport Meta Tag

Extrem wichtig! Ohne diesen Tag funktioniert Mobile First nicht richtig:

HTML
<!-- Im <head> deiner HTML-Datei -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Was macht das?
  • width=device-width: Sagt dem Browser, die Breite des Geräts zu nutzen
  • initial-scale=1.0: Setzt den initialen Zoom-Level auf 100%
  • Ohne diesen Tag: Mobile Browser zeigen Desktop-Version an (gezoomt raus)
Erweiterte Viewport-Optionen
HTML
<!-- Standard (empfohlen) -->
<meta name="viewport" 
      content="width=device-width, initial-scale=1.0">

<!-- Mit Zoom-Beschränkungen (nicht empfohlen für Accessibility) -->
<meta name="viewport" 
      content="width=device-width, initial-scale=1.0, 
               maximum-scale=5.0, user-scalable=yes">

Hinweis: user-scalable=no ist schlecht für Accessibility! Lass Usern die Möglichkeit zu zoomen.

Bilder für Mobile optimieren

Bilder sind oft der größte Performance-Killer auf Mobile. So optimierst du sie:

CSS
/* Responsive Bilder */
img {
    max-width: 100%;
    height: auto;
    display: block;
}

Moderne Bild-Techniken

HTML
<!-- 1. srcset für verschiedene Auflösungen -->
<img src="image-800.jpg"
     srcset="image-400.jpg 400w,
             image-800.jpg 800w,
             image-1200.jpg 1200w"
     sizes="(max-width: 600px) 400px,
            (max-width: 1000px) 800px,
            1200px"
     alt="Beschreibung">

<!-- 2. picture für verschiedene Formate/Art Direction -->
<picture>
  <!-- Moderne Formate für unterstützende Browser -->
  <source srcset="image.webp" type="image/webp">
  <source srcset="image.avif" type="image/avif">
  
  <!-- Fallback -->
  <img src="image.jpg" alt="Beschreibung">
</picture>
Performance-Tipps für Bilder
  • Lazy Loading: <img loading="lazy" ...> für Bilder below-the-fold
  • WebP/AVIF: Moderne Formate sind 30-50% kleiner
  • Richtige Größe: Lade keine 4000px Bilder für 400px Container
  • Komprimierung: Tools wie TinyPNG, Squoosh.app
  • CSS Background: Nutze Media Queries für verschiedene Hintergrundbilder

Häufige Mobile First Fehler

Fehler
/* Fixed Width */
.container {
    width: 1200px;
}

/* Kleine Schrift auf Mobile */
body {
    font-size: 12px;
}

/* Hover ohne Touch-Alternative */
.menu:hover {
    display: block;
}
Lösung
/* Flexible Width */
.container {
    width: 100%;
    max-width: 1200px;
}

/* Lesbare Schrift (min 16px) */
body {
    font-size: 16px;
}

/* Hover + Touch */
.menu:hover,
.menu:focus {
    display: block;
}

max-width bei Mobile-First verwenden

Fehler
/* Falsch: max-width ist Desktop-First! */
@media (max-width: 768px) {
    .element {
        /* Mobile Styles */
    }
}
Lösung
/* Richtig: min-width für Mobile-First! */

/* Mobile Styles (ohne @media) */
.element {
    /* Basis-Styles */
}

/* Desktop ab 768px */
@media (min-width: 768px) {
    .element {
        /* Desktop Styles */
    }
}

Ausnahmen: Wann max-width ok ist

Es gibt 2 seltene Situationen, wo auch Mobile-First mal max-width nutzt:

1. Nur auf Mobile zeigen
CSS
/* Hamburger-Menü nur auf Mobile */
.mobile-menu-toggle {
    display: block;
}

@media (min-width: 768px) {
    .mobile-menu-toggle {
        display: none; /* Ab Desktop versteckt */
    }
}

Alternative mit max-width:

CSS
/* Nur bis 767px sichtbar */
@media (max-width: 767px) {
    .mobile-menu-toggle {
        display: block;
    }
}
2. Zwischen zwei Breakpoints
CSS
/* NUR auf Tablets (640px-1023px) */
@media (min-width: 640px) 
   and (max-width: 1023px) {
    .tablet-only {
        display: block;
    }
}

Hier kombinierst du min-width UND max-width, um einen genauen Bereich zu treffen.

Regel

In 99% der Fälle: Mobile-First = min-width

max-width = veralteter Desktop-First Ansatz

Weitere No-Gos
  • Keine fixen Pixel-Werte für Container (nutze %, rem, max-width)
  • Keine Schrift unter 16px (iOS zoomt sonst automatisch rein bei Input-Feldern!)
  • Keine Touch-Targets unter 44x44px
  • Kein user-scalable=no im Viewport-Tag
  • Keine riesigen Bilder ohne Optimierung

Mobile First Workflow

So gehst du beim Entwickeln vor:

Schritt-für-Schritt
  1. Design für Mobile: Starte bei 375px Viewport (iPhone SE)
  2. Basis-Styles schreiben: Alle Styles ohne Media Queries = Mobile
  3. Im Browser testen: DevTools auf Mobile-Größe, Live-Reload nutzen
  4. Auf echtem Gerät testen: Öffne die Seite auf deinem Smartphone
  5. Vergrößere Browser: Warte bis das Design "bricht"
  6. Breakpoint setzen: Füge Media Query mit min-width hinzu
  7. Anpassen für größere Screens: Mehr Spalten, größere Schrift, etc.
  8. Wiederholen: Für Tablet und Desktop
  9. Final Testing: Auf allen echten Geräten testen
Mein persönlicher Workflow
  1. VS Code + Live Server: Code in VS Code, automatischer Reload
  2. DevTools Responsive Mode: Fenstergröße ändern während ich code
  3. Handy daneben: iPhone mit Live Server IP-Adresse geöffnet
  4. BrowserSync (optional): Bei größeren Projekten für Auto-Sync
  5. Commit nach jedem Breakpoint: Git für Versionskontrolle
  6. Final Testing: iPhone, Android, iPad, verschiedene Desktop-Größen

Mobile First Checkliste

Bevor du deine Website veröffentlichst:

HTML
  • Viewport Meta Tag vorhanden
  • Semantisches HTML (header, nav, main, footer)
  • Alt-Texte für alle Bilder
  • Lazy Loading für Bilder below-the-fold
CSS
  • Mobile-Styles ohne Media Queries (Basis)
  • min-width statt max-width für Media Queries
  • Flexible Einheiten (%, rem, em) statt fixe Pixel
  • Touch-Targets mindestens 44x44px
  • Schriftgröße mindestens 16px
  • Keine horizontalen Scroll-Bars
Testing
  • DevTools verschiedene Größen getestet
  • Auf echtem iPhone getestet (Safari!)
  • Auf Android-Gerät getestet
  • Tablet getestet (iPad oder Android)
  • Desktop verschiedene Fenstergrößen
  • Touch-Interaktionen funktionieren
  • Bilder laden schnell
Performance
  • Bilder optimiert (WebP/AVIF)
  • CSS minifiziert
  • Keine blockierenden Ressourcen
  • Lighthouse Score >90 auf Mobile

Zusammenfassung

Was wichtig ist
  • Mobile First Konzept: Von klein nach groß entwickeln
  • 1fr: 1 Teil des verfügbaren Platzes
  • 2fr 1fr: 2/3 + 1/3 Aufteilung (66.6% + 33.3%)
  • repeat(3, 1fr): 3 gleich große Spalten (je 33.3%)
  • min-width: 640px: "ab 640px aufwärts"
  • Mobile-First: Ohne @media = Mobile, mit @media = Desktop
  • @media überschreibt: Späterer CSS-Code gewinnt über früheren
  • auto-fit + minmax(): Selbst-responsive Grids ohne @media
  • Lokales Testing: Deine Website auf echten Geräten im WLAN testen
  • Touch-Optimierung: Mindestens 44x44px Touch-Targets
  • Best Practices: Viewport Meta Tag, flexible Einheiten, responsive Bilder
Nächste Schritte
  • Starte dein nächstes Projekt mit Mobile First!
  • Richte dir Live Server oder BrowserSync ein
  • Teste IMMER auf echten Geräten (besonders Safari iOS)
  • Nutze die Checkliste für jedes Projekt
  • Übe, übe, übe - bald wird Mobile First zur Gewohnheit!
Tipp

Mobile First ist anfangs ungewohnt, aber nach 2-3 Projekten wirst du nie wieder zurück zu Desktop First wollen. Es macht das Entwickeln einfacher, den Code sauberer und die Websites schneller!

Mehr aus CSS

Tutorials werden geladen...