CSS通过data-image attr设置背景图像

Hos*_*ian 40 html css url background-image attr

我有这种模式的元素:

<div data-image="{imageurl}" ...></div>
Run Code Online (Sandbox Code Playgroud)

我想将这些元素设置background-imagedata-image.我测试这个CSS代码:

div[data-image] {
    border: 2px solid black;
    background-image: attr(data-image url);
}
Run Code Online (Sandbox Code Playgroud)

边框显示正确但背景没有发生怎样才能用css(不是js或jq)修复此代码?

Has*_*ami 31

在截稿时,该浏览器支持的attr()符号上比其他的CSS属性content-像background-image-是非常有限的.

此外,根据CSS 2级规范,组合url()attr()无效:
content: url(attr(data-image));.

因此,目前没有跨浏览器的CSS解决方案来实现期望的结果.除非使用JavaScript是一个选项:

var list = document.querySelectorAll("div[data-image]");

for (var i = 0; i < list.length; i++) {
  var url = list[i].getAttribute('data-image');
  list[i].style.backgroundImage="url('" + url + "')";
}
Run Code Online (Sandbox Code Playgroud)
div[data-image] {
  width: 100px; height: 100px; /* If needed */
  border: 2px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<div data-image="http://placehold.it/100"></div>
Run Code Online (Sandbox Code Playgroud)


cuS*_*uSK 14

在您的HTML中:

<div data-image="path_to_image/image_file.extension" ... ></div>
Run Code Online (Sandbox Code Playgroud)

在你的CSS中:

div:after {
    background-image : attr(data-image url);
    /* other CSS styling */
}
Run Code Online (Sandbox Code Playgroud)

问题:

这是您的必填答案.请在w3.org中查看此文档.但主要问题是它不起作用,还没有!.在许多浏览器中,attr()当它content:在CSS编码的属性中使用时成功运行.但是在CSS的其他属性中使用它,它不能按预期工作,即使在主流浏览器中也是如此.

方案:

  • 使用JavaScriptjQuery等脚本.

参考文献:

谢谢:

  • 请注意,`url(attr(data-image))`肯定是*错误的.根据[CSS值和单位模块级别3](http://www.w3.org/TR/css3-values/#url),`url()`表示法只接受bare/quoted`<string>`作为URI .OP已经使用了`attr()`的有效语法,但它尚未在浏览器中实现. (3认同)
  • 我认为`=`需要在你的CSS中是`:`. (2认同)

Car*_*oco 10

如果目标是能够background-image从HTML文档而不是CSS定义中设置HTML元素的样式,为什么不使用styleHTML元素的内联属性?

div[style^='background-image'] {
  width:400px;
  height:225px;
  background-repeat:no-repeat;
  background-size:contain;
  background-position:center center;
  /* background-image is not set here... */
}
Run Code Online (Sandbox Code Playgroud)
<!-- ... but here -->
<div style="background-image:url(http://img01.deviantart.net/5e4b/i/2015/112/c/5/mandelbrot_62____courage_to_leave___by_olbaid_st-d646sjv.jpg)"></div>
Run Code Online (Sandbox Code Playgroud)

编辑:

如果选择<div>by style不是一个选项,您可以给它一个类并按类名选择它.

  • 这是一个没有浏览器不兼容问题的简单解决方案,因此应该被支持。 (2认同)

Eli*_*lka 5

自定义属性MDNcsswgcss-tricks)可以很好地替代data-属性(或attr()一般方法)。

因为它们的值不限于字符串,所以我们可以传递任何允许作为自定义属性值的类型!

此外,您还可以通过交换样式表在运行时更新这些属性。

.kitten {
  width: 525px;
  height: 252px;
  background-image: var(--bg-image);
}
Run Code Online (Sandbox Code Playgroud)
<div  class="kitten"
      style="--bg-image: url('http://placekitten.com/525/252');">
</div>
Run Code Online (Sandbox Code Playgroud)

  • IMO 这应该是公认的解决方案。它允许您设置 CSS 可用于指定背景图像的属性。这只是使用“style”而不是“data-*”。非常聪明的解决方案。 (3认同)
  • 其中输出是在 for 循环中生成的,并且 --bg-image 在每次迭代时都会重置为新值 (2认同)
  • @Ayyash [你的意思是这样...?](https://meta.stackexchange.com/a/379242/230261) (2认同)