【问题标题】:CSS Sprites with different heights and widths具有不同高度和宽度的 CSS Sprites
【发布时间】:2012-12-12 03:53:01
【问题描述】:

下午,祝大家圣诞快乐。

为了尽可能减少 HTTP 请求,我想制作一个包含所有背景图案的精灵。我已经为网站制作了 2 个精灵,但都使用特定的高度和/或宽度尺寸

是否可以使用背景重复 X 和 Y 和/或使用宽度=100% 的精灵?

我有这些文件:

blog.png (65px*65px)
contacts.png (67px*100px)
intro.png (50px*50px)
portfolio.png (80px*80px) 

对于每个我都有这样的 CSS:

#intro{width:100%;background:url(../img/pat/intro.png) repeat}
#portfolio{width:100%;background:url(../img/pat/portfolio.png) repeat;padding-bottom:30px}
#contact{background:url(../img/pat/contacto.png) repeat;padding-bottom:50px}

【问题讨论】:

    标签: html css sprite


    【解决方案1】:

    根据它们的重复方式,有 4 种 CSS 背景图像,其中 3 种可以组合成 CSS 精灵,唉,3 种不同的精灵(仍然比 30 张图像更高效)。

    • no-repeat 1 个精灵中的背景,
    • repeat-x 第二个精灵中的背景,
    • repeat-y 第三个精灵中的背景,
    • 重复背景必须保持原样

    您有不同尺寸的背景,例如repeat-x 背景,宽度分别为 32、33、50 和 80 像素。我得到的建议是选择最大的一个并制作一个带有这种大小的条纹的精灵(这里是 80 像素)。然后,无论每个图像的确切宽度如何,您只需应用 0-80px-160px 等的 background-position。如果您将 32 像素的图像替换为 33 像素之一,您将不必替换以下图像中的所有 background-position 并在 Photoshop 中将所有图层仔细翻译 1 像素!
    如果除了一个 80 像素的宽度之外,所有宽度都为 33 像素,您可以通过安全性选择制作 40 像素的条纹,并将80px 放在最后,使其成为特殊情况。

    与精灵无关,您还可以阅读新的background-* 属性(如background-size: cover):

    【讨论】:

      【解决方案2】:

      精灵和重复并没有真正结合起来。 -moz-image-rectit seems to be Gecko-only 有一个技巧。

      当然,您可以将多个 Y 重复图像并排放置在一起,或者将多个 X 重复图像放在一起;但是如果你想在 X 和 Y 两个方向上重复,它必须是一个单一的图像。

      【讨论】:

      • :( 如果可能的话会很酷......而不是有 6 个背景图像,我将只有 1 个......在总共 37 个中减少 5 个 HTTP 请求很多!跨度>
      • 虽然它们可以很好地缓存,所以它只会出现在第一页视图上。剩下的 32 个还有更多 ;)
      • 想要提供一些帮助吗? :P 我的网站位于 afonsogomes.com ... Pingdom Tools 的性能等级为 100/100,Google Pagespeed 的性能等级为 98%,YSlow 的性能等级为 96%;)我会接受您可以提供的任何建议!
      • 嗯,评论线程可能不是正确的平台,而且它对我来说已经加载得很快了。有了所有这些照片和徽标,肯定会有一堆请求,我认为将它们拆分出来并没有多大帮助。我要改变的主要事情是将照片制作成JPG而不是调色板的PNG;例如你可以在这里看到条带:afonsogomes.com/img/conteudos/fotografia/Moliceiro-mini.pngJPG 通常更适合压缩照片。
      • 在 JPG 质量 70(满分 100)下,通常对于缩略图来说已经足够了,我将图像从 24kB 降低到 6.2kB。
      【解决方案3】:

      CSS2 sprite 很难应用,因为您只能将 sprite 用于具有指定宽度/高度的非重复模式。例如,我会使用一个 css sprite 来实现具有固定宽度/高度的图像翻转,然后如果图像高 10px 并且 css sprite 是通过垂直堆叠图像创建的,则只需调用background-position: 0 -10px;

      CSS3 允许您进行背景裁剪或其他创新方式,从而为您提供更好的控制。我会做一个谷歌搜索以了解更多信息。

      如果由我来决定,我不会花这么多时间在这么小的成本节约策略上。 HTTP 调用和带宽比以往任何时候都便宜且成本更低。您最好将时间花在压缩 html、减少后端瓶颈以及利用缓存或保存图像上。

      【讨论】:

      • 假设您的意思是 background-clip,而不是 background-crop,这对这里有什么帮助?
      【解决方案4】:

      我认为不可能这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 2013-09-20
        • 2015-08-30
        • 2017-03-31
        • 2012-05-16
        • 2013-03-20
        相关资源
        最近更新 更多