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

我打算为一个朋友build立一个自定义的照片库,我确切地知道我将如何生产HTML,但是我遇到了一个CSS的小问题。
(如果可能的话,我宁愿不要使页面样式依赖于jQuery)


我的问题问候:
HTML中的Data-Attribute
在CSS中的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*/ } 

我的目标是从我的HTML文件中的div.thumb中获取data-image-src ,并将其用于CSS文件中的每个div.thumb (s) background-image源文件。

这是一个Codepen笔为了得到我正在寻找的一个dynamic的例子:
http://codepen.io/thestevekelzer/pen/rEDJv

你将最终能够使用

 background-image: attr(data-image-src url); 

但是这还不是我所知的任何地方。 在上面, urlattr()一个可选的“type-or-unit”参数。 请参阅https://drafts.c​​sswg.org/css-values/#attr-notation

把内容和风格混合起来不是最好的做法,但是解决办法可能是

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

您将需要一个小的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 + "')"; } 

</body>标记之前的底部将<script>标记包裹起来,或者在加载页面后调用一个函数。

HTML

 <div class="thumb" data-image-src="img/image.png"> 

jQuery的

 $( ".thumb" ).each(function() { var attr = $(this).attr('data-image-src'); if (typeof attr !== typeof undefined && attr !== false) { $(this).css('background', 'url('+attr+')'); } }); 

在JSFiddle上演示

你也可以用JavaScript来做到这一点。

如何使用一些Sass? 下面是我做了这样的事情(尽pipe注意你必须为每个数据属性创build一个Sass列表)。

 /* Iterate over list and use "data-social" to put in the appropriate background-image. */ $social: "fb", "twitter", "youtube"; @each $i in $social { [data-social="#{$i}"] { background: url('#{$image-path}/icons/#{$i}.svg') no-repeat 0 0; background-size: cover; // Only seems to work if placed below background property } } 

本质上,你列出了所有的数据属性值。 然后使用Sass @each遍历并selectHTML中的所有数据属性。 然后,引入迭代器variables并使其匹配到文件名。

无论如何,正如我所说的,你必须列出所有的值,然后确保你的文件名包含在你的列表中的值。