当前位置: 首页 > 面试题库 >

有没有办法用url()插入CSS变量?

子车睿
2023-03-14
问题内容

我想将背景URL存储在自定义属性(CSS变量)中,并将其与background属性一起使用。但是,当使用字符串作为参数时,我找不到插值的方法url()

这是我的示例代码:

:root {
    --url: "https://download.unsplash.com/photo-1420708392410-3c593b80d416";
}

body {
    background: url(var(--url));
}

我知道可以使用插值函数在Sass或LESS中轻松完成此操作,但我很好奇是否有一种无需任何预处理器的方法。


问题答案:

您可以使用大多数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()表达式,并替换为整个表达式:

:root {
  --url: url("https://download.unsplash.com/photo-1420708392410-3c593b80d416");
}

body {
  background: var(--url);
}

或者,使用JavaScript代替var()执行插值。



 类似资料:
  • 我在Kubernetes集群中有一个服务和RabbitMQ。我想做的是,我希望服务的不同实例(或副本)在启动时声明一个全新的队列。这些队列将绑定到同一个exchange。 我可以在这里放一个最后的变量吗: 本质上,我只需要一种方法,用生成的名称创建一个队列,然后使用@RabbitListener侦听这个队列。

  • 我可以在写入之前读取表,并在写入新行之前删除匹配行。 阅读后,我可以筛选应用程序中的行。 我不喜欢这两个解决方案,因为它们似乎太复杂了,性能是一个很大的问题。有更好的办法吗?

  • 我只是想知道我是否有可能返回activePodcastViewData。每当我试图在GlobalScopeactivePodcastViewData.Without调用它时,我都不允许返回,我确实让一切正常工作fine.However我更新了我的存储库,将挂起方法添加到it.Hence我正在获取挂起函数应该只从协程或另一个挂起函数调用。 fun getPodcast(podcastSummaryV

  • 问题内容: 我正在制作一个依靠块概念的css网格系统。所以我有一个基本文件,例如: 它由mixin使用: 但我也希望javascript能够访问基本文件中的变量。我当时想我可以创建一个不可见的div,并为其赋予$ block-width,$ block- height和$ block-margin属性,然后从中获取值。但是max- columns不能直接映射到任何东西,因此我不得不想出一种hack

  • 我目前正在尝试返回我刚刚添加到集合中的文档,以便在我的主页上实时显示它。 我遵循了我在这里找到的解决方案:链接到2018年解决方案。但是这个解决方案似乎不适用于最新的node.js和MongoDb版本。 我基本上是在尝试做与那篇文章中的人尝试做的相同的事情,但我得到了以下错误: 这是我的代码供参考:

  • 问题内容: 我想将动态文本用作标签中某些元素的背景。因此,我可以使用图像(动态文本)。我该如何仅使用CSS或JavaScript? 问题答案: 您可以在相对定位的元素内有一个绝对定位的元素: 然后是CSS: