Bugfix: Lightbox-Bilder werden nicht angezeigt #
Datum: 29. Oktober 2025
Problem: Viele Bilder werden nach Klick auf Thumbnails nicht in der Lightbox angezeigt
Beispiel: Artikel zum Flashback Symposium
Status: ✅ Vollständig gelöst
Problem-Analyse #
Ursprüngliches Problem #
- Lightbox-JavaScript versuchte hardcodiert 1920px Versionen von Bildern zu laden
eleventyImageTransformPlugin generierte inkonsistente Bildgrößen- Für kleinere Originalbilder (z.B. 1748px Flashback Symposium Hero) wurden keine 1920px Versionen erstellt
- Resultat: 404-Fehler beim Laden der Lightbox-Bilder
Betroffene Dateien #
.eleventy.js - eleventyImageTransformPlugin Konfiguration_includes/layouts/base.njk - Lightbox JavaScript- Alle Artikel mit Bildern (Beispiel:
events/Flashback Symposium02.md)
Implementierte Lösung #
Vorher:
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
});
Nachher:
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
extensions: "html",
formats: ["webp", "jpeg"],
widths: [320, 480, 640, 768, 1024, 1440],
defaultAttributes: {
loading: "lazy",
decoding: "async",
sizes: "(min-width: 1024px) 1024px, 100vw"
}
});
Wichtige Änderungen:
- Konsistente
widths: [320, 480, 640, 768, 1024, 1440] für alle Bilder - Maximale Größe auf 1440px begrenzt (praktisch für die meisten Anwendungsfälle)
- Plugin generiert automatisch nur Versionen ≤ Originalgröße
2. Lightbox JavaScript (_includes/layouts/base.njk) #
Vorher:
const lightboxSrc = thumbnailSrc.replace(/-\d+\.(webp|jpeg|jpg|png)$/, '-1920.$1');
Nachher:
const img = link.querySelector('img');
const srcset = img.getAttribute('srcset');
let lightboxSrc = thumbnailSrc;
if (srcset) {
const srcsetEntries = srcset.split(',').map(entry => {
const parts = entry.trim().split(' ');
const url = parts[0];
const width = parseInt(parts[1]);
return { url, width };
});
const largestEntry = srcsetEntries.reduce((largest, current) =>
current.width > largest.width ? current : largest
);
lightboxSrc = largestEntry.url;
}
Wichtige Verbesserungen:
- Keine hardcodierten Bildgrößen mehr
- Automatische Auswahl der größten verfügbaren Bildgröße aus
srcset - Fallback auf Original-Thumbnail-Quelle wenn kein
srcset vorhanden
3. Cache-Clearing und Rebuild #
Durchgeführte Schritte:
Remove-Item -Recurse -Force _site\*
Remove-Item -Recurse -Force node_modules\.cache
npm run build:11ty
Ergebnisse #
Vor der Lösung #
- ❌ 404-Fehler beim Laden von Lightbox-Bildern
- ❌ Inkonsistente Bildgrößen je nach Originalgröße
- ❌ Schlechte User Experience
Nach der Lösung #
- ✅ Alle Bilder werden korrekt in der Lightbox angezeigt
- ✅ Keine 404-Fehler mehr
- ✅ Optimale Bildqualität basierend auf verfügbaren Größen
- ✅ Konsistente Bildgenerierung für alle Artikel
- ✅ Responsive und performant
Testbeispiel: Flashback Symposium Artikel #
- Originalbild: 1748px breit
- Generierte Größen: 320, 480, 640, 768, 1024, 1440px (beide Formate: webp, jpeg)
- Lightbox lädt: 1440px Version (größte verfügbare)
- Netzwerk-Status: Alle Requests erfolgreich (200 OK)
Technische Details #
Bildgenerierung #
Das Plugin erstellt jetzt konsistent folgende Größen für jedes Bild:
- 320px (mobile)
- 480px (small mobile)
- 640px (tablet portrait)
- 768px (tablet landscape)
- 1024px (desktop)
- 1440px (large desktop)
Jeweils in webp (modern, kleinere Dateigröße) und jpeg (Fallback) Format.
Browser-Kompatibilität #
- Modern: Lädt webp-Format
- Legacy: Fallback auf jpeg
- Responsive: Automatische Größenwahl basierend auf Viewport
Lessons Learned #
- Konsistente Konfiguration: Transform-Plugins brauchen einheitliche Width-Konfigurationen
- Dynamisches JavaScript: Hardcodierte Werte in JavaScript können bei variierenden Quellen problematisch sein
- srcset-Parsing: Moderne responsive Images erfordern intelligente JavaScript-Logik
- Cache-Management: Bei Plugin-Änderungen vollständiges Cache-Clearing notwendig
Auswirkungen #
- Alle bestehenden Artikel: Profitieren automatisch von der Verbesserung
- Neue Artikel: Werden automatisch mit konsistenten Bildgrößen verarbeitet
- Performance: Optimiert durch webp-Format und responsive Bildgrößen
- SEO: Verbessert durch optimierte Ladezeiten und keine 404-Fehler
Zukünftige Überlegungen #
- Bei Bedarf können weitere Bildgrößen hinzugefügt werden
- AVIF-Format könnte als weiteres modernes Format ergänzt werden
- Lazy Loading ist bereits implementiert für bessere Performance