Start · Sprachen · JavaScript · Referenz · CSSFunctionDescriptors.result

CSSFunctionDescriptors.result

Eigenschaft

Gibt den Wert des <code>result</code>-Deskriptors aus einem Deklarationsblock einer CSS-<code>@function</code>-Regel als String zurück, oder einen leeren String, wenn keiner vorhanden ist.

seit JavaScript Experimentell: Chrome/Edge 139+, noch nicht in Fir Kategorie: webapi

Signatur

CSSFunctionDescriptors.result

Beschreibung

Mit der CSS-At-Regel @function (Spezifikation „CSS Functions and Mixins“) lassen sich eigene CSS-Funktionen wie --double() festlegen. Den Wert, den eine solche Funktion liefert, gibt der Deskriptor result an. Im CSSOM wird die Regel als CSSFunctionRule abgebildet. Ihre Deklarationsblöcke erscheinen als CSSFunctionDeclarations-Objekte, und deren Eigenschaft style ist ein CSSFunctionDescriptors-Objekt.

Die Eigenschaft result dieses Objekts enthält den serialisierten Wert des result-Deskriptors als String, zum Beispiel "calc(var(--x) * 2)". Steht in diesem Deklarationsblock kein result, ist der Wert ein leerer String.

Nützlich ist die Eigenschaft für Werkzeuge, die Stylesheets untersuchen: Debugger, Linter, Design-Token-Werkzeuge oder Polyfills, die eigene CSS-Funktionen auslesen und auswerten. Weil CSSFunctionDescriptors von CSSStyleDeclaration erbt, bekommen Sie denselben Wert auch mit getPropertyValue("result").

Rückgabewert

Typ
string
Beschreibung
Der serialisierte Wert des result-Deskriptors, oder "", wenn im Deklarationsblock keiner festgelegt ist.

Beispiele

result-Deskriptor einer @function-Regel auslesen

// Stylesheet mit einer eigenen CSS-Funktion einfügen
const style = document.createElement("style");
style.textContent = `
  @function --double(--x) {
    result: calc(var(--x) * 2);
  }
`;
document.head.append(style);

const fnRule = style.sheet.cssRules[0];      // CSSFunctionRule
const declarations = fnRule.cssRules[0];     // CSSFunctionDeclarations
console.log(fnRule.name);                    // Name der Funktion
console.log(declarations.style.result);      // CSSFunctionDescriptors.result
--double calc(var(--x) * 2)

Alle eigenen CSS-Funktionen eines Dokuments auflisten

const listCssFunctions = () => {
  const result = [];
  for (const sheet of document.styleSheets) {
    let rules;
    try {
      rules = sheet.cssRules; // kann bei fremden Stylesheets (CORS) fehlschlagen
    } catch {
      continue;
    }
    for (const rule of rules) {
      if (typeof CSSFunctionRule !== "undefined" && rule instanceof CSSFunctionRule) {
        const results = [...rule.cssRules]
          .filter((r) => r instanceof CSSFunctionDeclarations)
          .map((r) => r.style.result)
          .filter(Boolean);
        result.push({ name: rule.name, results });
      }
    }
  }
  return result;
};

console.table(listCssFunctions());
Tabelle mit Funktionsname und zugehörigen result-Werten, z. B. { name: "--double", results: ["calc(var(--x) * 2)"] }

Funktionen erkennen und über getPropertyValue auslesen

if (!("CSSFunctionRule" in window)) {
  console.warn("@function wird von diesem Browser nicht unterstützt.");
} else {
  const sheet = new CSSStyleSheet();
  sheet.replaceSync("@function --gap() { result: 1rem; }");
  const descriptors = sheet.cssRules[0].cssRules[0].style;
  console.log(descriptors.result);                    // direkter Zugriff
  console.log(descriptors.getPropertyValue("result")); // gleichwertig
}
1rem 1rem

// Wichtig · Fallstricke

  • Experimentell: @function und die zugehörigen CSSOM-Schnittstellen gibt es bisher nur in Chromium-basierten Browsern (ab Version 139). Prüfen Sie vor der Nutzung mit "CSSFunctionRule" in window, ob die Funktion verfügbar ist.
  • Der Wert ist serialisiert: Leerzeichen und Schreibweise können vom Quelltext abweichen. Verlassen Sie sich nicht auf exakte String-Vergleiche mit dem Original.
  • var()-Bezüge und Argumente werden nicht aufgelöst. Sie erhalten den Ausdruck, nicht den berechneten Wert. Den berechneten Wert bekommen Sie über getComputedStyle() auf einem Element, das die Funktion nutzt.
  • Eine Funktion kann mehrere Deklarationsblöcke haben, etwa innerhalb von @media oder @supports. Jeder Block ist ein eigenes CSSFunctionDeclarations-Objekt mit eigenem result. Welcher Wert gilt, hängt davon ab, welche Bedingungen gerade zutreffen.
  • Bei Stylesheets von fremden Ursprüngen ohne passende CORS-Freigabe löst der Zugriff auf cssRules einen SecurityError aus.