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).
<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:
<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:
<picture>
<source srcset="bild.avif" type="image/avif">
<source srcset="bild.webp" type="image/webp">
<img src="bild.jpg" alt="Beispielbild">
</picture>
<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:
<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:
<!-- 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):
<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">
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% ein800px- 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.
<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:
<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>
<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, diefigcaptiongibt Kontext - Screenreader lesen beides - vermeide Wiederholungen
Bilder als Hintergrund
<style>
.hero {
background-image: url('header-bg.jpg');
background-size: cover;
background-position: center;
}
</style>
Positionierung im Text
<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
alt="Golden Retriever spielt mit Ball im Park"alt="Balkendiagramm: Umsatz 2024 nach Quartalen"alt="Screenshot: Einstellungen-Menü in Firefox"
alt="Bild"- Zu unspezifischalt="hund.jpg"- Dateiname ist kein Alt-Textalt="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:
<!-- 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 -->
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:
<!-- 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):
<!-- 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:
<!-- 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:
<img
src="grosses-bild.jpg"
alt="Hochauflösendes Foto"
decoding="async"
loading="lazy">
- Moderne Formate nutzen (WebP, AVIF mit Fallback)
- Bilder komprimieren (TinyPNG, Squoosh, ImageOptim)
loading="lazy"für Bilder below the foldwidthundheightimmer angebenfetchpriority="high"für Hero/LCP-Bilder- Bilder in passender Größe ausliefern (nicht 4000px für 400px-Anzeige)
Häufige Fehler bei HTML-Bildern
- 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
- Immer
altangeben (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...