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.
- 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
- Ü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.
/* Standard = Mobile */
.container {
width: 100%;
padding: 20px;
}
/* Dann für größere Screens erweitern */
@media (min-width: 768px) {
.container {
max-width: 1200px;
padding: 40px;
}
}
/* Standard = Desktop */
.container {
width: 1200px;
padding: 40px;
}
/* Dann für kleinere Screens anpassen */
@media (max-width: 768px) {
.container {
width: 100%;
padding: 20px;
}
}
- 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:
/* 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:
grid-template-columns:
1fr 1fr 1fr;
grid-template-columns:
repeat(3, 1fr);
min-width vs max-width
/* Gilt ab 640px bis ∞ */
@media (min-width: 640px) {
}
Bedeutung: "Wenn Bildschirm höchstens 640px breit ist"
0-639px: ignoriert
640px+: aktiv
/* Gilt von 0px bis 639px */
@media (max-width: 639px) {
}
Bedeutung: "Wenn Bildschirm mindestens 640px breit ist"
0-639px: aktiv
640px+: ignoriert
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:
/* 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)
@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:
Diese Box zeigt dir deinen aktuellen Breakpoint
Open HTML
<div class="breakpoint-demo">
Ändere die Fenstergröße!
</div>
Open 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:
/* 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;
}
}
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:
Open 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;
}
Spezialfall: Selbst-responsive Grids mit auto-fit
Es gibt eine magische Grid-Technik, die ohne @media Queries automatisch responsiv ist! 🪄
/* 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()?
minmax(250px, 1fr)= Jede Spalte ist mindestens 250px breitauto-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-widthBreakpoints - 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
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?
- Für Card-Grids (z.B. Blog-Posts, Produkte)
- Wenn flexible Spaltenzahl ok ist
- Für gleich große Items
- 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.
/* 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%;
}
}
Container Queries werden seit 2023 von allen modernen Browsern unterstützt (Chrome 105+, Firefox 110+, Safari 16+).
- 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!
- 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:
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)
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:
- Lege dein Projekt in den
htdocsOrdner - Starte Apache
- Finde deine IP-Adresse (siehe oben)
- Ö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):
- Installiere ngrok: ngrok.com
- Starte deinen lokalen Server (z.B. Live Server auf Port 5500)
- Im Terminal:
ngrok http 5500 - Ngrok gibt dir eine öffentliche URL wie:
https://abc123.ngrok.io - 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:
# 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:
375x667
768x1024
1920x1080
- 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:
- Viewport-Größen simulieren
- Touch-Events simulieren
- Verschiedene Geräte emulieren
- Netzwerk-Geschwindigkeit drosseln
- Screenshots für verschiedene Größen
- Echtes Touch-Verhalten (Gesten, Scrolling)
- Safari iOS korrekt darstellen
- Echte Geräteleistung simulieren
- Mobile Browser-Leisten (Adressleiste)
- Echte Netzwerkbedingungen
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
/* 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
/* 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
/* 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!
- Apple (iOS): Mindestens 44x44 Pixel
- Google (Material Design): Mindestens 48x48 Pixel
- WCAG (Accessibility): Mindestens 44x44 Pixel
/* 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!
.button:hover,
.button:focus,
.button:active {
background: #007bff;
}
/* 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:
<!-- Im <head> deiner HTML-Datei -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- 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
<!-- 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:
/* Responsive Bilder */
img {
max-width: 100%;
height: auto;
display: block;
}
Moderne Bild-Techniken
<!-- 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
/* Fixed Width */
.container {
width: 1200px;
}
/* Kleine Schrift auf Mobile */
body {
font-size: 12px;
}
/* Hover ohne Touch-Alternative */
.menu:hover {
display: block;
}
/* 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
/* Falsch: max-width ist Desktop-First! */
@media (max-width: 768px) {
.element {
/* Mobile Styles */
}
}
/* 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
/* 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:
/* Nur bis 767px sichtbar */
@media (max-width: 767px) {
.mobile-menu-toggle {
display: block;
}
}
2. Zwischen zwei Breakpoints
/* 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.
In 99% der Fälle: Mobile-First = min-width
max-width = veralteter Desktop-First Ansatz
- 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=noim Viewport-Tag - Keine riesigen Bilder ohne Optimierung
Mobile First Workflow
So gehst du beim Entwickeln vor:
Schritt-für-Schritt- Design für Mobile: Starte bei 375px Viewport (iPhone SE)
- Basis-Styles schreiben: Alle Styles ohne Media Queries = Mobile
- Im Browser testen: DevTools auf Mobile-Größe, Live-Reload nutzen
- Auf echtem Gerät testen: Öffne die Seite auf deinem Smartphone
- Vergrößere Browser: Warte bis das Design "bricht"
- Breakpoint setzen: Füge Media Query mit min-width hinzu
- Anpassen für größere Screens: Mehr Spalten, größere Schrift, etc.
- Wiederholen: Für Tablet und Desktop
- Final Testing: Auf allen echten Geräten testen
Mein persönlicher Workflow
- VS Code + Live Server: Code in VS Code, automatischer Reload
- DevTools Responsive Mode: Fenstergröße ändern während ich code
- Handy daneben: iPhone mit Live Server IP-Adresse geöffnet
- BrowserSync (optional): Bei größeren Projekten für Auto-Sync
- Commit nach jedem Breakpoint: Git für Versionskontrolle
- Final Testing: iPhone, Android, iPad, verschiedene Desktop-Größen
Mobile First Checkliste
Bevor du deine Website veröffentlichst:
- Viewport Meta Tag vorhanden
- Semantisches HTML (header, nav, main, footer)
- Alt-Texte für alle Bilder
- Lazy Loading für Bilder below-the-fold
- 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
- 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
- Bilder optimiert (WebP/AVIF)
- CSS minifiziert
- Keine blockierenden Ressourcen
- Lighthouse Score >90 auf Mobile
Zusammenfassung
- Mobile First Konzept: Von klein nach groß entwickeln
1fr: 1 Teil des verfügbaren Platzes2fr 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
- 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!
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...