我想将我的背景URL存储在自定义属性(CSS变量)中,并将它们与background属性一起使用。但是,当将字符串用作url()
中的参数时,我找不到一种方法来插值该字符串。
下面是我的示例代码:
:root {
--url: "https://download.unsplash.com/photo-1420708392410-3c593b80d416";
}
body {
background: url(var(--url));
}
我知道这可以在Sass或LESS中使用插值函数轻松完成,但我很好奇是否有一种方法可以在没有任何预处理器的情况下完成。
4条答案
按热度按时间ttp71kqs1#
您可以使用大多数CSS函数执行插值,包括
rgba()
(请参阅此处的示例)。事实上,插值是自定义属性的主要功能之一。但是对于
url()
不能这样做,因为url(var(--url))
不是被解析为url(
函数标记,后面是var(--url)
,后面是)
,而是一个无效的url()
标记,因为var(--url)
被视为URL本身,并且url()
标记中的未加引号的URL不能包含括号,除非它们被转义。这意味着实际上不会发生替换,因为解析器不会在属性值中看到任何var()
表达式-实际上,您的background
声明是完全无效的。如果你不明白,没关系。只需要知道,由于传统原因,您不能将
var()
插值与url()
一起使用。尽管问题中描述的问题与遗留
url()
令牌有关,但您也不能通过使用几个var()
表达式构建URL令牌来实现这一点,以防您考虑尝试--uo: url(; --uc: );
或--uo: url("; --uc: ");
和background: var(--uo) var(--url) var(--uc);
之类的东西。这是因为自定义属性不能包含不匹配的字符串分隔符或url()
标记(称为错误URL标记)的一部分。如果你想在自定义属性中指定一个URL,你需要写出整个
url()
表达式,并替换整个表达式:或者,使用JavaScript而不是
var()
来执行插值。xmjla07d2#
你不能用url插入css变量,但你可以这样做,将url函数作为变量的一部分实现:
在HTML中可以是:
这适用于大多数现代浏览器。
ddarikpa3#
我在Cordova的一个项目中遇到了同样的问题,所以我使用了:
显然,如果在**--var声明中使用带双引号的url(““)**,则该值将不起作用。
m3eecexj4#
下面是在vue3中工作的解决方案
以下是Vuejs的官方文档。
下面(playground链接)是Vuejs和CSS自定义属性的解决方案: