有没有办法设置背景图像与 css 重复的次数?
6 回答
一个丑陋的 hack 可能会多次(静态地)插入相同的图像(使用多个背景):
例如,水平重复图像 (80x80) 三次:
background-image: url('bg_texture.png'),
url('bg_texture.png'),
url('bg_texture.png');
background-repeat: no-repeat,
no-repeat,
no-repeat;
background-position: 0 top,
80px top,
160px top;
注意:不能在 9 版本(源)下的 IE 上工作。
不。
您可以为框设置绝对宽度,但没有 css 选项可以重复图像 n 次。
正如@gcbenison 所说,虽然没有严格重复图像 x 次,但您可以使用该background-repeat: space
属性,或者类似地,background-position: round
将这些属性中的任何一个与background-size
以确保显示背景图像的一组重复次数,然后也许调整包装器的大小以适应。
只要可以显示整个图像,两者都会无限重复背景图像,尽管对于任何剩余部分space
都会在图像之间添加间隙,同时会缩放图像。简而言之,如果背景图像垂直适合 3.342 倍,则两者都将显示图像 3 次,并在每个重复图像之间添加间隙,并放大(或缩小,如果需要)图像以填充间隙。repeat
space
round
space
round
space
round
如果你想重复一张图片 5 次,每张图片宽 20px,间隔 5px,你可以简单地这样做:
.star-rating {
width: 120px;
background-image: url('example.jpg');
background-repeat: space;
background-size: 20px auto;
}
https://developer.mozilla.org/en-US/docs/Web/CSS/background-repeat
另一个选项(如果您无法设置宽度)是使用来自@franzlorenzon 的解决方案,并使用多背景 CSS 属性简单地声明背景 x 次数。
此外,您可以通过创建@for
这样的循环来节省使用 SASS 键入多行的操作:
$image_count: 5;
$image_url: 'url(star.svg)';
$image_position: '0';
@for $i from 1 through ($image_count - 1) {
$image_url: #{ $image_url+', '+$image_url };
$image_position: #{ $image_position+', '+($i * (100% / $image_count)) };
}
.star-rating {
background-image: $image_url;
background-position: $image_position;
background-size: 20px;
background-repeat: no-repeat;
}
然后这将生成背景图像,所有这些图像都均匀分布。此外,您可以随意更改($i * (100% / $image_count))
为($i * VALUE)
固定间距。
你可以结合一点 jQuery 和 CSS 来实现你想要的。
假设您想将图像 foo.png 水平显示 3 次,垂直显示 2 次。
CSS:
body {
background: url('foo.png');
}
jQuery:
$(document).ready(function() {
$('body').css('background-size', $(window).width()/3 + 'px ' + $(window).height()/2 + 'px');
});
此外,您可以在 $(window).resize() 中粘贴相同的代码以获得动态响应。
我不确定最初是什么激发了这个问题,但我发现它正在寻找一种方法来确保只出现背景图像的整数副本(即不要裁剪重复的背景图像集的最终成员。)这可以通过background-repeat: space
属性来实现。
是的!可以设置背景图片大小: background-size: 20%, 20%; 这将使它重复5次。