CSS3高阶应用技巧,你都知道哪些?
01、CSS3高阶应用技巧,你都知道哪些?
CSS雪碧图,即CSS Sprite,也有人叫它CSS精灵图,是一种图像拼合技术。该技术是将多个小图标和背景图像合并到一张图片上,如图1所示,然后利用CSS的背景定位来显示需要显示的图片部分。
■ 图1 雪碧图
CSS雪碧图制作:
(1) PS手动拼图。
(2) 使用Sprite工具自动生成(CssGaga或者CssSprite.exe)。
雪碧图是用来减少HTTP请求数量,加速内容显示。因为每请求一次,就会和服务器建立一次链接,而建立连接是需要额外的时间的。同时也解决了命名困扰,只需对一张图片命名,而非数十个小图片命名。
使用雪碧图之前,需要知道雪碧图中各个图标的位置,如图2所示。
■ 图2 雪碧图坐标
从上面的图片不难看出雪碧图中各个小图标(icon)在整张雪碧图的起始位置,例如第一个图标(裙子)在雪碧图的起始位置为(0,0),第2个图标(鞋子)在雪碧图的起始位置为(0,50),第3个图标(足球)在雪碧图的起始位置为(0,100),以此类推可以得出各张图片相对于雪碧图的起始位置。
以上面的雪碧图为例(实际雪碧图中各个小图片的起始位置和上面的展示图不同)用一个Demo来阐述它的使用方法,如例5-19所示。
【例1】雪碧图应用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>雪碧图</title>
<style>
ul li {
list-style: none;
margin: 0;
padding: 0;
}
a {
color: #333;
text-decoration: none;
}
.sidebar {
width: 150px;
border: 1px solid #ddd;
background: #f8f8f8;
padding: 0 10px;
margin: 50px auto;
}
.sidebar li {
border-bottom: 1px solid #eee;
height: 40px;
line-height: 40px;
text-align: center;
}
.sidebar li a {font-size: 18px;}
.sidebar li a:hover {color: #e91e63;}
.sidebar li .spr-icon {
display: block;
float: left;
height: 24px;
width: 30px;
background: url(images/css-sprite.png) no-repeat;/*雪碧图*/
margin: 8px 0px;}
.sidebar li .icon2 { background-position: 0px -24px;}/*定位雪碧小图*/
.sidebar li .icon3 { background-position: 0px -48px;}
.sidebar li .icon4 { background-position: 0px -72px;}
.sidebar li .icon5 {background-position: 0px -96px;}
.sidebar li .icon6 {background-position: 0px -120px;}
.sidebar li .icon7 { background-position: 0px -144px;}
.sidebar li .icon8 { background-position: 0px -168px;}
</style>
</head>
<body>
<div>
<ul class="sidebar">
<li><a href=""><span class="spr-icon icon1"></span>服装内衣
</a></li>
<li><a href=""><span class="spr-icon icon2"></span>鞋包配饰
</a></li>
<li><a href=""><span class="spr-icon icon3"></span>运动户外
</a></li>
<li><a href=""><span class="spr-icon icon4"></span>珠宝手表
</a></li>
<li><a href=""><span class="spr-icon icon5"></span>手机数码
</a></li>
<li><a href=""><span class="spr-icon icon6"></span>家电办公
</a></li>
<li><a href=""><span class="spr-icon icon7"></span>护肤彩妆
</a></li>
<li><a href=""><span class="spr-icon icon8"></span>母婴用品
</a></li>
</ul>
</div>
</body>
</html>
在浏览器中的显示效果如图1所示。
■ 图3 雪碧图应用效果
上面的例子已经阐述了如何使用雪碧图,只不过初学者可能会对雪碧图中的background-position属性值为负值有所疑惑。这个问题其实不难回答,如果细心的人应该很早就发现了使用负数的根源所在。这边用上面的Demo为例,来分析这个问题。上面的span标签是一个24*30px长和宽的容器,在使用背景图时,背景图的初始位置会从容器的左上角的开始铺满整个容器,然而容器的大小限制了背景图呈现的大小,超出容器部分被隐藏起来。假如设置background-position: 0 0 那么意味着,背景图像对于容器(span标签)x轴=0;y轴=0的位置作为背景图的起始位置来显示图片,所以如果需要在容器中显示第2个图标,意味着雪碧图x轴方向要左移动,左移动雪碧图即它的值会设置为负数,同理y轴方向也一样,如图4所示。
■ 图4 雪碧图定位原理
雪碧图的优点:
(1)加快网页加载速度:网页上面每幅图片,都要向浏览器请求下载图片,而浏览器接受的同时请求数是10个,一次能处理的请求数目是两个。
(2)后期维护简单:该工具可以直接通过选择图片进行图片的拼接,当然你也可以自己挪动里面的图片,自己去布局你的雪碧图,更换图片时也只要更改一下图片的位置就可以了。直接生成代码,简单易用。
(3)CSS Sprites能减少图片的字节,曾经比较过多次3张图片合并成1张图片的字节总是小于这3张图片的字节总和。
(4)解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不需要对每个小元素进行命名,从而提高了网页的制作效率。
(5)更换风格方便,只需要在一张或少张图片上修改图片的颜色或样式,整个网页的风格就可以改变。维护起来更加方便。
雪碧图的缺点:
(1)在图片合并时,你要把多张图片有序的合理的合并成一张图片,还要留好足够的空间,防止板块内出现不必要的背景;这些还好,最痛苦的是在宽屏,高分辨率的屏幕下的自适应页面,你的图片如果不够宽,很容易出现背景断裂。
(2)至于可维护性,这是一般双刃剑。可能有人喜欢,有人不喜欢,因为每次的图片改动都得往这张图片删除或添加内容,显得稍微烦琐,而且算图片的位置(尤其是这种上千px的图)也是一件颇为不爽的事情。当然,在性能的口号下,这些都是可以克服的。
(3)由于图片的位置需要固定为某个绝对数值,这就失去了诸如center之类的灵活性。
CSS Sprites一般只能用到固定大小的盒子(box)里,这样才能遮挡住不应该看到的部分。这就是说,在一些需要非单向的平铺背景和需要网页缩放的情况下,CSS Sprites并不合适。
下面使用雪碧图拼出自己的名字,如例2所示。
【例2】拼自己名字
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>拼自己名字</title>
<style>
span {/*引入雪碧图*/
background: url(images/abcd.jpg) no-repeat;
float: left;
}
span:first-child {
width: 108px;
height: 109px;
background-position: 0 -9px;
}
span:nth-child(2) {
width: 110px;
height: 113px;
background-position: -256px -275px;
}
span:nth-child(3) {
width: 97px;
height: 108px;
background-position: -363px -7px;
}
span:nth-child(4) {
width: 110px;
height: 110px;
background-position: -366px -556px;
}
</style>
</head>
<body>
<span></span>
<span></span>
<span></span>
<span></span>
</body>
</html>
在浏览器中的显示效果如图5所示。
■ 图5 名字效果
- 点赞
- 收藏
- 关注作者
评论(0)