我计划为朋友建立一个自定义照片库,我确切地知道我将如何制作HTML,但是我遇到了一个CSS的小问题。
(我宁愿不如果可能,页面样式依赖于jQuery)
Data-Attribute
CSS中的Background-image
<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文件中的
data-image-src
获取div.thumb
,并将其用于我的CSS文件中的每个div.thumb
({1}}来源。< / p>
这是一个Codepen Pen,以获得我正在寻找的动态示例:
http://codepen.io/thestevekelzer/pen/rEDJv
答案 0 :(得分:57)
您最终可以使用
background-image: attr(data-image-src url);
但据我所知,这还没有在任何地方实施。在上文中,url
是attr()
的可选“类型或单位”参数。请参阅https://drafts.csswg.org/css-values/#attr-notation。
答案 1 :(得分:13)
将内容与风格混淆不是最佳做法,但解决方案可能是
<div class="thumb" style="background-image: url('images/img.jpg')"></div>
答案 2 :(得分: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 + "')";
}
将<script>
标记包裹在</body>
标记之前的底部,或者包装在页面加载后调用的函数中。
答案 3 :(得分:1)
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执行此操作。
答案 4 :(得分:1)
如果只想保留HTML和CSS,则可以使用CSS变量。 请记住,css variables aren't supported in IE。
<div class="thumb" style="--background: url('images/img.jpg')"></div>
.thumb {
background-image: var(--background);
}
答案 5 :(得分:0)
使用一些Sass怎么样?这是我为实现这样的目标所做的工作(尽管请注意,您必须为每个数据属性创建一个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迭代并选择HTML中的所有数据属性。然后,引入迭代器变量并使其与文件名匹配。
无论如何,正如我所说,您必须列出所有值,然后确保您的文件名包含列表中的值。
答案 6 :(得分:0)
HTML CODE
<div id="borderLoader" data-height="230px" data-color="lightgrey" data-
width="230px" data-image="https://fiverr- res.cloudinary.com/t_profile_thumb,q_auto,f_auto/attachments/profile/photo/a54f24b2ab6f377ea269863cbf556c12-619447411516923848661/913d6cc9-3d3c-4884-ac6e-4c2d58ee4d6a.jpg">
</div>
JS CODE
var dataValue, dataSet,key;
dataValue = document.getElementById('borderLoader');
//data set contains all the dataset that you are to style the shape;
dataSet ={
"height":dataValue.dataset.height,
"width":dataValue.dataset.width,
"color":dataValue.dataset.color,
"imageBg":dataValue.dataset.image
};
dataValue.style.height = dataSet.height;
dataValue.style.width = dataSet.width;
dataValue.style.background = "#f3f3f3 url("+dataSet.imageBg+") no-repeat
center";
答案 7 :(得分:0)
对于那些想要像我这样愚蠢的答案的人
有点像如何按1、2、3步
这就是我所做的
首先创建HTML标记
<div class="thumb" data-image-src="images/img.jpg"></div>
然后在结束的body标记之前,添加此脚本
我在下面的代码中包含了结尾正文作为示例
复制时请小心
<script>
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 + "')";
}
</script>
</body>
答案 8 :(得分:0)
这是使用jQuery的简单示例,我们可以将图像置于背景中
$('*[data-background-image]').each(function() {
$(this).css({
'background-image': 'url(' + $(this).data('background-image') + ')'
});
});
div{
height:200px;
width:100% ;
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div data-background-image="https://via.placeholder.com/500"> </div>