您可以使用大多数 CSS 函数执行插值,包括(参见此处rgba()
的示例)。实际上,插值是自定义属性的主要功能之一。
但是您不能使用 来执行此操作url()
,因为url(var(--url))
它不是解析为url(
函数标记,var(--url)
后跟 a )
,而是一个url()
无效的标记,因为var(--url)
被视为 URL 本身,并且url()
标记中未引用的 URL 不能包含括号,除非它们被转义. 这意味着替换实际上永远不会发生,因为解析器永远不会var()
在属性值中看到任何表达式——事实上,您的background
声明是完全无效的。
如果你什么都不懂,那也没关系。只知道由于遗留原因,您不能使用var()
插值。url()
即使问题中描述的问题与遗留url()
令牌有关,您也不能通过从多个var()
表达式构建 URL 令牌来做到这一点,以防您正在考虑尝试类似--uo: url(; --uc: );
or --uo: url("; --uc: ");
, and background: var(--uo) var(--url) var(--uc);
。这是因为自定义属性不能包含不匹配的字符串分隔符或部分url()
标记(称为错误 URL 标记)。
如果要在自定义属性中指定 URL,则需要写出整个url()
表达式,并替换整个表达式:
:root {
--url: url("https://download.unsplash.com/photo-1420708392410-3c593b80d416");
}
body {
background: var(--url);
}
或者,使用 JavaScript 而不是var()
执行插值。