html - 为什么 CSS 背景位置会随着 Sprite 高度的变化而变化?

标签 html css sprite background-position

我的网站上发生了一些有趣的事情。它正在积极开发中,我一直在向网站的 sprite PNG 文件中添加和添加内容。有时我添加了太多的图标和 block ,以至于我需要更改图像的高度,但是当我这样做时,一些(不是全部!)元素出现在不同的位置。

例如,我有一个大小为 900x900 像素的 PNG 图像。我将 CSS 样式映射到适当的坐标,我在图像底部添加了 200 像素的透明空间,并且一些样式报告了不同的位置:<破坏了网站周围的东西。所以每次我增加 sprite 文件时,我都必须打开各种 CSS 文件并添加 X 像素(我添加的高度)。我什至在 sprite 的顶部添加了一个 1px 的基线,这样我就可以确定我没有改变任何位置,只是改变了高度。

我什至阅读了 RFC 中的规范,坐标系的起点是 x=0,y=0,这是图像的左上角。这对我来说没有意义:(

更新:一些给我错误的容器是用正坐标而不是负坐标制作的。我仍然无法向自己解释,为什么会发生这样的事情。

更新:因此 Sprite 位于此 URL http://lucho.hoolwars.com/img/sprites.png

如果 Sprite 的高度改变,这里有一些改变坐标的样式

.job-summary {
width: 330px;
height: 45px;
background: transparent url(/img/sprites.png) -15px 435px;
cursor: default;
}

.popup-title {
background: url('../img/sprites.png') -425px -1077px transparent;
width: 275px;
color: black;
font-weight: normal;
}

.popup-close {
position: absolute;
background: url('../img/sprites.png') -771px -972px transparent;
right: -9px;
top: -22px;
width: 38px;
height: 38px;
z-index: 2;
cursor: pointer;
}

每次我更改“sprites.png”的高度时,这些坐标都不再有效:|

最佳答案

我想我知道发生了什么。很难解释 - 但我会试一试。

我相信您已经根据重复背景配置了一些 Sprite 图像,因为您没有使用no-repeat。每次您向 sprite 添加更多图像时,在重复图像上配置的任何图标都会发生变化。

你需要:

1) 将 no-repeat 添加到您的背景中(任何使用重复图像的图标现在可能会变成空白)

2) 重新配置所有类以使用负值(始终为图像 Sprite 使用值)

我建议您设置与此类似的 Sprite :

CSS

.sprite-map {
  background: url(sprites.png) no-repeat;
}

.job-summary {
  background-position: -80px 0;
  width: 100px;
  height: 80px;
}

.popup-title {
  background-position: -15px -100px;
  width: 200px;
  height: 100px;
}

.popup-close {
  background-position: -15px -472px;
  width: 50px;
  height: 50px;
}

HTML

<div class="job-summary sprite-map"></div>
<div class="popup-title sprite-map"></div>
<div class="popup-close sprite-map"></div>

这样你只需要指定一次 sprite 的 URL。现在,当您将图像添加到 Sprite 的底部或右侧时 - 其他任何东西都不会受到影响。

此外,如果您熟悉 Sass - Compass 可以让图像 Sprite 变得异常简单。如果您有兴趣,可能值得一看:http://compass-style.org/help/tutorials/spriting/

希望对您有所帮助!

关于html - 为什么 CSS 背景位置会随着 Sprite 高度的变化而变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808830/

相关文章:

css - 在三个 float div 下格式化一个 div

html - 在 css 悬停效果上,无法选择/应用效果到特定元素?

javascript - jquery no.conflict 不工作

java - libgdx 在受伤时改变 Sprite 颜色

python - 检查 pygame 中的碰撞和停止速度

javascript - 更改背景位置 : "x"px "x"px using jQuery/Javascript for a class 中的 "y"

javascript - 触发JQuery中搜索结果的网页输入文本更改

JavaScript。使用鼠标悬停事件更改数组中 td 元素的背景颜色

html - Font Awesome Unicode - 如何将图标一直 float 到右侧

CSS:单个元素的内在比率(padding-hack)意外行为