【发布时间】:2013-06-06 16:40:18
【问题描述】:
我有一个包含 62 个 91 * 91 像素的图像的精灵,这使得整个图像为 91 * 5642 像素。它们以一种动态网格的形式显示,该网格根据用户/指针的移动而增长和缩小。有时,一个元素(标准 91 * 91 像素)会放大到 120 * 120 像素。显然,我希望背景随着整个 91 * 91 px 图像的增长而显示在整个 120 * 120 元素中。
输入background-size: 100% auto 使宽度始终完美。现在的问题是background-position 期望它的值也会更新!所有 62 个元素都有内联 style=background-position etc。我无法从内联更新背景位置。我希望背景到第一个位置然后调整大小(缩放),而不是调整大小然后定位(缩放到错误的位置)。
我不确定我是否有任何意义。稍微澄清一下:
- 所有元素的样式均为
width: 91px; height: 91px; background-size: 100% auto;。 - 第二张图片的内联样式为
background-position: 0 -91px。 - 当您悬停该元素时,它会获得样式
width: 120px; height: 120px;,然后它会显示第二张图像的大部分和第一张图像的一部分,因为调整大小后会发生定位 =( - 如果我将背景位置(缩放/悬停后)更改为
0 -120px,它会正确对齐。 (但显然不缩放/悬停时它是错误的。)
一个非常简单的解决方案是使用实际的zoom: 1.3 或transform: scale(1.3),但是过渡非常慢。
我一定错过了什么。 CSS 必须比这更聪明。具有背景大小的精灵......这不是不可能的吧!?
精灵的外观取决于我,所以我可以让它有一个 120 * 120 的网格而不是 91 * 91,如果这样更简单的话......
编辑: 以小提琴为例:http://jsfiddle.net/rudiedirkx/g4RQx/
聪明的答案 1: background-position: 0 calc(100% / 61 * 2)(61 因为 62 张图片,2 因为第 3 张图片)
【问题讨论】:
-
SASS 或 LESS CSS 预处理可能有助于简化此操作
-
在很多情况下使用精灵表有很多好处,但在这种情况下使用单个图像会省去很多麻烦。您需要使用精灵表有什么特别的原因吗?
-
@DevinCrossman 我不这么认为。只有制作精灵更容易。预处理器在 CSS 上没有改进。如果在 CSS 中无法实现,那么预处理器就无法实现。
-
@3rror404 62 张图片...这需要一个精灵 IMO。
-
查看这个问题的答案stackoverflow.com/questions/2430206/… 可能是一个可能的解决方案?
标签: sprite background-position css