HTML Bilder

Bilder bringen Leben auf deine Webseite. Hier erfährst du alles Wichtige über Formate, Einbindung, Alt-Texte, Hintergrundbilder, responsive Darstellung, Float, Caption und Performance-Tipps.

Bilder in HTML

Bilder sind ein zentrales Gestaltungselement auf Webseiten. Sie können zur Illustration, als Designelement oder zur visuellen Unterstützung von Inhalten dienen. HTML bietet mehrere Möglichkeiten, um Bilder einzubinden und zu steuern - vom klassischen <img>-Tag bis hin zu CSS-Hintergrundbildern.

Das <img>-Element

Das Standard-HTML-Tag für Bilder ist <img> (image). Es wird ohne schließendes Tag geschrieben und benötigt mindestens das Attribut src (source / Bildquelle) und alt (alternativer Text).

HTML
<img src="katze.jpg" alt="Eine schlafende Katze">
  • src - Bilddatei oder URL.
  • alt - angezeigt, wenn Bild nicht geladen wird; wichtig für Screenreader.
  • title - Tooltip beim Mouseover (optional).
  • width / height - Größe in Pixeln oder Prozent (optional, besser per CSS).

Bildformate und Einsatzbereiche

Die Wahl des richtigen Formats hängt vom Bildinhalt, Transparenzbedarf und gewünschter Qualität ab.

Format Typ Eigenschaften Empfohlene Verwendung
JPG / JPEG Raster Verlustbehaftet, gute Kompression, keine Transparenz Fotos, realistische Motive
PNG Raster Verlustfrei, unterstützt Transparenz Grafiken, Logos, Screenshots
GIF Raster 256 Farben, einfache Animationen Kleine Animationen, Icons
WEBP Raster Gute Kompression, Transparenz und Animation möglich Allround-Format für moderne Websites
SVG Vektor Skalierbar, keine Qualitätsverluste Logos, Icons, Illustrationen
AVIF Raster Hohe Kompression, moderne Alternative zu WebP Fotos und komplexe Grafiken

Responsive Bilder & unterschiedliche Formate

Bilder sollten auf allen Geräten gut aussehen. Die einfachste Lösung:

html
<style>
img {
  max-width: 100%;
  height: auto;
}
</style>

Manchmal möchtest du unterschiedliche Bildformate oder -größen abhängig vom Gerät oder Browser nutzen. Moderne Browser unterstützen Formate wie WebP oder AVIF, die kleiner und schneller laden als klassische JPG oder PNG. Für Browser, die diese Formate nicht kennen, solltest du immer ein Fallback-Bild angeben.

Das erreichst du mit dem <picture>-Element:

html
<picture>
    <source srcset="bild.avif" type="image/avif">
    <source srcset="bild.webp" type="image/webp">
    <img src="bild.jpg" alt="Beispielbild">
</picture>
Merke
  • <picture> erlaubt es, unterschiedliche Bildquellen zu definieren.
  • <source> bestimmt, welche Datei bei welchem Format oder Gerät geladen wird.
  • Das <img>-Tag am Ende dient als Fallback, falls der Browser kein modernes Format unterstützt.
  • So sparst du Ladezeit, Bandbreite und stellst sicher, dass alle Nutzer ein Bild sehen.

Du kannst zusätzlich media-Attribute verwenden, um Bilder für bestimmte Bildschirmgrößen zu laden:

HTML
<picture>
    <source srcset="bild-klein.jpg" media="(max-width: 600px)">
    <source srcset="bild-gross.jpg" media="(min-width: 601px)">
    <img src="bild.jpg" alt="Beispielbild">
</picture>

So passt sich dein Bild an die Bildschirmgröße an und lädt jeweils die passende Variante.

srcset und sizes - Bilder für verschiedene Auflösungen

Neben dem <picture>-Element gibt es eine weitere Möglichkeit, responsive Bilder bereitzustellen: die Attribute srcset und sizes direkt am <img>-Tag.

srcset für verschiedene Pixeldichten (Retina)

Moderne Displays haben unterschiedliche Pixeldichten. Mit srcset kannst du hochauflösende Varianten für Retina-Displays bereitstellen:

HTML
<!-- Pixeldichte-Varianten (1x, 2x, 3x) -->
<img 
    src="logo.png"
    srcset="logo.png 1x,
            logo@2x.png 2x,
            logo@3x.png 3x"
    alt="Firmenlogo"
    width="200"
    height="100">

srcset mit Breiten-Deskriptoren

Für Content-Bilder, die ihre Größe je nach Viewport ändern, verwendest du Breiten-Deskriptoren (w):

HTML
<img 
    src="bild-800.jpg"
    srcset="bild-400.jpg 400w,
            bild-800.jpg 800w,
            bild-1200.jpg 1200w,
            bild-1600.jpg 1600w"
    sizes="(max-width: 600px) 100vw,
           (max-width: 1200px) 50vw,
           800px"
    alt="Landschaftsfoto">
sizes erklärt

Das sizes-Attribut teilt dem Browser mit, wie breit das Bild im Layout sein wird:

  • (max-width: 600px) 100vw - Bei Viewports bis 600px nimmt das Bild 100% der Breite ein
  • (max-width: 1200px) 50vw - Bei Viewports bis 1200px nimmt es 50% ein
  • 800px - Standardfall: Das Bild ist 800px breit

Der Browser wählt dann automatisch die passende Bildgröße aus srcset.

Bilder mit Beschriftung - figure und figcaption

Das <figure>-Element ist ein semantischer Container für Bilder, Diagramme, Code-Beispiele oder andere Medien, die eine Beschriftung benötigen. Die Beschriftung wird mit <figcaption> hinzugefügt.

HTML
<figure>
    <img src="see.jpg" alt="Blick über den See">
    <figcaption>Ein ruhiger Morgen am See</figcaption>
</figure>

figure mit mehreren Bildern

Ein <figure>-Element kann auch mehrere Bilder enthalten:

HTML
<figure>
    <img src="vorher.jpg" alt="Raum vor der Renovierung">
    <img src="nachher.jpg" alt="Raum nach der Renovierung">
    <figcaption>Vorher-Nachher-Vergleich der Wohnzimmer-Renovierung</figcaption>
</figure>
Semantik beachten
  • <figure> ist für eigenständige Inhalte gedacht, die vom Haupttext referenziert werden
  • <figcaption> kann am Anfang oder Ende stehen
  • Der alt-Text beschreibt das Bild, die figcaption gibt Kontext
  • Screenreader lesen beides - vermeide Wiederholungen

Bilder als Hintergrund

HTML
<style>
.hero {
  background-image: url('header-bg.jpg');
  background-size: cover;
  background-position: center;
}
</style>

Positionierung im Text

HTML
<style>
img.left {
  float: left;
  margin-right: 1em;
}
</style>

Text umfließt das Bild. Alternativ: display: flex; oder grid.

Alt-Texte und Barrierefreiheit

Das alt-Attribut ist eines der wichtigsten Attribute für Bilder. Es wird von Screenreadern vorgelesen, erscheint wenn das Bild nicht lädt, und hilft Suchmaschinen beim Verstehen des Bildinhalts.

Gute Alt-Texte schreiben

Gute Beispiele
  • alt="Golden Retriever spielt mit Ball im Park"
  • alt="Balkendiagramm: Umsatz 2024 nach Quartalen"
  • alt="Screenshot: Einstellungen-Menü in Firefox"
Schlechte Beispiele
  • alt="Bild" - Zu unspezifisch
  • alt="hund.jpg" - Dateiname ist kein Alt-Text
  • alt="Bild von einem Hund der im Park spielt und einen Ball fängt während die Sonne scheint..." - Zu lang

Wann ein leerer Alt-Text sinnvoll ist

Dekorative Bilder, die keine Information vermitteln, erhalten einen leeren Alt-Text. So überspringen Screenreader sie:

HTML
<!-- Dekoratives Trennelement -->
<img src="divider.svg" alt="">

<!-- Icon neben Text (Text erklärt bereits) -->
<button>
    <img src="search-icon.svg" alt="">
    Suchen
</button>

<!-- Hintergrundbild als CSS ist besser -->
Wichtig

Niemals das alt-Attribut weglassen! Ein fehlendes alt ist nicht das Gleiche wie alt="". Ohne Attribut lesen manche Screenreader den Dateinamen vor.

Performance-Optimierung für Bilder

Bilder sind oft der größte Anteil am Seitengewicht. Mit ein paar Techniken kannst du die Ladezeit drastisch verbessern.

Lazy Loading - Bilder erst bei Bedarf laden

Mit loading="lazy" werden Bilder erst geladen, wenn sie in den sichtbaren Bereich scrollen:

HTML
<!-- Lazy Loading für Bilder unterhalb des sichtbaren Bereichs -->
<img 
    src="bild.jpg" 
    alt="Beispielbild" 
    loading="lazy"
    width="800"
    height="600">

<!-- Hero-Bilder sollten NICHT lazy sein -->
<img 
    src="hero.jpg" 
    alt="Hero Banner" 
    loading="eager">

Width und Height gegen Layout-Shifts

Gib immer width und height an - so reserviert der Browser Platz und verhindert Layoutsprünge (CLS):

HTML
<!-- Mit Dimensionen - Browser reserviert Platz -->
<img 
    src="foto.jpg" 
    alt="Produktfoto" 
    width="400" 
    height="300"
    loading="lazy">

<!-- CSS macht es trotzdem responsiv -->
<style>
img {
    max-width: 100%;
    height: auto;
}
</style>

fetchpriority für wichtige Bilder

Das fetchpriority-Attribut teilt dem Browser mit, welche Bilder priorisiert geladen werden sollen:

HTML
<!-- LCP-Bild (Largest Contentful Paint) priorisieren -->
<img 
    src="hero-banner.jpg" 
    alt="Willkommen auf unserer Seite"
    fetchpriority="high">

<!-- Unwichtige Bilder herabstufen -->
<img 
    src="decoration.jpg" 
    alt="" 
    fetchpriority="low"
    loading="lazy">

decoding="async" für flüssiges Rendering

Mit decoding="async" blockiert das Dekodieren des Bildes nicht das Rendering der Seite:

HTML
<img 
    src="grosses-bild.jpg" 
    alt="Hochauflösendes Foto"
    decoding="async"
    loading="lazy">
Performance-Checkliste
  • Moderne Formate nutzen (WebP, AVIF mit Fallback)
  • Bilder komprimieren (TinyPNG, Squoosh, ImageOptim)
  • loading="lazy" für Bilder below the fold
  • width und height immer angeben
  • fetchpriority="high" für Hero/LCP-Bilder
  • Bilder in passender Größe ausliefern (nicht 4000px für 400px-Anzeige)

Häufige Fehler bei HTML-Bildern

✗ Fehler
  • Alt-Attribut weglassen
  • Riesige Bilder ohne Kompression
  • Keine width/height → Layout-Shifts
  • Alle Bilder mit loading="lazy" (auch Hero)
  • Nur JPG für alles verwenden
  • Absolute URLs zu externen Bildern
✓ Best Practices
  • Immer alt angeben (leer für Deko)
  • Bilder optimieren und komprimieren
  • width/height für Platzreservierung
  • Hero: loading="eager" + fetchpriority="high"
  • Format nach Inhalt wählen (WebP, SVG)
  • Bilder lokal hosten für Kontrolle

Mehr aus HTML

Tutorials werden geladen...