具有响应大小的图标的精灵,如`background-size: contain;`

sprites for icons with responsive size like `background-size: contain;`

我有一个有很多图标的应用程序。我知道为这些图标使用 sprite 是正确的方法,而不是使用多个小图像。但是,我需要这些图标与容器大小相同 (background-size: contain;),所以我不得不为每个图标使用多个图像:

.icon1 {
  background-image: url('../my-site/icon1.gif');
  background-size: contain;
}

.icon2 {
  background-image: url('../my-site/icon2.gif');
  background-size: contain;
}
. . . and so on...

然而,使用精灵会导致:

  1. (without background-size: contain;) - 当按钮很大时图像很小

  2. (using background-size: contain;) - 整个精灵显示给容器!

有没有一种方法可以使用响应式 sprite 来显示图标(使用 background-position)并使该图标成为容器的 100% 宽度和高度?

遗憾的是,没有神奇的解决方案可以实现这一目标。您将不得不手动调整背景本身的大小。

#home {
    width: 46px;
    height: 44px;
    background: url(https://i.imgur.com/1ijjJJU.gif) 0 0;
}

#next {
    width: 43px;
    height: 44px;
    background: url(https://i.imgur.com/1ijjJJU.gif) -91px 0;
}

#home-double {
    width: 92px;
    height: 88px;
    background: url(https://i.imgur.com/1ijjJJU.gif) 0 0;
    background-size: 268px;
}

#next-double {
    width: 86px;
    height: 88px;
    background: url(https://i.imgur.com/1ijjJJU.gif) -182px 0;
    background-size: 268px;
}
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>

<p>Normal size</p>
<p><img id="home" src="img_trans.gif"></p>
<p><img id="next" src="img_trans.gif"></p>

<p>Double size</p>
<p><img id="home-double" src="img_trans.gif"></p>
<p><img id="next-double" src="img_trans.gif"></p>

</body>
</html>

请注意,在更改背景大小的同时,您还必须更改背景位置。

当然是疯了,没有意义。

我最近停止使用精灵,转而使用 SVG 精灵。它们令人难以置信且更加灵活,可以让您做更多的事情。你可以改变它们的颜色和大小,在视网膜屏幕上玩得很好。

如果您仍然喜欢 PNG 图标,我会说放弃 sprite。即使有适当的构建过程,维护它们也很困难。选择 https 和 http2,那么多个并发请求的问题绝对为零。