Responsive Bilder

Text im Web wird automatisch am Bildschirmrand umgebrochen, damit er nicht überläuft. Bilder haben dagegen eine intrinsische Größe. Wenn ein Bild breiter als der Bildschirm ist, wird es über den Bildschirmrand hinaus angezeigt und der Nutzer muss horizontal scrollen, um es vollständig zu sehen.

Glücklicherweise bietet CSS Tools, mit denen Sie das verhindern können.

Bilder einschränken

In Ihrem Stylesheet können Sie max-inline-size verwenden, um festzulegen, dass Bilder nie breiter als ihr enthaltendes Element gerendert werden dürfen.

Browser Support

  • Chrome: 57.
  • Edge: 79.
  • Firefox: 41.
  • Safari: 12.1.

Source

img {
  max-inline-size: 100%;
  block-size: auto;
}

Sie können dieselbe Regel auch auf andere Arten von eingebetteten Inhalten wie Videos und iFrames anwenden.

img,
video,
iframe {
  max-inline-size: 100%;
  block-size: auto;
}

Mit dieser Regel skalieren Browser Bilder automatisch herunter, damit sie auf den Bildschirm passen.

Zwei Screenshots: Der erste zeigt ein Bild, das über die Browserbreite hinausgeht, der zweite dasselbe Bild, das auf den Browser-Viewport beschränkt ist.
Wenn Sie das Bild anpassen, können Nutzer es vollständig sehen, ohne scrollen zu müssen.

Wenn Sie den block-size-Wert auto hinzufügen, behält der Browser das Seitenverhältnis Ihrer Bilder bei, wenn er sie in der Größe anpasst.

Manchmal werden die Abmessungen eines Bildes von einem Content-Management-System (CMS) oder einem anderen System zur Bereitstellung von Inhalten festgelegt. Wenn für Ihr Design ein anderes Seitenverhältnis als das Standardseitenverhältnis des CMS erforderlich ist, können Sie die Eigenschaft aspect-ratio verwenden, um das Design Ihrer Website beizubehalten:

img {
  max-inline-size: 100%;
  block-size: auto;
  aspect-ratio: 2/1;
}

Leider bedeutet das oft, dass der Browser das Bild stauchen oder strecken muss, damit es in den vorgesehenen Bereich passt.

Profil eines gut aussehenden, fröhlich wirkenden Hundes mit einem Ball im Maul. Das Bild ist jedoch zusammengedrückt.
Wenn Sie das Seitenverhältnis des Bildes ändern, wird es gestaucht oder gestreckt dargestellt.

Verwenden Sie das Attribut object-fit, um zu verhindern, dass Bilder gestaucht oder gedehnt werden.

Browser Support

  • Chrome: 32.
  • Edge: 79.
  • Firefox: 36.
  • Safari: 10.

Source

Ein object-fit-Wert von contain weist den Browser an, das Seitenverhältnis des Bildes beizubehalten und bei Bedarf leeren Platz um das Bild herum zu lassen.

img {
  max-inline-size: 100%;
  block-size: auto;
  aspect-ratio: 2/1;
  object-fit: contain;
}

Ein object-fit-Wert von cover weist den Browser an, das Seitenverhältnis des Bildes beizubehalten und das Bild bei Bedarf zuzuschneiden.

img {
  max-inline-size: 100%;
  block-size: auto;
  aspect-ratio: 2/1;
  object-fit: cover;
}
Profil eines glücklich aussehenden, hübschen Hundes mit einem Ball im Maul; auf beiden Seiten des Bildes ist zusätzlicher Platz. Profil eines glücklich aussehenden, hübschen Hundes mit einem Ball im Maul; das Bild wurde oben und unten zugeschnitten.
Dasselbe Bild mit zwei verschiedenen Werten für „object-fit“. Das erste hat den `object-fit`-Wert `contain`, das zweite den `object-fit`-Wert `cover`.

Mit der Eigenschaft object-position können Sie die Position des Bildausschnitts ändern. Dadurch wird der Fokus des Zuschnitts angepasst, sodass der wichtigste Teil des Bildes weiterhin sichtbar ist.

Browser Support

  • Chrome: 32.
  • Edge: 79.
  • Firefox: 36.
  • Safari: 10.

Source

img {
  max-inline-size: 100%;
  block-size: auto;
  aspect-ratio: 2/1;
  object-fit: cover;
  object-position: top center;
}
Profil eines glücklich aussehenden, hübschen Hundes mit einem Ball im Maul; das Bild wurde nur unten zugeschnitten.
Sie können object-position so einstellen, dass nur eine Seite des Bildes zugeschnitten wird.

Bilder bereitstellen

Diese CSS-Regeln geben dem Browser vor, wie Bilder gerendert werden sollen. Sie können auch Hinweise in Ihrem HTML-Code angeben, wie der Browser diese Bilder verarbeiten soll.

Hinweise zur Größenanpassung

Wenn Sie die Abmessungen Ihres Bildes kennen, sollten Sie immer die Attribute width und height angeben. Auch wenn das Bild aufgrund Ihrer max-inline-size-Regel in einer anderen Größe gerendert wird, kennt der Browser das Verhältnis von Breite zu Höhe und kann den richtigen Platz reservieren. So wird verhindert, dass sich die anderen Inhalte verschieben, wenn das Bild geladen wird.

<img
 src="image.png"
 alt="A description of the image."
 width="300"
 height="200"
>
Im ersten Video ist ein Layout ohne definierte Bildabmessungen zu sehen. Beachten Sie, wie der Text springt, wenn die Bilder geladen werden. Im zweiten Video wurden die Bildabmessungen angegeben. Der Browser lässt also Platz für das Bild und der Text springt nicht, wenn das Bild geladen wird.

Hinweise zum Laden

Mit dem Attribut loading können Sie dem Browser mitteilen, ob das Laden des Bildes verzögert werden soll, bis es sich im oder in der Nähe des Darstellungsbereichs befindet. Verwenden Sie für Bilder „below the fold“ (mit Scrollen sichtbar) den Wert lazy. Der Browser lädt Bilder mit Lazy Loading erst, wenn der Nutzer so weit nach unten gescrollt hat, dass das Bild bald sichtbar wird. Wenn der Nutzer nicht scrollt, wird das Bild nie geladen.

<img
 src="image.png"
 alt="A description of the image."
 width="300"
 height="200"
 loading="lazy"
>
Bilder mit Lazy Loading werden erst geladen, wenn der Nutzer zu ihnen scrollt.

Verwenden Sie für ein Hero-Bild „above the fold“ nicht loading. Wenn auf Ihrer Website das Attribut loading="lazy" automatisch angewendet wird, können Sie loading in der Regel auf den Standardwert eager setzen, um zu verhindern, dass Bilder mit Lazy Loading geladen werden:

<img
 src="hero.jpg"
 alt="A description of the image."
 width="1200"
 height="800"
 loading="eager"
>

Abrufpriorität

Bei wichtigen Bildern wie dem LCP-Bild können Sie das Laden mit Fetch Priority weiter priorisieren, indem Sie das Attribut fetchpriority auf high setzen:

<img
 src="hero.jpg"
 alt="A description of the image."
 width="1200"
 height="800"
 loading="eager"
 fetchpriority="high"
>

Dadurch wird der Browser angewiesen, das Bild sofort und mit hoher Priorität abzurufen, anstatt zu warten, bis der Browser das Layout fertiggestellt hat und Bilder normal abrufen würde.

Wenn Sie den Browser jedoch auffordern, den Download einer Ressource wie eines Bildes zu priorisieren, muss er den Download einer anderen Ressource wie eines Skripts oder einer Schriftartdatei herabstufen. Legen Sie fetchpriority="high" nur für ein Bild fest, wenn es wirklich wichtig ist.

Hinweise zum Vorabladen

Am besten vermeiden Sie das Vorladen, indem Sie alle Bilder in die ursprüngliche HTML-Datei einfügen. Einige Bilder sind jedoch möglicherweise nicht verfügbar, z. B. Bilder, die mit JavaScript oder einem CSS-Hintergrundbild hinzugefügt wurden.

Mit dem Vorladen können Sie den Browser dazu bringen, diese wichtigen Bilder vorab abzurufen. Bei wirklich wichtigen Bildern können Sie das Vorladen mit dem Attribut fetchpriority kombinieren:

<link rel="preload" href="hero.jpg" as="image" fetchpriority="high">

Verwenden Sie diese Attribute sparsam, um zu vermeiden, dass die Priorisierungsheuristiken des Browsers zu oft überschrieben werden. Eine übermäßige Nutzung kann zu Leistungseinbußen führen.

Einige Browser unterstützen das Vorabladen responsiver Bilder basierend auf srcset mithilfe der Attribute imagesrcset und imagesizes. Beispiel:

<link rel="preload" imagesrcset="hero_sm.jpg 1x hero_med.jpg 2x hero_lg.jpg 3x" as="image" fetchpriority="high">

Wenn Sie den href-Fallback ausschließen, wird das richtige Bild auch in Browsern ohne srcset-Unterstützung vorab geladen.

Sie können Bilder nicht in verschiedenen Formaten vorab laden, je nachdem, welche Formate vom Browser unterstützt werden. Dies kann zu zusätzlichen Downloads führen, die das Datenvolumen der Nutzer unnötig belasten.

Responsive Bilder mit srcset

Dank dieser max-inline-size: 100%-Deklaration können Ihre Bilder nicht aus ihren Containern herausragen. Wenn ein Nutzer jedoch einen kleinen Bildschirm und ein Netzwerk mit geringer Bandbreite hat, werden Daten verschwendet, wenn er Bilder in derselben Größe wie Nutzer mit größeren Bildschirmen herunterladen muss.

Um dieses Problem zu beheben, fügen Sie mehrere Versionen desselben Bildes in verschiedenen Größen hinzu und verwenden Sie das Attribut srcset, um dem Browser mitzuteilen, dass diese Größen vorhanden sind und wann sie verwendet werden sollen.

Breiten-Deskriptor

Sie können srcset mit einer durch Kommas getrennten Liste von Werten definieren. Jeder Wert ist die URL eines Bildes, gefolgt von einem Leerzeichen und dann von einigen Metadaten zum Bild, die als Deskriptor bezeichnet werden.

In diesem Beispiel wird die Breite der einzelnen Bilder in den Metadaten mit der Einheit w beschrieben. Ein w entspricht der Breite eines Pixels.

<img
 src="small-image.png"
 alt="A description of the image."
 width="300"
 height="200"
 loading="lazy"
 decoding="async"
 srcset="small-image.png 300w,
  medium-image.png 600w,
  large-image.png 1200w"
>

Das Attribut srcset ergänzt das Attribut src, anstatt es zu ersetzen. Sie benötigen weiterhin ein gültiges src-Attribut, aber der Browser kann seinen Wert durch eine der im srcset aufgeführten Optionen ersetzen. Um Bandbreite zu sparen, lädt der Browser das größere Bild nur herunter, wenn es benötigt wird.

Größen

Wenn Sie den Breiten-Deskriptor verwenden, müssen Sie auch das Attribut sizes verwenden, um dem Browser weitere Informationen zu geben. Damit wird dem Browser mitgeteilt, welche Größe das Bild unter verschiedenen Bedingungen haben soll. Diese Bedingungen werden in einer Media-Anfrage angegeben.

Das Attribut sizes akzeptiert eine durch Kommas getrennte Liste von Media-Anfragen und Bildbreiten.

<img
 src="small-image.png"
 alt="A description of the image."
 width="300"
 height="200"
 loading="lazy"
 decoding="async"
 srcset="small-image.png 300w,
  medium-image.png 600w,
  large-image.png 1200w"
 sizes="(min-width: 66em) 33vw,
  (min-width: 44em) 50vw,
  100vw"
>

In diesem Beispiel wird dem Browser mitgeteilt, dass in einem Viewport mit einer Breite über 66em das Bild nicht breiter als ein Drittel des Bildschirms angezeigt werden soll (z. B. in einem dreispaltigen Layout).

Bei einer Breite des Viewports zwischen 44em und 66em soll das Bild mit der halben Bildschirmbreite angezeigt werden (wie in einem zweispaltigen Layout).

Bei einer Breite von weniger als 44em wird das Bild in der vollen Breite des Bildschirms angezeigt.

Das bedeutet, dass das größte Bild nicht unbedingt für den breitesten Bildschirm verwendet wird. In einem breiten Browserfenster, in dem ein mehrspaltiges Layout angezeigt werden kann, wird ein Bild verwendet, das in eine Spalte passt. Dieses Bild ist möglicherweise kleiner als ein Bild, das für ein einspaltiges Layout auf einem schmaleren Bildschirm verwendet wird.

Mit Größen-Deskriptoren können Sie ändern, wie Ihre Seite auf verschiedenen Bildschirmgrößen dargestellt wird.

Descriptor für die Pixeldichte

Sie können auch Deskriptoren verwenden, um eine alternative Version von Bildern für HD-Displays bereitzustellen. So bleiben die Bilder auch bei den höheren Auflösungen, die diese Displays bieten, scharf.

Zwei Versionen desselben Bildes eines glücklich aussehenden, hübschen Hundes mit einem Ball im Maul. Das eine Bild ist scharf, das andere unscharf.
Bilder mit niedrigerer Pixeldichte können verschwommen aussehen.

Verwenden Sie den Dichte-Deskriptor, um die Pixeldichte des Bildes im Verhältnis zum Bild im Attribut src zu beschreiben. Der Dichtedeskriptor ist eine Zahl, gefolgt vom Buchstaben „x“, z. B. 1x oder 2x.

<img
 src="small-image.png"
 alt="A description of the image."
 width="300"
 height="200"
 loading="lazy"
 decoding="async"
 srcset="small-image.png 1x,
  medium-image.png 2x,
  large-image.png 3x"
>

Wenn small-image.png 300 × 200 Pixel groß ist und medium-image.png 600 × 400 Pixel, kann medium-image.png in der Liste srcset nach 2x stehen.

Sie müssen keine ganzen Zahlen verwenden. Wenn eine andere Version des Bildes 450 × 300 Pixel groß ist, können Sie sie mit 1.5x beschreiben.

Präsentationsbilder

Bilder in HTML sind Inhalte. Deshalb sollten Sie das alt-Attribut mit einer Beschreibung des Bildes für Screenreader und Suchmaschinen einfügen.

Wenn Sie ein dekoratives Bild ohne aussagekräftigen Inhalt einbetten, können Sie ein leeres alt-Attribut verwenden.

<img
 src="flourish.png"
 alt=""
 width="400"
 height="50"
>

Sie müssen das Attribut alt immer angeben, auch wenn es leer ist. Ein leeres alt-Attribut signalisiert einem Screenreader, dass das Bild nur zur Darstellung dient. Wenn das Attribut alt fehlt, sind diese Informationen nicht verfügbar.

Idealerweise werden präsentative oder dekorative Bilder mit CSS anstelle von HTML eingebunden. HTML ist für die Struktur. CSS ist für die Darstellung zuständig.

Hintergrundbilder

Verwenden Sie die background-image-Eigenschaft in CSS, um Präsentationsbilder zu laden.

element {
  background-image: url(flourish.png);
}

Sie können mehrere Bildkandidaten mit der Funktion image-set für background-image angeben.

Die image-set-Funktion in CSS funktioniert ähnlich wie das srcset-Attribut in HTML. Stellen Sie eine Liste mit Bildern und einem Pixeldichte-Deskriptor für jedes Bild bereit.

element {
  background-image: image-set(
    small-image.png 1x,
    medium-image.png 2x,
    large-image.png 3x
  );
}

Der Browser wählt das für die Pixeldichte des Geräts am besten geeignete Bild aus.

Beim Hinzufügen von Bildern auf Ihrer Website müssen Sie viele Faktoren berücksichtigen, darunter:

  • Für jedes Bild wird der richtige Platz reserviert.
  • Ermitteln, wie viele Größen Sie benötigen.
  • Entscheiden, ob das Bild Inhalt oder dekorativ ist.

Es lohnt sich, sich die Zeit zu nehmen, die Bilder richtig zu gestalten. Schlechte Bildstrategien können Ihre Nutzer verärgern und frustrieren. Mit einer guten Bildstrategie wirkt Ihre Website schnell und scharf, unabhängig vom Gerät oder der Netzwerkverbindung des Nutzers.

Es gibt noch ein weiteres HTML-Element, mit dem Sie mehr Kontrolle über Ihre Bilder haben: das picture-Element.

Dein Wissen wird getestet

Wissen zu Bildern testen

Damit Bilder in den Darstellungsbereich passen, müssen Stile hinzugefügt werden.

Richtig
Bilder ohne Begrenzung werden in ihrer natürlichen Größe angezeigt.
Falsch
Stile sind erforderlich.

Wenn die Höhe und Breite eines Bildes in ein unnatürliches Seitenverhältnis gezwungen wurden, welche Stile können dann helfen, das Bild an diese Proportionen anzupassen?

object-fit
Geben Sie mit Keywords wie contain und cover an, wie das Bild aussehen soll.
image-fit
Diese Property gibt es nicht, ich habe sie erfunden.
fit-image
Diese Property gibt es nicht, ich habe sie erfunden.
aspect-ratio
Dadurch kann ein unnatürliches Bildverhältnis entstehen oder behoben werden.

Wenn Sie height und width in Ihre Bilder einfügen, kann CSS sie nicht unterschiedlich gestalten.

Richtig
Sie sind eher als Hinweise denn als Regeln zu verstehen.
Falsch
CSS bietet viele dynamische Optionen zum Anpassen der Größe von Bildern, auch wenn Höhe und Breite inline im Tag angegeben sind.

Das Attribut srcset _______ das Attribut src nicht, sondern _______.

ergänzt, ersetzt
srcset ersetzt das Attribut src definitiv nicht.
replace, complements
Dadurch stehen dem Browser zusätzliche Optionen zur Auswahl, sofern er dazu in der Lage ist.

Wenn das alt-Attribut für ein Bild fehlt, ist das dasselbe wie ein leeres alt-Attribut.

Richtig
Ein leeres alt-Attribut signalisiert einem Screenreader, dass dieses Bild nur zur Darstellung dient.
Falsch
Fehlende alt-Signale werden von Screenreadern nicht erkannt.