Signatur
Beschreibung
Die schreibgeschützte Eigenschaft supportsText der Schnittstelle CSSImportRule liefert den Text der Bedingung, die in einer @import-Regel mit supports() angegeben ist. So steht bei @import url("grid.css") supports(display: grid); in supportsText der Wert "display: grid". Die umschließende Funktion supports( … ) gehört nicht zum Rückgabewert.
Mit einer solchen bedingten @import-Regel lädt der Browser ein Stylesheet nur dann, wenn er die angegebene Eigenschaft bzw. den Selektor unterstützt. Die Bedingung folgt derselben Syntax wie bei @supports, also z. B. (display: grid) and (gap: 1rem) oder selector(:has(a)).
Die Eigenschaft hilft vor allem beim Untersuchen von Stylesheets per Skript, etwa in Entwicklerwerkzeugen, CSS-Analysetools oder beim Debuggen: Man sieht damit, welche Importe an Bedingungen geknüpft sind. Ob die Bedingung im aktuellen Browser erfüllt ist, sagt supportsText nicht. Dafür nimmt man CSS.supports().
Rückgabewert
supports( … ). null, wenn die @import-Regel keine supports()-Bedingung hat.Beispiele
Bedingung einer @import-Regel auslesen
// Stylesheet mit bedingtem Import anlegen
const style = document.createElement('style');
style.textContent = '@import url("grid.css") supports(display: grid);';
document.head.append(style);
const rule = style.sheet.cssRules[0];
console.log(rule instanceof CSSImportRule); // true
console.log(rule.supportsText);
Import ohne supports() liefert null
const style = document.createElement('style');
style.textContent = '@import url("basis.css");';
document.head.append(style);
const rule = style.sheet.cssRules[0];
console.log(rule.supportsText);
Alle bedingten Importe auflisten und mit CSS.supports() prüfen
const listConditionalImports = () => {
const result = [];
for (const sheet of document.styleSheets) {
let rules;
try {
rules = sheet.cssRules; // kann bei fremden Ursprüngen fehlschlagen
} catch {
continue;
}
for (const rule of rules) {
if (rule instanceof CSSImportRule && rule.supportsText) {
result.push({
href: rule.href,
bedingung: rule.supportsText,
erfuellt: CSS.supports(rule.supportsText)
});
}
}
}
return result;
};
console.table(listConditionalImports());
// Wichtig · Fallstricke
- Browser-Kompatibilität:
supports()in@importund damit auchsupportsTextsind relativ neu (Firefox ab 115, in Chromium und Safari erst in neueren Versionen). In älteren Browsern ist die Eigenschaftundefined. Davor schützt eine Prüfung wie'supportsText' in CSSImportRule.prototype. - Ältere Browser, die
supports()in@importnicht kennen, verwerfen die ganze Regel als ungültig. Sie taucht dann gar nicht incssRulesauf. - Die Eigenschaft ist schreibgeschützt. Wer ihr einen Wert zuweist, ändert nichts, im Strict Mode gibt es einen
TypeError. - Der Wert kann gegenüber dem Quelltext normalisiert sein (Leerzeichen, Groß- und Kleinschreibung). Daher besser nicht exakt mit dem Original-String vergleichen.
- Ob die Bedingung zutrifft, verrät
supportsTextnicht. Dafür gibt esCSS.supports(). - Bei Stylesheets von fremden Ursprüngen ohne CORS löst der Zugriff auf
cssRuleseinenSecurityErroraus.