Signatur
Beschreibung
Die Eigenschaft containerQuery eines CSSContainerRule-Objekts gibt nur den Abfrage-Teil einer @container-Regel zurück. Bei der Regel @container sidebar (min-width: 400px) { … } liefert containerQuery den Wert "(min-width: 400px)". Der Name sidebar steht getrennt in containerName.
Das ist der Unterschied zur geerbten Eigenschaft conditionText aus CSSConditionRule. Sie enthält die ganze Bedingung mit Name, also "sidebar (min-width: 400px)". Mit containerQuery muss man diese Zeichenkette nicht selbst zerlegen, um nur die Größen- oder Stilbedingung zu bekommen.
Typische Einsatzfälle sind Werkzeuge, die Stylesheets auswerten: Debug-Overlays, Linter, Übersichten über alle Container-Breakpoints einer Seite oder Polyfills, die Container-Abfragen per JavaScript nachbilden. Die Eigenschaft ist nur lesbar. Um die Bedingung zu ändern, muss man die Regel löschen und mit CSSStyleSheet.insertRule() neu einfügen.
Rückgabewert
"(min-width: 400px)" oder "style(--theme: dark)".Beispiele
Abfrage-Teil einer Container-Regel auslesen
const style = document.createElement('style');
style.textContent = `
.card-wrapper { container: sidebar / inline-size; }
@container sidebar (min-width: 400px) {
.card { display: grid; }
}
`;
document.head.append(style);
const rule = [...style.sheet.cssRules]
.find((r) => r instanceof CSSContainerRule);
console.log(rule.containerName); // Name
console.log(rule.containerQuery); // nur die Abfrage
console.log(rule.conditionText); // ganze Bedingung
Alle Container-Breakpoints der Seite auflisten
const collectContainerQueries = (rules, result = []) => {
for (const rule of rules) {
if (rule instanceof CSSContainerRule) {
result.push({
name: rule.containerName || '(unbenannt)',
query: rule.containerQuery,
});
}
// In verschachtelten Regeln (@media, @supports, @layer) weitersuchen
if (rule.cssRules) collectContainerQueries(rule.cssRules, result);
}
return result;
};
const all = [];
for (const sheet of document.styleSheets) {
try {
collectContainerQueries(sheet.cssRules, all);
} catch {
// Fremd-Stylesheet ohne CORS: Zugriff auf cssRules verweigert
}
}
console.table(all);
Regel ohne Container-Namen
const sheet = new CSSStyleSheet();
sheet.replaceSync('@container (width > 30em) { h2 { font-size: 2rem; } }');
const [rule] = sheet.cssRules;
console.log(JSON.stringify(rule.containerName));
console.log(rule.containerQuery);
// Wichtig · Fallstricke
- Nur lesbar: Wer
containerQueryetwas zuweist, ändert nichts. Im Strict Mode wird einTypeErrorausgelöst. Zum Ändern die Regel mitdeleteRule()entfernen und mitinsertRule()neu einfügen. - Normalisierung: Der Wert ist die vom Browser serialisierte Form, nicht der Originaltext aus dem Quellcode. Leerzeichen, Groß- und Kleinschreibung oder Einheiten können abweichen. Deshalb nicht exakt gegen den Quelltext vergleichen.
- Mehrere Bedingungen: Die Eigenschaft ist für Regeln mit einer Container-Bedingung gedacht. Bei Regeln mit mehreren, durch Komma getrennten Bedingungen (neuere Spezifikation) ist das Ergebnis nicht aussagekräftig. Dort die neuere Eigenschaft
conditionsverwenden, sofern der Browser sie unterstützt, oderconditionTextauswerten. - Stylesheets von fremden Ursprüngen: Beim Zugriff auf
cssRuleseines Cross-Origin-Stylesheets ohne passende CORS-Header wird einSecurityErrorausgelöst. Den Zugriff deshalb intry…catcheinschließen. - Kompatibilität: Verfügbar ab Chrome/Edge 111, Firefox 110 und Safari 16.4. In älteren Browsern vorher prüfen, z. B. mit
'containerQuery' in CSSContainerRule.prototype.