Signatur
Beschreibung
Die Eigenschaft imageSizes spiegelt das Attribut imagesizes eines <link>-Elements wider. Sie arbeitet mit imageSrcset zusammen und entspricht dem Attribut sizes eines <img>-Elements: Eine kommagetrennte Liste aus Media-Conditions und Längenangaben (z. B. (max-width: 600px) 100vw, 50vw) teilt dem Browser mit, wie breit das Bild später dargestellt wird.
Wichtig ist das vor allem beim Vorladen responsiver Bilder mit rel="preload" und as="image". Mit imageSrcset und imageSizes wählt der Browser schon beim Preload dieselbe Bildvariante aus, die das spätere <img> mit srcset/sizes anfordern würde. So wird nichts doppelt geladen. Typisch ist das für LCP-Bilder (Hero-Bilder), um den Largest Contentful Paint zu verbessern.
Der Wert ist ein einfacher String. Das Lesen liefert den Attributwert oder einen leeren String, wenn das Attribut fehlt. Das Schreiben setzt das Attribut imagesizes. Der Browser prüft den Inhalt dabei nicht auf Gültigkeit: Ungültige Angaben werden erst beim Auswählen der Bildquelle ignoriert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | "" | Nur beim Setzen: eine sizes-Liste im gleichen Format wie beim <img>-Attribut sizes, z. B. "(max-width: 800px) 100vw, 800px". |
Rückgabewert
imagesizes oder ein leerer String, wenn es nicht gesetzt ist.Beispiele
Wert eines vorhandenen Preload-Links auslesen
// HTML:
// <link rel="preload" as="image"
// href="hero-800.jpg"
// imagesrcset="hero-400.jpg 400w, hero-800.jpg 800w, hero-1600.jpg 1600w"
// imagesizes="(max-width: 600px) 100vw, 50vw">
const link = document.querySelector('link[rel="preload"][as="image"]');
console.log(link.imageSizes);
console.log(link.imageSrcset);
Responsives Hero-Bild dynamisch vorladen
const preloadResponsiveImage = ({ src, srcset, sizes }) => {
const link = document.createElement('link');
link.rel = 'preload';
link.as = 'image';
link.href = src; // Fallback für Browser ohne imagesrcset-Unterstützung
link.imageSrcset = srcset;
link.imageSizes = sizes;
document.head.append(link);
return link;
};
const link = preloadResponsiveImage({
src: '/img/hero-800.webp',
srcset: '/img/hero-400.webp 400w, /img/hero-800.webp 800w, /img/hero-1600.webp 1600w',
sizes: '(max-width: 700px) 100vw, 700px'
});
console.log(link.getAttribute('imagesizes'));
Feature-Erkennung und Standardwert
const supportsImageSizes = 'imageSizes' in HTMLLinkElement.prototype;
console.log('imageSizes unterstützt:', supportsImageSizes);
const link = document.createElement('link');
console.log(JSON.stringify(link.imageSizes)); // Attribut fehlt → leerer String
link.imageSizes = '100vw';
console.log(link.outerHTML);
// Wichtig · Fallstricke
- Nur zusammen mit
imageSrcsetsinnvoll: Ohneimagesrcsetmitw-Angaben hatimageSizeskeine Wirkung. Bei Dichte-Angaben wie1xoder2xwirdsizesnicht beachtet. - Werte müssen übereinstimmen:
imageSizes/imageSrcsetdes Preload-Links müssen genau zusizes/srcsetdes späteren<img>passen. Sonst lädt der Browser womöglich eine andere Variante und das Bild wird doppelt übertragen. In der Konsole erscheint dann oft die Warnung „preloaded but not used“. - Setzen Sie
hrefals Fallback: Ältere Browser (etwa Safari vor 17.2) kennenimagesrcsetnicht und laden sonst gar nichts vor. Unterstützende Browser ignorierenhref, sobaldimagesrcsetvorhanden ist. - Die Groß- und Kleinschreibung unterscheidet sich: Die Eigenschaft heißt
imageSizes(camelCase), das HTML-Attributimagesizes(klein geschrieben). - Der Browser prüft den Wert nicht. Ein Tippfehler wirft keinen Fehler, sondern führt meist dazu, dass der Browser mit dem Standardwert
100vwrechnet und dadurch eine zu große Bildvariante lädt. - Ein Preload greift nur, wenn der Link früh im Dokument steht. Wird er per JavaScript erst spät eingefügt, bringt er für LCP-Bilder oft wenig. Dann ist statisches HTML oder
fetchpriority=\"high\"am<img>vorzuziehen.