我有这种模式的元素:
<div data-image="{imageurl}" ...></div>
我想将此元素background-image
设置为data-image
。我测试了这个CSS代码:
div[data-image] {
border: 2px solid black;
background-image: attr(data-image url);
}
边框显示正确但背景没有任何变化 如何仅使用css(而不是js或jq)修复此代码?
答案 0 :(得分:29)
截至撰写时,attr()
notation以外的content
以外的CSS属性的浏览器支持(例如background-image
- 是very limited。
此外,根据CSS level 2 spec,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 + "')";
}
div[data-image] {
width: 100px; height: 100px; /* If needed */
border: 2px solid black;
}
<div data-image="http://placehold.it/100"></div>
答案 1 :(得分:16)
在 HTML :
中<div data-image="path_to_image/image_file.extension" ... ></div>
在 CSS :
中div:after {
background-image : attr(data-image url);
/* other CSS styling */
}
这是您要求的答案。请在 w3.org 中查看此文档。但主要的问题是它不会起作用,还没有!。在许多浏览器中,
attr()
在CSS编码的content:
属性中使用时成功运行。但是在CSS的其他属性中使用它,它并不像预期的那样工作,即使在主流浏览器中也是如此。
<强>解决方案强>:
<强>参考强>:
<强>感谢强>:
答案 2 :(得分:8)
如果目标是能够在HTML文档中设置HTML元素的background-image
样式而不是CSS定义,为什么不使用HTML元素的内联style
属性?< / p>
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... */
}
<!-- ... 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>
编辑:
如果选择<div>
样式不是一个选项,您可以给它一个类并按类名选择它。
答案 3 :(得分:1)