Start · Sprachen · JavaScript · Referenz · CSSFunctionRule.name

CSSFunctionRule.name

Eigenschaft

Gibt den Namen der mit <code>@function</code> definierten benutzerdefinierten CSS-Funktion als String zurück, inklusive der führenden <code>--</code>.

seit JavaScript Chrome/Edge 139+ (experimentell, noch nicht Baseli Kategorie: webapi

Signatur

readonly CSSFunctionRule.name

Beschreibung

Die schreibgeschützte Eigenschaft name der Schnittstelle CSSFunctionRule liefert den Bezeichner einer benutzerdefinierten CSS-Funktion, die über die At-Regel @function definiert wurde. Für die Regel @function --abstand(--faktor <number>) { … } gibt name also den String "--abstand" zurück.

Nützlich ist die Eigenschaft vor allem dann, wenn Sie Stylesheets per CSSOM auswerten: etwa um alle in einem Design-System definierten Funktionen aufzulisten, um Doppeldefinitionen zu finden oder um gezielt eine bestimmte Funktionsregel zu suchen und deren Parameter (getParameters()) oder Rückgabetyp (returnType) auszulesen.

Der Name ist ein dashed ident, beginnt also immer mit zwei Bindestrichen, genau wie benutzerdefinierte Eigenschaften (Custom Properties). Die Groß- und Kleinschreibung bleibt erhalten, und der Name wird beim Vergleich exakt so behandelt, wie er im CSS steht. Um den Namen zu ändern, müssen Sie die Regel entfernen und neu einfügen, denn name lässt sich nicht beschreiben.

Rückgabewert

Typ
string
Beschreibung
Der Name der benutzerdefinierten Funktion, inklusive des Präfixes -- (z. B. "--verdoppeln").

Beispiele

Namen aller @function-Regeln eines Stylesheets auslesen

const sheet = new CSSStyleSheet();
sheet.replaceSync(`
  @function --verdoppeln(--wert) {
    result: calc(var(--wert) * 2);
  }
  @function --abstand(--faktor <number>) returns <length> {
    result: calc(var(--faktor) * 0.5rem);
  }
  .box { padding: --abstand(3); }
`);

const namen = [...sheet.cssRules]
  .filter((rule) => rule instanceof CSSFunctionRule)
  .map((rule) => rule.name);

console.log(namen);
["--verdoppeln", "--abstand"]

Bestimmte Funktionsregel im Dokument finden

const findeFunktion = (funktionsName) => {
  for (const sheet of document.styleSheets) {
    let regeln;
    try {
      regeln = sheet.cssRules; // kann bei fremden Origins SecurityError werfen
    } catch {
      continue;
    }
    for (const rule of regeln) {
      if (rule instanceof CSSFunctionRule && rule.name === funktionsName) {
        return rule;
      }
    }
  }
  return null;
};

const regel = findeFunktion('--abstand');
console.log(regel ? `${regel.name} gibt ${regel.returnType} zurück` : 'nicht gefunden');
--abstand gibt <length> zurück

Feature-Erkennung und doppelte Definitionen melden

if (!('CSSFunctionRule' in window)) {
  console.warn('@function wird von diesem Browser nicht unterstützt.');
} else {
  const gezaehlt = new Map();
  for (const sheet of document.styleSheets) {
    try {
      for (const rule of sheet.cssRules) {
        if (rule instanceof CSSFunctionRule) {
          gezaehlt.set(rule.name, (gezaehlt.get(rule.name) ?? 0) + 1);
        }
      }
    } catch { /* Cross-Origin-Stylesheet überspringen */ }
  }
  for (const [name, anzahl] of gezaehlt) {
    if (anzahl > 1) console.warn(`${name} ist ${anzahl}-mal definiert – die letzte Definition gewinnt.`);
  }
}

// Wichtig · Fallstricke

  • Kompatibilität: @function und CSSFunctionRule gehören zur noch jungen Spezifikation CSS Functions and Mixins. Unterstützt werden sie derzeit nur in Chromium-Browsern (ab Version 139). Firefox und Safari kennen die Regel noch nicht: Dort wird @function beim Parsen verworfen und taucht in cssRules gar nicht auf. Prüfen Sie die Unterstützung vorab mit 'CSSFunctionRule' in window oder CSS.supports().
  • Der zurückgegebene Name enthält immer das Präfix --. Ein Vergleich mit 'abstand' statt '--abstand' schlägt fehl.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus.
  • Namen werden unter Beachtung der Groß- und Kleinschreibung verglichen: --Abstand und --abstand sind zwei verschiedene Funktionen.
  • Wenn Sie auf cssRules eines Stylesheets von einer fremden Herkunft (Origin) ohne CORS zugreifen, wird ein SecurityError ausgelöst. Kapseln Sie den Zugriff deshalb in try/catch.