考虑这些简单的 CSS 规则:
div#container {
width: 50%;
height: 260px;
background-image: url('Image.png');
background-repeat: repeat-x;
}
问题是我只想要完整的图像。如果没有足够的空间容纳另一个副本,则不应显示。
我从未听说过 CSS 为其提供了规则。那么如何在 JavaScript 中实现它(已经包含 jQuery)?
考虑这些简单的 CSS 规则:
div#container {
width: 50%;
height: 260px;
background-image: url('Image.png');
background-repeat: repeat-x;
}
问题是我只想要完整的图像。如果没有足够的空间容纳另一个副本,则不应显示。
我从未听说过 CSS 为其提供了规则。那么如何在 JavaScript 中实现它(已经包含 jQuery)?
$(window).on('load resize', function () {
var img = $('<img/>');
img.attr('src', 'http://upload.wikimedia.org/wikipedia/commons/0/0c/Fussball.jpg').load(function () {
var height = this.height;
var width = this.width;
var divWidth = $('#containerwrap').width();
var extra = divWidth % width;
$('div#container').width(divWidth - extra);
});
});
div#container {
width: 670px;
height: 260px;
margin:0 auto;
background: url('http://upload.wikimedia.org/wikipedia/commons/0/0c/Fussball.jpg') left center;
background-repeat: repeat-x;
}
#containerwrap{
width:100%;
height: 260px;
background-color:#000000;
}
<div id="containerwrap">
<div id="container">
Test
</div>
</div>
这在当前的 CSS 规则中是不可能的。您可以重复一次,或永远重复。另一种方法是缩小包含元素的大小以适应 CSS(如果您知道页面加载之前的宽度)或 JS(如果您不知道)中最近的重复点。
这是使用 jQuery 的后一种实现:
var $container = $("#container");
var bgImg = extractUrl($container.css("background-image"));
var $img = $("<img />", { "src" : bgImg }).hide().appendTo("body");
$container.width(nearest($("#container").width(), $img.width()));
$img.remove();
function extractUrl(input) {
// remove quotes and wrapping url()
return input.replace(/"/g, "").replace(/url\(|\)$/ig, "");
}
function nearest(n, v) {
n = n / v;
n = Math.floor(n) * v;
return n;
}
由于宽度由服务器固定,并且服务器知道图像的大小 - 为什么不构建正确的图像并忘记重复,或者将宽度设置为适当的大小以适合整个图像数量?
见http://jsfiddle.net/upjkd/10/
var img=document.createElement('img');
img.src="http://upload.wikimedia.org/wikipedia/commons/0/0c/Fussball.jpg";
document.body.appendChild(img);
var con=document.getElementById('container'),
numImages=Math.round(con.clientWidth/img.clientWidth);
con.style.backgroundSize=con.clientWidth/numImages+'px';
document.body.removeChild(img);
您可以使用Math.round(con.clientWidth/img.clientWidth)
来确定图像的重复次数,然后使用con.style.backgroundSize=con.clientWidth/numImages+'px'
来确定图像的数量是一个整数(仅限完整图像)。