Ein Skeleton Loader ist ein animierter Platzhalter, der die ungefähre Struktur und das Layout eines noch ladenden Inhalts darstellt und so Ladezeiten überbrückt, indem er die Seitenstruktur vorab sichtbar macht.
Rubrik: Mediendesign & Digitale Medien · Unterrubrik: UI-Komponenten · Niveau: Einsteiger Synonyme / Auch bekannt als: Skeleton Screen, Content Placeholder, Ghost Element, Shimmer Effect, Loading Skeleton
Was ist ein Skeleton Loader?
Skeleton Loader entstanden als Reaktion auf ein fundamentales UX-Problem: Leere Seiten und Spinner kommunizieren „Warte einfach" – ohne Kontext über das, was geladen wird. Skeleton Screens zeigen dem Nutzer vorab die Struktur des kommenden Inhalts: „Hier wird eine Karte mit Bild, Titel und Text kommen." Studien zeigen, dass Nutzer Skeleton Loaders als subjektiv schneller wahrnehmen als Spinner, auch wenn die Ladezeit identisch ist.
Erklärung
Konzept: Wahrgenommene vs. tatsächliche Ladezeit
Der Unterschied zwischen einem Spinner und einem Skeleton Loader liegt nicht in der technischen Performance, sondern in der psychologischen Wahrnehmung. Skeleton Loader:
- Setzen Erwartungen über den kommenden Inhalt
- Zeigen, dass Fortschritt stattfindet (Shimmer-Animation läuft durch)
- Reduzieren den „Empty Page"-Schock beim Erscheinen des Inhalts
- Ermöglichen Progressive Loading (Inhalte erscheinen, sobald sie verfügbar sind)
Varianten
Shimmer/Wave Skeleton: Standardform. Graue Platzhalter-Shapes mit einer von links nach rechts laufenden Helligkeit-Welle (Shimmer). Signalisiert aktives Laden.
Pulse Skeleton: Platzhalter pulsieren langsam (opacity-Animation). Weniger auffällig als Shimmer, subtiler.
Static Skeleton: Keine Animation. Nur graue Platzhalter ohne Bewegung. Für Nutzer mit prefers-reduced-motion.
Card Skeleton: Platzhalter für eine Karten-Komponente (rechteckige Fläche für Bild, Linien für Text).
List Skeleton: Platzhalter für Listenelemente mit Avatar-Kreis + Textzeilen.
Table Skeleton: Platzhalter-Raster für Tabellen-Inhalte.
Anatomie von Skeleton-Shapes
- Rechteck-Shape: Platzhalter für Bilder, Banners, Cards
- Kreis-Shape: Platzhalter für Avatare, Icons
- Linie-Shape: Platzhalter für Textzeilen (unterschiedliche Längen für realistisches Layout)
- Shimmer-Overlay: Gradient-Animation als Pseudo-Element über den Shapes
Design-Prinzipien
- Proportionen beibehalten: Skeleton-Shapes sollten die tatsächlichen Abmessungen des Inhalts approximieren
- Variierte Zeilenlängen: Textzeilen in unterschiedlichen Längen wirken natürlicher als gleich lange Balken
- Letzte Zeile kürzer: Typischerweise ist der letzte Absatz-Textblock kürzer – im Skeleton nachahmen
- Farbe: Neutrales Grau (light mode: #E0E0E0 / #F0F0F0; dark mode: #333 / #444)
- Keine Detailtreue übertreiben: Skeleton ist kein Screenshot-Mockup – grobe Strukturähnlichkeit genügt
Accessibility (WCAG 2.1)
- Skeleton-Container mit
aria-busy="true"– signalisiert Screenreadern, dass Inhalte geladen werden aria-label="Inhalte werden geladen"auf dem Skeleton-Containerrole="status"mitaria-live="polite"für den Status-Bereich- Wenn Inhalt vollständig geladen:
aria-busy="false"setzen,aria-live-Region mit Statusmeldung füllen - Shimmer-Animation:
prefers-reduced-motion: reducerespektieren – Pulse oder Static als Fallback - Skeleton-Shapes selbst keine interaktiven Elemente – aus Tab-Order ausschließen (
tabindex="-1")
Beispiele
- Facebook/LinkedIn – Feed: Klassischstes Skeleton-Loader-Beispiel. Beim ersten Laden des Feeds erscheinen 3–5 Skeleton-Cards, die Avatar-Kreis, Name-Zeile, Post-Text-Zeilen und Bild-Rechteck nachahmen. Innerhalb von Millisekunden bis Sekunden werden diese durch echte Posts ersetzt.
- YouTube – Video-Grid: Die Thumbnails im Suchergebnis erscheinen als Rechteck-Skeletons, der Videotitel und Kanalname als Linien. Das Shimmer-Light läuft synchron über alle Skeletons – einheitliche Ladesequenz.
- Mobile vs. Desktop: Skeleton Loader sind auf Mobile besonders wertvoll, da mobile Verbindungen oft langsamer und unzuverlässiger sind. Der Nutzer sieht sofort die Struktur der App, auch wenn der Inhalt noch unterwegs ist. Kritisch: Skeleton muss auch bei dauerhaft schlechter Verbindung durch einen Error-State abgelöst werden.
- Accessibility Best Practice: Richtige Implementation enthält
aria-busy="true"auf dem Skeleton-Container und wechselt zuaria-busy="false"mit einem kurzen Status-Text sobald Inhalt geladen ist – Screenreader-Nutzer bekommen eine saubere Ladezustandsansage. - Häufiger Fehler: Skeleton Loader für sehr schnelle Ladeprozesse verwenden (unter 300 ms). Bei extrem schnellen Ladevorgängen wirkt der Skeleton wie ein kurzes Flackern, das verwirrt. Faustregel: Skeleton erst ab ~500 ms Ladezeit einblenden. Zweiter Fehler: Skeleton-Shapes, die keinerlei Ähnlichkeit mit dem tatsächlichen Inhalt haben – das verletzt die Erwartungshaltung.
In der Praxis
Figma: Skeleton-Komponenten als Master-Shapes (Rechteck, Kreis, Linie) mit Shimmer-Animation via Figma Prototyp oder als statische Variante. Shimmer als Gradient-Fill simulieren. Skeleton-Cards als zusammengesetzte Komponenten aus diesen Basis-Shapes. Mit Smart Animate-Transition zum „Loaded State" für Onboarding-Prototypen.
HTML/CSS-Grundstruktur: ```html <!-- Skeleton Card --> <div class="skeleton-card" aria-busy="true" aria-label="Inhalt wird geladen"> <div class="skeleton skeleton-image"></div> <div class="skeleton-text"> <div class="skeleton skeleton-line skeleton-line-full"></div> <div class="skeleton skeleton-line skeleton-line-75"></div> <div class="skeleton skeleton-line skeleton-line-50"></div> </div> </div>
<style> .skeleton { background: linear-gradient( 90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75% ); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 4px; }
@keyframes shimmer { 0% { background-position: 200% center; } 100% { background-position: -200% center; } }
@media (prefers-reduced-motion: reduce) { .skeleton { animation: none; background: #e0e0e0; } }
.skeleton-image { height: 200px; width: 100%; } .skeleton-line { height: 16px; margin-bottom: 8px; } .skeleton-line-full { width: 100%; } .skeleton-line-75 { width: 75%; } .skeleton-line-50 { width: 50%; } </style> ```
Vergleich & Abgrenzung
| Komponente | Zeigt Struktur | Animation | Ladezeit |
|---|---|---|---|
| Skeleton Loader | Ja | Shimmer/Pulse | 500 ms – mehrere Sek. |
| Spinner | Nein | Rotation | Kurz (< 3 Sek.) |
| Progress Bar | Nein | Fortschrittsbalken | Bekannte Dauer |
| Blur-up/LQIP | Ja (Bild) | Fade in | Bild-spezifisch |
Skeleton vs. Spinner: Spinner für kurze, unspezifische Wartezeiten. Skeleton für inhaltliche Ladezeiten mit bekannter Seitenstruktur. Bei Seiten mit klar definiertem Layout immer Skeleton bevorzugen.
Häufige Fragen (FAQ)
Wann soll ich einen Skeleton Loader statt eines Spinners verwenden? Skeleton Loader sind sinnvoll, wenn: Die Seitenstruktur des ladenden Inhalts bekannt ist (z. B. Artikel-Feed, Produktliste), die Ladezeit über 500 ms beträgt, und ein guter "erster Eindruck" für den Nutzer wichtig ist. Spinner sind schneller implementiert und für kurze unspezifische Wartezeiten (Modal öffnet, Button-Click verarbeitet) ausreichend.
Müssen alle Seiten-Elemente als Skeleton dargestellt werden? Nein. Nur die Hauptinhalte, die asynchron geladen werden, benötigen Skeletons. Navigation, Header und strukturelle Elemente, die sofort vorhanden sind, brauchen keinen Skeleton. Zu viele Skeleton-Shapes gleichzeitig (überladene Animation) wirken unruhig – Fokus auf die wichtigsten Inhaltsbereiche.
Verwandte Einträge
Weiterführend
- Nielsen Norman Group – „The Perception of Loading": nngroup.com
- Luke Wroblewski – „Mobile First" (Konzept der Skeleton Screens)
- CSS-Tricks – Animated Skeleton Loaders: css-tricks.com
- Web.dev – Optimistic UI Patterns: web.dev
