Critical CSS
Critical CSS (Critical Rendering Path CSS) bezeichnet die minimalen CSS-Regeln, die für das Rendering des sichtbaren Inhalts "above the fold" (oberhalb des Falzes) einer Webseite erforderlich sind. Diese CSS-Regeln müssen inline im HTML-Dokument eingebettet werden, um das Blocking von Rendering zu vermeiden und die Ladezeit zu optimieren.
Critical CSS Optimierung
Warum ist Critical CSS wichtig?
Critical CSS spielt eine entscheidende Rolle bei der Optimierung der Core Web Vitals und der allgemeinen Page Speed Performance:
Performance-Vorteile
- Reduzierte First Contentful Paint (FCP): Schnelleres Rendering des sichtbaren Inhalts
- Verbesserte Largest Contentful Paint (LCP): Optimierte Ladezeit der wichtigsten Elemente
- Eliminierung von Render-Blocking: CSS wird nicht mehr das Rendering blockieren
- Bessere User Experience: Nutzer sehen Inhalte schneller
SEO-Relevanz
- Core Web Vitals Ranking-Faktor: Seit 2021 direkter Einfluss auf Google-Rankings
- Mobile-First-Indexierung: Besonders wichtig für mobile Performance
- Bounce Rate Reduzierung: Schnellere Ladezeiten reduzieren Absprungraten
Critical CSS identifizieren
Above-the-Fold Analyse
Critical CSS Identifikation
- Viewport-Größen definieren
- Above-the-Fold Elemente identifizieren
- CSS-Selektoren analysieren
- Dependencies prüfen
- Media Queries berücksichtigen
- Browser-Kompatibilität sicherstellen
- Performance-Impact messen
- Automatisierung implementieren
Schritt 1: Viewport-Definition
- Desktop: 1920x1080px (Standard)
- Tablet: 768x1024px
- Mobile: 375x667px (iPhone SE)
Schritt 2: Element-Identifikation
- Header und Navigation
- Hauptüberschrift (H1)
- Erste Textblöcke
- Hero-Bilder oder Videos
- Call-to-Action Buttons
CSS-Selektor-Analyse
Critical CSS Extraktion
Manuelle Extraktion
Schritt-für-Schritt Anleitung:
- Browser-Entwicklertools öffnen
- F12 drücken oder Rechtsklick → "Untersuchen"
- Network-Tab aktivieren
- Page Reload mit Throttling
- "Slow 3G" oder "Fast 3G" simulieren
- CSS-Dateien im Network-Tab beobachten
- Above-the-Fold Elemente identifizieren
- Welche Elemente sind sofort sichtbar?
- Welche CSS-Regeln beeinflussen diese Elemente?
- CSS-Regeln extrahieren
- Relevante Selektoren kopieren
- Media Queries berücksichtigen
- Dependencies prüfen
Automatisierte Tools
Critical CSS Tools
Unterschiede zwischen verschiedenen Tools für Critical CSS Extraktion
Implementation von Critical CSS
Inline-Einbettung
HTML-Implementation:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Seite mit Critical CSS</title>
<!-- Critical CSS inline -->
<style>
/* Critical CSS für Above-the-Fold */
.header { background: #fff; height: 60px; }
.hero { background: #f8f9fa; padding: 40px 0; }
h1 { font-size: 2.5rem; color: #333; }
.cta-button { background: #007bff; color: white; padding: 12px 24px; }
</style>
<!-- Non-Critical CSS asynchron laden -->
<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="styles.css"></noscript>
</head>
<body>
<!-- Page Content -->
</body>
</html>
Asynchrones CSS-Loading
Resource Hints für optimale Performance:
<!-- DNS Prefetch für externe Ressourcen -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<!-- Preload für kritische CSS-Dateien -->
<link rel="preload" href="critical.css" as="style">
<!-- Preload für wichtige Fonts -->
<link rel="preload" href="fonts/main.woff2" as="font" type="font/woff2" crossorigin>
Best Practices für Critical CSS
Größen-Optimierung
Critical CSS Größen
Empfohlene Größen für Critical CSS in verschiedenen Szenarien
Empfohlene Größen:
- Desktop: 14-20 KB (komprimiert)
- Mobile: 8-14 KB (komprimiert)
- Maximum: 30 KB (absolute Obergrenze)
CSS-Minimierung
Wichtige Optimierungen:
- Whitespace entfernen
- Kommentare entfernen
- Unused CSS eliminieren
- Selektoren optimieren
- Shorthand-Properties nutzen
Media Query Handling
/* Mobile First Approach */
.hero {
padding: 20px 0;
}
@media (min-width: 768px) {
.hero {
padding: 40px 0;
}
}
@media (min-width: 1024px) {
.hero {
padding: 60px 0;
}
}
Automatisierung und Workflows
Build-Process Integration
Critical CSS Automation
6 Schritte von Source CSS bis Deployment mit automatischer Critical CSS Extraktion
Gulp.js Beispiel:
const critical = require('critical');
gulp.task('critical', function () {
return critical.generate({
inline: true,
base: 'dist/',
src: 'index.html',
dest: 'index-critical.html',
width: 1300,
height: 900,
minify: true
});
});
CI/CD Integration
GitHub Actions Workflow:
name: Critical CSS Generation
on: [push, pull_request]
jobs:
critical-css:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Generate Critical CSS
run: |
npm install critical
critical src/index.html --base src --inline --minify
Monitoring und Testing
Performance-Messung
Wichtige Metriken:
- First Contentful Paint (FCP): < 1.8s
- Largest Contentful Paint (LCP): < 2.5s
- Cumulative Layout Shift (CLS): < 0.1
- Time to Interactive (TTI): < 3.8s
Testing-Tools
Critical CSS Testing
- Lighthouse Audit
- PageSpeed Insights
- WebPageTest
- GTmetrix
- Chrome DevTools
- Real User Monitoring
Lighthouse Audit:
- Chrome DevTools öffnen
- Lighthouse-Tab auswählen
- "Performance" Kategorie auswählen
- "Generate report" klicken
- "Eliminate render-blocking resources" prüfen
A/B-Testing für Critical CSS
Test-Setup:
- Variante A: Ohne Critical CSS (Original)
- Variante B: Mit Critical CSS (Optimiert)
- Messgrößen: FCP, LCP, Bounce Rate, Conversion Rate
- Testdauer: Minimum 2 Wochen
- Signifikanz: 95% Confidence Level
Häufige Fehler vermeiden
Typische Probleme
Häufige Critical CSS Fehler
Häufige Critical CSS Fehler die Performance verschlechtern können
1. Zu große Critical CSS
- Problem: > 30 KB inline CSS
- Lösung: Weitere Optimierung und Minimierung
2. Falsche Above-the-Fold Definition
- Problem: Wichtige Elemente nicht erfasst
- Lösung: Verschiedene Viewport-Größen testen
3. Fehlende Media Queries
- Problem: Mobile Layout bricht zusammen
- Lösung: Responsive Critical CSS erstellen
4. Doppelte CSS-Regeln
- Problem: Inline + externe CSS überschneiden sich
- Lösung: Non-Critical CSS entsprechend anpassen
Debugging-Tipps
Chrome DevTools:
- Coverage-Tab: Unused CSS identifizieren
- Performance-Tab: Render-Blocking analysieren
- Network-Tab: CSS-Loading-Zeiten prüfen
- Lighthouse: Automatische Optimierungsvorschläge
Advanced Critical CSS Techniken
Dynamic Critical CSS
Server-Side Generation:
<?php
// Beispiel für PHP-basierte Critical CSS
$userAgent = $_SERVER['HTTP_USER_AGENT'];
$isMobile = preg_match('/Mobile|Android|iPhone/', $userAgent);
if ($isMobile) {
$criticalCSS = file_get_contents('css/critical-mobile.css');
} else {
$criticalCSS = file_get_contents('css/critical-desktop.css');
}
?>
<style><?php echo $criticalCSS; ?></style>
Component-Based Critical CSS
Modulare Ansätze:
- Header-Critical: Navigation und Logo
- Hero-Critical: Above-the-Fold Content
- Content-Critical: Erste Textblöcke
- Footer-Critical: Nur bei kurzen Seiten
Zukunft von Critical CSS
HTTP/3 und Critical CSS
Neue Möglichkeiten:
- Multiplexing: Parallele CSS-Loads
- Server Push: Proaktives CSS-Senden
- QUIC-Protokoll: Reduzierte Latenz
CSS-in-JS und Critical CSS
Moderne Frameworks:
- Next.js: Automatische Critical CSS
- Gatsby: Build-time Optimierung
- Nuxt.js: SSR-basierte Extraktion
Verwandte Themen
Letzte Aktualisierung: 21. Oktober 2025