Gültigkeitsbereich von CSS-Variablen prüfen
Eine benutzerdefinierte CSS-Eigenschaft steht auf dem Element zur Verfügung, auf dem sie deklariert wurde, und bei ununterbrochener Vererbung auch auf dessen Nachfahren.
Im Browser ausführen – kostenlos
Dieses Werkzeug vergleicht den Selektor, der eine Variable definiert, mit dem Selektor, der sie verwendet. Es validiert beide Zeichenfolgen, verarbeitet Selektorlisten und zeigt an, ob jeder Nutzungszweig strukturell von mindestens einem Definitionszweig abgedeckt wird. So erkennen Sie eine häufige Ursache fehlender Design-Tokens, bevor Sie berechnete Stile im Browser untersuchen.
Geben Sie Definitions- und Verwendungsstellen an
Tragen Sie in das Definitionsfeld den Selektor der Regel ein, welche die benutzerdefinierte Eigenschaft deklariert. In das Nutzungsfeld kommt der Selektor der Regel, die <code>var()</code> aufruft. Ein unter <code>.theme-dark .card</code> definiertes Token steht beispielsweise für <code>.theme-dark .card > .title</code> zur Verfügung, weil der Titel unterhalb der Karte ausgewählt wird, die die Deklaration erhält. Eine Definition unter <code>:root</code> gilt als global, da das Wurzelelement ein Vorfahre des Dokumentinhalts ist. Beide Felder dürfen kommagetrennte Selektorlisten enthalten. Das Werkzeug bewertet jeden Nutzungszweig einzeln; das Gesamtergebnis ist nur dann wahr, wenn alle Zweige abgedeckt sind. Zu jedem abgedeckten Nutzungszweig wird außerdem der passende Definitionszweig genannt, sodass sich auch lange Listen gut prüfen lassen. Untersucht wird ausschließlich die Beziehung zwischen Selektoren. Sie müssen weder ein Stylesheet noch einen Deklarationsblock, den Eigenschaftsnamen oder dessen Wert einfügen. Mit den beiden relevanten Selektoren bleibt das Ergebnis auf den Kaskadenbereich konzentriert und wird nicht durch Quellreihenfolge oder Wertsyntax vermischt.
Verstehen Sie die strukturelle Bereichsentscheidung
Das Werkzeug bildet den Teil der Verfügbarkeit einer benutzerdefinierten Eigenschaft ab, der allein aus Selektoren bestimmt werden kann. Es prüft, ob der Definitionsselektor dasselbe Element wie der Nutzungsselektor oder einen seiner Vorfahren bezeichnen kann. Zusammengesetzte Anforderungen werden berücksichtigt: Eine Definition unter <code>.card.featured</code> deckt nicht automatisch eine Nutzung ab, die lediglich <code>.card</code> nennt. Kindkombinatoren müssen Kindkombinatoren bleiben, während eine Nachfahrenbeziehung zusätzliche Verbindungen im Nutzungsselektor überspannen darf. Selektorlisten wirken auf der Definitionsseite als Alternativen und auf der Nutzungsseite als Verpflichtungen. Dieser bewusst vorsichtige Ansatz behauptet keine Verfügbarkeit, wenn die Beziehung im Selektortext nicht erkennbar ist. Laufzeitbedingungen können die tatsächliche Kaskade weiterhin verändern. Quellreihenfolge, bedingte Regeln, Shadow-DOM-Grenzen, Inline-Stile, Ebenen, Spezifität, ausdrückliche Rücksetzungen und der wirkliche Dokumentbaum gehören nicht zur Eingabe. Verstehen Sie ein wahres Ergebnis als Bestätigung struktureller Einordnung. Wenn Sie den endgültigen Wert in einem bestimmten gerenderten Dokument belegen müssen, prüfen Sie zusätzlich die berechneten Stile im Browser.
Beheben Sie mehrdeutige Eingaben anhand von Validierungsfehlern
Jeder Selektor wird vor dem Vergleich analysiert. Leere Zweige in Selektorlisten, nicht geschlossene Klammern, unvollständige Kombinatoren, Deklarationszeichen, unvollständige Klassen-, ID- oder Pseudoselektor-Tokens und andere fehlerhafte Formen erzeugen einen Eingabefehler statt eines geratenen Ergebnisses. Diese Unterscheidung ist für Automatisierungen wichtig: Falsch bedeutet, dass die angegebenen Selektoren gültig sind, die gewünschte Nutzung aber strukturell nicht abgedeckt wird. Ein Fehler bedeutet, dass keine Bereichsaussage getroffen wurde. Geben Sie in die Felder ausschließlich Selektoren ein. Geschweifte Klammern, Semikolons, die Deklaration einer benutzerdefinierten Eigenschaft oder eine vollständige CSS-Regel gehören nicht hinein. Maskierte Zeichen, in Anführungszeichen gesetzte Attributwerte, Attributselektoren und funktionale Pseudoklassen bleiben während der Zerlegung gruppiert. Dadurch werden enthaltene Kommas und Kombinatoren nicht als Syntax der obersten Ebene behandelt. Der Algorithmus ist deterministisch, stellt keine Netzwerkanfrage und verwendet eine feste Längenbegrenzung. Sie können ihn daher in einer Lint-Prüfung, einer Änderungsprüfung oder einem Migrationsskript für Tokens einsetzen und für dasselbe Paar stets dasselbe Ergebnis erhalten. Falls komplexe relationale Selektoren nur mit einem aktiven DOM entscheidbar sind, deuten Sie ein nicht abgedecktes Ergebnis vorsichtig und prüfen Sie das Ziel-Markup.
Anwendungsfälle
Theme-Tokens prüfen
Bestätigen Sie, dass Komponentenselektoren mit Theme-Variablen unter dem Selektor bleiben, der das Theme aktiviert.
Komponentenumbauten kontrollieren
Erkennen Sie, wenn ein umbenannter oder verschobener Komponentenselektor das strukturelle Präfix seiner benutzerdefinierten Eigenschaften verliert.
Token-Dokumentation validieren
Prüfen Sie Selektorbeispiele in einem Designsystem, damit dokumentierte Nutzungen dem angegebenen Definitionsbereich entsprechen.
Häufige Fragen
Was bedeutet ein wahres Ergebnis?
Jeder gültige Zweig des Nutzungsselektors ist strukturell gleich oder unter mindestens einem Zweig des Definitionsselektors eingeordnet.
Werden mein HTML oder berechnete Stile untersucht?
Nein. Verglichen werden nur Selektoren; Dokumentzustand, Quellreihenfolge, Ebenen, Shadow DOM und ausdrückliche Überschreibungen bleiben unberücksichtigt.
Wie werden Selektorlisten behandelt?
Definitionszweige sind Alternativen. Jeder kommagetrennte Nutzungszweig muss mindestens einem Definitionszweig entsprechen, damit das Gesamtergebnis wahr ist.
Warum erhalte ich einen Eingabefehler statt falsch?
Mindestens ein Selektor war syntaktisch fehlerhaft. Falsch ist gültigen Selektoren vorbehalten, die die erforderliche Bereichsbeziehung nicht zeigen.
Deckt eine Definition unter :root alle Nutzungen ab?
Ja. Das Werkzeug behandelt :root, html und den Universalselektor als globale Definitionsbereiche.
Was kostet eine API-Anfrage?
Jede API-Anfrage kostet $0.002. Die Browserversion wird lokal und ohne API-Anfrage ausgeführt.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/web/css-custom-property-scope-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"definition_selector":".theme-dark .card","usage_selector":".theme-dark .card > .title"}'const res = await fetch("https://api.kit.forhosting.com/web/css-custom-property-scope-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"definition_selector": ".theme-dark .card",
"usage_selector": ".theme-dark .card > .title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/css-custom-property-scope-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"definition_selector": ".theme-dark .card",
"usage_selector": ".theme-dark .card > .title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/css-custom-property-scope-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"definition_selector":".theme-dark .card","usage_selector":".theme-dark .card > .title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"definition_selector":".theme-dark .card","usage_selector":".theme-dark .card > .title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/css-custom-property-scope-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"definition_selector": ".theme-dark .card",
"usage_selector": ".theme-dark .card > .title"
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.css_custom_property_scope_check",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
timeout_sec | 30 |
max_crawl_pages | 25 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |