Signatur
Beschreibung
MediaList.length liefert eine ganze Zahl: die Anzahl der einzelnen Medienabfragen in einer MediaList. Eine solche Liste bekommt man zum Beispiel über CSSStyleSheet.media, CSSMediaRule.media oder CSSImportRule.media. Sie enthält die Medienabfragen, die im media-Attribut eines <link>- oder <style>-Elements, in einer @media-Regel oder in einer @import-Anweisung stehen und dort durch Kommas getrennt sind.
Brauchbar ist die Eigenschaft vor allem, wenn man mit einer klassischen for-Schleife über die Liste läuft. Die Einträge liest man mit MediaList.item(index) oder in Klammerschreibweise (list[i]) aus. Außerdem prüft man damit schnell, ob ein Stylesheet überhaupt an Medienbedingungen gebunden ist. Bei length === 0 gilt es für alle Medien.
Die Eigenschaft ist schreibgeschützt. Die Liste ist dagegen live: Nach appendMedium(), deleteMedium() oder einer Zuweisung an mediaText liefert length sofort den neuen Wert.
Rückgabewert
0 heißt, dass keine Medienbedingung gesetzt ist.Beispiele
Anzahl der Medienabfragen eines Stylesheets ermitteln
// <style media="screen and (min-width: 600px), print">…</style>
const sheet = document.styleSheets[0];
console.log(sheet.media.length);
console.log(sheet.media.mediaText);
Über alle Medienabfragen iterieren
const style = document.createElement('style');
style.media = 'screen, print, (prefers-color-scheme: dark)';
document.head.append(style);
const { media } = style.sheet;
for (let i = 0; i < media.length; i++) {
console.log(`${i}: ${media.item(i)}`);
}
length ändert sich nach appendMedium() und deleteMedium() (Live-Liste)
const style = document.createElement('style');
document.head.append(style);
const { media } = style.sheet;
console.log(media.length); // noch keine Bedingung
media.appendMedium('print');
media.appendMedium('screen');
console.log(media.length);
media.deleteMedium('print');
console.log(media.length);
Stylesheets ohne Medienbedingung finden
const universalSheets = [...document.styleSheets]
.filter((sheet) => sheet.media.length === 0)
.map((sheet) => sheet.href ?? '(inline)');
console.log(universalSheets);
// Wichtig · Fallstricke
- Schreibgeschützt: Wer
media.length = 0zuweist, erreicht nichts, im Strict Mode gibt es sogar einenTypeError. Um die Liste zu leeren, setzt manmedia.mediaText = ''. - Kein Array:
MediaListhat zwarlengthund einen Index-Zugriff, aber keine Methoden wiemapoderfilter. MitArray.from(media)oder[...media]wandelt man die Liste in ein Array um. Die Liste ist iterierbar. - Ungültige Abfragen: Medienabfragen, die sich nicht korrekt parsen lassen, landen in manchen Fällen als
not allin der Liste und zählen dann trotzdem beilengthmit. - Nicht verwechseln mit
window.matchMedia(). Das liefert eineMediaQueryList, keinMediaList, und hat keinelength-Eigenschaft. - Fremde Stylesheets: Bei Stylesheets von einer anderen Herkunft (CORS) lässt sich
sheet.mediameist trotzdem auslesen. Der Zugriff aufcssRuleswird dagegen blockiert. - Kompatibilität: Wird von allen modernen Browsern unterstützt (Baseline).