Skip to content

CSS Sprites(雪碧图)原理及其优缺点 #50

Open

Description

@artdong

CSS Sprites(雪碧图)原理及其优缺点

Activity

  1. artdong commented on Nov 22, 2019

    @artdong
    CollaboratorAuthor

    什么是CSS Sprites

    CSS Sprites又称css精灵或者谐音css雪碧,是一种网页图片应用处理方式,复杂的事情简单化,提高开发效率。

    原理

    CSS Sprites将一个页面内所需要显示的图片全部整合到一张大图中,并使用css属性background进行调用。这样的话,当页面渲染时,可以减少请求次数,在一定程度上能够加快网页加载速度。

    这并不是什么新鲜玩意了,但由于将小图整合到一张大图,又要准确的写出所需小图的background-position值,对于很多新手来说比较浪费时间,很多人只能放弃这个比较繁琐的步骤。

    background-position 属性改变图像在背景中的位置

    优点

    1、利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因。
    2、CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。
    3、解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率。
    4、更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。

    缺点

    1、在图片合并的时候,你要把多张图片有序的合理的合并成一张图片,还要留好足够的空间,防止板块内出现不必要的背景;这些还好,最痛苦的是在宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂。
    2、至于可维护性,这是一般双刃剑。可能有人喜欢,有人不喜欢,因为每次的图片改动都得往这个图片删除或添加内容,显得稍微繁琐。而且算图片的位置(尤其是这种上千px的图)也是一件颇为不爽的事情。当然,在性能的口号下,这些都是可以克服的。
    3、由于图片的位置需要固定为某个绝对数值,这就失去了诸如center之类的灵活性。
    4、前面我们也提到了,必须限制盒子的大小才能使用CSS Sprites,否则可能会出现出现干扰图片的情况。这就是说,在一些需要非单向的平铺背景和需要网页缩放的情况下,CSS Sprites并不合适。

    基本用法

    background-image:url('img_tree.png');
    background-repeat:no-repeat;
    background-position:right top;  // right 为正数 图片向右移 为负数 图片向左移  top同理
    

    eg:

    原始图片:

    .pause{
    	width: 36px;
    	height: 36px;
    	background: url("https://upload-images.jianshu.io/upload_images/3100736-be3c0495c116dd76.png") no-repeat;
    }
    .stop{
    	width: 36px;
    	height: 36px;
    	background: url("https://upload-images.jianshu.io/upload_images/3100736-be3c0495c116dd76.png") -36px 0px no-repeat;
    }
    .play{
    	width:36px;
    	height: 36px;
    	background: url("https://upload-images.jianshu.io/upload_images/3100736-be3c0495c116dd76.png") -75px 0 no-repeat;
    }
    

    效果:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions