使用HTML data-attribute设置CSS background-image url

Ste*_*zer 61 background-image css3 custom-data-attribute

我计划为朋友建立一个自定义照片库,我确切知道我将如何制作HTML,但是我遇到了一个CSS的小问题.
(如果可能的话,我宁愿没有页面样式依赖于jQuery)


我的问题是:在CSS
Data-Attribute中使用HTML
Background-image
我使用这种格式的html缩略图:
<div class="thumb" data-image-src="images/img.jpg"></div>

我认为CSS应该是这样的:

.thumb {
    width:150px;
    height:150px;
    background-position:center center;
    overflow:hidden;
    border:1px solid black;

    background-image: attr(data-image-src);/*This is the question piece*/
}
Run Code Online (Sandbox Code Playgroud)


我的目标是把data-image-srcdiv.thumb我的HTML文件,并使用它的每一个div.thumb(或多个)background-image在我的CSS文件来源.

这是一个Codepen Pen,以获得我正在寻找的动态示例:http:
//codepen.io/thestevekelzer/pen/rEDJv

小智 60

你最终将能够使用

background-image: attr(data-image-src url);
Run Code Online (Sandbox Code Playgroud)

但据我所知,这还没有在任何地方实施.在上面,url是一个可选的"类型或单位"参数attr().请参阅https://drafts.c​​sswg.org/css-values/#attr-notation.

  • 在不知道具体实现状态的情况下进行随机猜测是在所有浏览器轨道中可用的1 - 2年之前. (4认同)
  • @torazaburo一年级结束了,仍然充满了希望. (4认同)
  • 当你说_eventually_时,有没有办法知道什么时候会从W3网站大致出现? (3认同)
  • 不在2016年的铬路线图上:( [#246571](https://bugs.chromium.org/p/chromium/issues/detail?id=246571) (3认同)
  • https://caniuse.com/#feat=css3-attr 迄今为止,还没有浏览器实现此功能。 (3认同)
  • @BartBurg 它仅表示“内容”属性。根据 https://caniuse.com/#feat=css3-attr ,任何 CSS 属性上的 attr() 尚不受支持。 (2认同)
  • 它根本不起作用。解决不了任何问题。 (2认同)

小智 34

如果您只想使用 HTML 和 CSS 保留它,您可以使用 CSS 变量。请记住,IE 不支持 css 变量

<div class="thumb" style="--background: url('images/img.jpg')"></div> 
Run Code Online (Sandbox Code Playgroud)
.thumb {
    background-image: var(--background);
}
Run Code Online (Sandbox Code Playgroud)

代码笔:https ://codepen.io/bruce13/pen/bJdoZW

  • 这或许是此刻最好的答案。没有 JavaScript 总是好的。 (3认同)
  • 此时为什么不只在 style 属性中设置“background-image”,为什么还要麻烦变量呢? (2认同)

小智 14

将内容与风格混合不是最佳做法,但解决方案可能是

<div class="thumb" style="background-image: url('images/img.jpg')"></div>
Run Code Online (Sandbox Code Playgroud)


Jon*_*han 6

你需要一点JavaScript:

var list = document.getElementsByClassName('thumb');

for (var i = 0; i < list.length; i++) {
  var src = list[i].getAttribute('data-image-src');
  list[i].style.backgroundImage="url('" + src + "')";
}
Run Code Online (Sandbox Code Playgroud)

<script>标签包裹在标签之前的底部</body>标签中,或者包装在页面加载后调用的函数中.