html - 多个背景图像位置

标签 html css

看看the fiddle .

background-image: url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg);
background-repeat: no-repeat;
background-position: 75% 0, 50% 0, 25% 0, 0 0;
width: 400px;

元素宽度为 400px,背景图片宽度为 100px。 每个背景图像位置间隔为 25%,因此我希望每个背景图像每 100 像素渲染一次,但事实并非如此。

有人对此有所了解吗?我想我缺少一些基本的东西。

最佳答案

解决方案

您必须为 background-position 使用以下设置

background-position: 100% 0, 33.33% 0, 66.67% 0, 0 0;

.background-image {
  background-image: url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg);
  background-repeat: no-repeat;
  background-position: 100% 0, 66.67% 0, 33.33% 0, 0 0;
  width: 400px;
  height: 20px
}
.background-color {
  background: linear-gradient(to right, black 0%, black 25%, blue 25%, blue 50%, green 50%, green 75%, orange 75%);
  width: 400px;
  height: 20px;
}
100px x 20px = http://www.gtsalive.com/images/partners/pizzahut.jpg
<br>
<br>
<div class="background-image"></div>
<div class="background-color"></div>


计算逻辑

本质上,当我们有多个图像并且所有图像的大小都相同时,逻辑会变成如下所示:

  • 对于图像的水平放置:

    • 位置 X 的百分比 = 100% *(图片数量 - 1)/(图片总数 - 1)
  • 对于图像的垂直放置:

    • Y 位置百分比 = 100% *(图片数量 - 1)/(图片总数 - 1)

推理

这是因为当为 background-position 提供百分比值时,用户代理会尝试匹配背景图像中与百分比值相对应的点以及相应的点(由相同的指定百分比值)在具有背景图像的元素中。

Quoting W3C Spec:

A percentage X aligns the point X% across (for horizontal) or down (for vertical) the image with the point X% across (for horizontal) or down (for vertical) the element's padding box. For example, with a value pair of '0% 0%',the upper left corner of the image is aligned with the upper left corner of the padding box. A value pair of '100% 100%' places the lower right corner of the image in the lower right corner of the padding box. With a value pair of '14% 84%', the point 14% across and 84% down the image is to be placed at the point 14% across and 84% down the padding box.


注意事项

以上行为仅适用于基于百分比的定位。基于像素的定位按正常预期工作。也就是说,下面的设置可以很好地工作:

background-position: 300px 0, 200px 0, 100px 0, 0px 0;

.background-image {
  background-image: url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg), url(http://www.gtsalive.com/images/partners/pizzahut.jpg);
  background-repeat: no-repeat;
  background-position: 300px 0, 200px 0, 100px 0, 0px 0;
  width: 400px;
  height: 20px
}
.background-color {
  background: linear-gradient(to right, black 0%, black 25%, blue 25%, blue 50%, green 50%, green 75%, orange 75%);
  width: 400px;
  height: 20px;
}
100px x 20px = http://www.gtsalive.com/images/partners/pizzahut.jpg
<br>
<br>
<div class="background-image"></div>
<div class="background-color"></div>

关于html - 多个背景图像位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31456487/

相关文章:

javascript - 为什么 jQuery 悬停效果不起作用?

javascript - Bootstrap .dropdown() "Uncaught TypeError: undefined is not a function"

html - css3 页面媒体在任何浏览器中都不起作用

html - 如何先加载一个div,然后再加载其他的?

javascript - 我如何在 javascript 中使用 'cssText'?

javascript - Svg 单击事件无法正常工作

javascript - 如何根据嵌套元素的 anchor 居中div

javascript - jquery 窗口滚动事件不能正常工作与 overflow-x 隐藏

javascript - 我的 response.jsp 无法正确填充字段

css - 当出现 overflow-x 时,用于显示 ... 的 css 属性是什么?