css中精灵图的使用和作用
什么是精灵图
所谓的精灵图就是将多个图片放在一个大的图片上面,精灵图主要是用来当做背景图时使用的.
为什么要使用精灵图
之所以将多个图片放置在一个大的图片上面是因为背景图的放置是放在服务器上面的,当我们需要使用到某个图片的时候就会向服务器发送请求资源,如果图片是分离的那么用到一张的时候就请求一次,这样子服务器的压力就会比较大,所以将图片都整合在一起就会减轻服务器的请求次数,这样子就可以增加性能
使用精灵图的小案例源码
css代码如下:
*{
padding: 0px;
margin: 0px;
}
html{
background-color: seagreen;
}
ul{
width: 60px;
height: 400px;
margin: 20px auto;
}
ul li{
list-style: none;
width: 80px;
height: 50px;
margin-top: 10px;
background-image: url(img/icon1.png);
background-repeat: no-repeat;
}
ul li a{
text-decoration: none;
display: block;
line-height: 50px;
padding-left: 30px;
}
.icon1{
background-position: 0 0;
}
.icon2{
background-position: 0 -30px;
}
.icon3{
background-position: 0 -70px;
}
.icon4{
background-position: 0 -112px;
}
.icon5{
background-position: 0 -146px;
}
.icon6{
background-position: 0 0;
background: url("");
}
html代码块如下:
在这里插入代码片<body>
<ul>
<li class="icon1"><a href="">首页</a></li>
<li class="icon2"><a href="">视频</a></li>
<li class="icon3"><a href="">首页</a></li>
<li class="icon4"><a href="">首页</a></li>
<li class="icon5"><a href="">首页</a></li>
<li class="icon1"><a href="">首页</a></li>
<li class="icon2"><a href="">视频</a></li>
<li class="icon3"><a href="">首页</a></li>
<li class="icon4"><a href="">首页</a></li>
<li class="icon5"><a href="">首页</a></li>
</ul>
</body>
实现的效果图如下:
案例二
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>精灵图2</title>
<style>
*{
padding: 0px;
margin: 0px;
}
ul{
width: 400px;
height: 100px;
margin: 20px auto;
}
ul li{
list-style: none;
width: 80px;
height: 50px;
float: left;
margin-top: 10px;
margin-left: 10px;
background-image: url(img/icon6.png);
background-repeat: no-repeat;
background-color: #e7e7e7;
border: 1px solid #b3b3b3;
}
ul li:hover{
background-color: #ffb500;
}
ul li a{
text-decoration: none;
display: block;
line-height: 50px;
padding-left: 20px;
}
.icon1{
background-position: 0 10px;
}
.icon2{
background-position: -88px 10px;
}
.icon3{
background-position: -234px 10px;
}
.icon4{
background-position: -234px 10px;
}
</style>
</head>
<body>
<ul>
<li class="icon1"><a href="">首页</a></li>
<li class="icon2"><a href="">新闻</a></li>
<li class="icon3"><a href="">娱乐</a></li>
<li class="icon4"><a href="">体育</a></li>
</ul>
</body>
</html>
案例结果截图
总结:
CSS Sprites 、精灵图、 雪碧图 都是一个概念
* 我对精灵图的简单看法
关于精灵图我简单的介绍一下:就是把多张小图片拼接成一张大图片,通过定位,设置X,Y轴坐标的值,并让超出部分隐藏,这样就可以显示图片的局部,也就是我们想要的部分,这样做有利于页面优化,当页面加载时,不是加载每个单独图片,而是一次加载整个组合图片。它大大减少了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所需要的时间延迟,使效果更流畅,不会停顿。
但它适用于小型项目,它的坏处就是合并图片难,而且如果后期改变某一个图片,很可能就会影响页面的整体布局,需要重新设置每个小图标的X,Y坐标,
需要注意的是,精灵图以左上角为坐标原点(0,0),X轴的水平向右为正方向,Y轴的竖直向下为正方向,X,Y取值均为负值。
简单举个我在工作中的使用例子,最简单的登录框,在input中加入username用户名的小图标,在keyword用户密码中加入密码锁的图标,还有就是类似于京东的最右侧的固定定位侧边栏的加购物车,我的京东等小功能的图标都是使用的精灵图。
一. 原理
CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字精确的定位出 背景图片的位置。
二. 使用场景
CSS Sprites可以用在很多场合,大型网站可以将许多单独的图片,以有机的方式组合起来,从而使其便于维护和更新。图片之间通常会留出较大的空白,使得图片不会影响网页的内容。
但同时CSS Sprite大多使用于较固定的像素定位中,它的弹性较差,受到定位等因素的制约。所以,你需要在可维护性vs降低负载之间权衡利弊,选择最适合你的项目 的方式。
三. 优点
1.利用CSS Sprites能很好地 减少网页的http请求,从而大大的提高页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因;
2.CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。
3.解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每一个小元素进行命名,从而提高了网页的制作效率。
4.更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。
四. 缺点
诚然CSS Sprites是如此的强大,但是也存在一些不可忽视的缺点,如下:
1.在图片合并的时候,你要把多张图片有序的合理的合并成一张图片,还要留好足够的空间,防止板块内出现不必要的背景;这些还好,最痛苦的是在 宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂;
2.CSS Sprites在开发的时候比较麻烦,你要通过 photoshop或其他工具测量计算每一个背景单元的精确位置,这是针线活,没什么难度,但是很繁琐;幸好 腾讯的鬼哥用 ADOBE AIR开发了一个CSS Sprites 样式生成工具,虽然还有一些使用上的不灵活,但是已经比photoshop测量来的方便多了,而且样式直接生成,复制,拷贝就OK!
3.CSS Sprites在维护的时候比较麻烦,如果页面背景有少许改动,一般就要改这张合并的图片,无需改的地方最好不要动,这样避免改动更多的 css,如果在原来的地方放不下,又只能(最好)往下加图片,这样图片的字节就增加了,还要改动css。
4.CSS Sprites非常值得学习和应用,特别是页面有一堆ico(图标)。总之很多时候大家要权衡一下利弊,再决定是不是应用CSS Sprites。
五. 比较经典的使用案例
YouTube使用了一个2008像素高的CSS Sprites:
YouTube
苹果网站使用CSS Sprites来制作导航菜单的鼠标悬停效果:
Apple
亚马逊使用的大幅、整齐巧妙的CSS Sprites:
Amazon
CNN使用了非常简单谨慎的方案:
CNN
Google使用了极其简化的方案:
转载于:链接:https://www.jianshu.com/p/0bde32436144