Sie können die Interpolation mit den meisten CSS-Funktionen durchführen, einschließlich rgba()
(siehe ein Beispiel hier ). Tatsächlich ist die Interpolation eines der Hauptmerkmale benutzerdefinierter Eigenschaften.
Sie können dies jedoch nicht tun url()
, da url(var(--url))
es nicht als url(
Funktionstoken var(--url)
gefolgt von einem )
, sondern als einzelnes url()
Token analysiert wird, das ungültig ist, da das var(--url)
als URL selbst behandelt wird und nicht zitierte URLs in url()
Token keine Klammern enthalten dürfen, es sei denn, sie werden maskiert . Dies bedeutet, dass die Ersetzung niemals tatsächlich erfolgt, da der Parser niemals var()
Ausdrücke im Eigenschaftswert sieht - tatsächlich ist Ihre background
Deklaration vollständig ungültig.
Wenn Sie nichts davon verstanden haben, ist das in Ordnung. Sie müssen nur wissen, dass Sie die var()
Interpolation url()
aus alten Gründen nicht verwenden können .
Obwohl das in der Frage dargestellte Problem mit dem Legacy- url()
Token zusammenhängt, können Sie dies nicht tun, indem Sie URL-Token aus mehreren var()
Ausdrücken erstellen, falls Sie daran denken, etwas wie --uo: url(; --uc: );
oder --uo: url("; --uc: ");
und zu versuchen background: var(--uo) var(--url) var(--uc);
. Dies liegt daran, dass benutzerdefinierte Eigenschaften keine nicht übereinstimmenden Zeichenfolgenbegrenzer oder Teile von url()
Token enthalten können (sogenannte fehlerhafte URL-Token) .
Wenn Sie eine URL in einer benutzerdefinierten Eigenschaft angeben möchten, müssen Sie den gesamten url()
Ausdruck ausschreiben und diesen gesamten Ausdruck ersetzen:
:root {
--url: url("https://download.unsplash.com/photo-1420708392410-3c593b80d416");
}
body {
background: var(--url);
}
Oder verwenden Sie stattdessen JavaScript var()
, um die Interpolation durchzuführen.
--url: url(yoururl);
background: var(--url);