^ 回到顶部
  • 人生没有定律,每个人都有自己的节奏
  • 若文中代码有问题,可能是少了几个问号,留言一定会解决!
  • 希望你的坚持,都是因为热爱,而不是因为不甘心
  • 站点文章结尾新增了赞赏通道
  • 那些不愿意让你吃亏的人,才是真正值得你深交的人,也是值得你付出时间的人

Xhtml+css基础第7课 css sprites background-position完美解析

css sprites 直译过来就是 CSS 精灵。通常被解释为“CSS 图像拼合”或“CSS 贴图定位”。其实就是通过将多个图片融合到一张图里面,然后通过 CSS background 背景定位技术技巧布局网页背景。这样做的好处也是显而易见的,因为图片多的话,会增加 http 的请求,无疑促使了网站性能的减低,特别是图片特别多的网站,如果能用 css sprites 降低图片数量,带来的将是速度的提升。

css sprites 是什么通俗解释:CSS Sprites 其实就是把网页中一些背景图片整合拼合成一张图片中,再利用 DIV CSS 的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position 可以用数字能精确的定位出背景图片在布局盒子对象位置。

1、sprites 优势:
若干小图标拼合成一张图后布局,减少 http iis 请求数,对于大战大流量网站来说隐形优势很显然的,从而隐形地提升了网站性能。对于大流量网站来说本来 http 请求数比较宝贵,使用 DIV+CSS Sprites 这样可以大大的提高了页面的性能,这是 CSS Sprites 最大的优点,也是其被广泛传播和应用的主要原因,同时也减少图片文件数目。

2、sprites 缺点
在图片合并的时候,你要把多张图片有序的合理的合并成一张图片,还要留好只够的空间,防止板块内不会出现不必要的背景,如果留空间或拼合位置不合适,在布局时容易出现布局这个盒子对象时,设置背景出现拼合相邻图片,干扰图片的情况;

CSS Sprites 在开发的时候比较麻烦,你要通过 photoshop(PS)或其他工具测量计算每一个背景单元的精确位置,这是针线活,没什么难度,但是很繁琐;

CSS Sprites 在维护的时候比较麻烦,sprites 是一般双刃剑,如果页面背景有少许改动,一般就要改这张合并的图片,无需改的地方最好不要动,这样避免改动更多的 css,如果在原来的地方放不下,有只能(最好)往下加图片,这样图片的字节就增加了,因为每次的图片改动都得往这个图片删除或添加内容,显得稍微繁琐,而且重新算图片的位置(尤其是这种上千 px 的图)也是一件颇为不爽的事情

由于图片的位置需要固定为某个绝对数值,这就失去了诸如 center 之类的灵活性。

我们详细用一个实例来学习 background-position 的用法:先看看 google 网站的素材图,如下:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
假如我现在想做一个+1 按钮,利用上边的素材图,普通状态显示 A 图,鼠标移上去显示后显示 B 图,实现这么一个动态效果。

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
按钮是用来实现功能的,一般是用超链接响应单击事件,但是不能把背景图直接加在超链接上,那样就不叫样式啦,因为超链接的文本长度变化时,样式也变了。

地球人一般的做法是,div 里边套一个超链接,超链接负责实现功能,div 负责装载背景图。html 结构如下:

<div class="btn">
 <a href="http://www.kpdown.com">+1</a>
</div>

有了 html 骨架,接下来就要写 css 样式啦。

假如我们什么都不考虑,直接把整张图片设为背景,样式如下:

.btn{
background:url(bg.png);
}

效果如图:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
div 是块级元素,默认是占一行的,这个先不用关心,但看到背景图重复了,这显然不是我们想要的,加上 background-repeat:no-repeat;属性,改进样式如下:

.btn{
background:url(bg.png);
background-repeat:no-repeat;
}

这样就不重复了。

div 可以理解成一个矩形框,它的左上角是顶点,背景图片的顶点也是左上角,div 加载背景图时,会把两个顶点重合,顶点的坐标是(0,0)。不理解的看图,很简单的。。。

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
+1 的小图片混杂在大图中,想提取出来,需要用 background-position 属性,这个属性相当于大图片不动,把 div 的顶点进行移动,移动到目标小图的顶点位置,如下图:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
这样一来,div 中显示的就是小图了,但是,显示的还不仅仅是小图,而是图中阴影部分,怎么办呢设置一下 div 的宽、高,让它和小图的宽、高一样就可以了呗!!

再来看看 background-position 属性,它有两个参数,分别是水平方向移动的像素、竖直方向移动的像素,都用负数表示。大图不动,div 移动,也只能是向右、向下移动,只要记住这两个方向移动的像素都用负数表示就行了!

因此,只要找到小图相对于大图左上角顶点的水平移动像素、竖直移动像素就可以了。其实也不用什么专业工具,用截图就很方便,从大图左上角顶点开始截,到小图顶点那停下来,一看像素就差不多了,然后再调试调试,基本就搞定。

在本例中,A 小图的位移是:-25px -374px,A 小图尺寸是:24px 16px。因此,css 样式如下:

.btn{
background:url(bg.png);
background-repeat:no-repeat;
background-position:-25px -374px;
height:16px;
width:24px;
}

效果如下:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
这样就算是把小图抠出来啦!简单吧!!

先解释个问题,图片上有+1,而我又在超链上写了一个+1,这是因为很多时候文本内容不是写在图片上的,那样灵活性太差,文本就是文本,我为了给大家一个完整的演示,因此又写了一个+1,接下来就处理它!

先把+1 居中,居中分为水平居中和垂直居中,水平居中超链接,需要在 div 上设置 text-align:center;这个属性是对子节点而言的;垂直居中 div 中的超链接,只需要把 a 标签的 line-height 属性设成和 div 的高度一样即可。样式如下:

.btn{
background:url(bg.png);
background-repeat:no-repeat;
background-position:-25px -374px;
height:16px;
width:24px;
text-align:center;
}
.btn a{
line-height:16px;
}

效果如下:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
接下来呢,还有问题,我们可以发现,只有当鼠标移到+1 文本上时,鼠标才会变成手型,才能响应事件。

这显然不是我们想要的,应该是鼠标移入图片时,确切的说是鼠标移入 div 时,就可以变成手型,也能响应事件。

这也简单,只需要在 a 标签(超链接)上加 display:block;属性即可。

另外这个下划线比较碍眼,用 text-decoration:none;属性去掉,很常见,就不多说了。

样式如下:

.btn{
background:url(bg.png);
background-repeat:no-repeat;
background-position:-25px -374px;
height:16px;
width:24px;
text-align:center;
}
.btn a{
line-height:16px;
display:block;
text-decoration:none;
}

接下来就剩最后一件事了,那就是鼠标移入的时候切换背景。

本例是 div 里边套 a 标签,鼠标移入换背景,当然是指鼠标移入 div,而且换背景也是换 div 的背景,可不是 a 标签的哦!!

因此要在 div 标签上调用 hover,div 的样式是 btn,因此写成.btn:hover{}。

换背景还需要找到背景图片,这又需要抠小图了,也就是抠上边指出的 B 图。

刚刚显示的是 A 小图,B 小图和 A 小图在同一水平线上,因此竖直方向的移动像素是相同的,水平方向差不就是 A 小图的水平像素加上 A 小图的宽度。

经过测试,B 小图的位移是:-50px -374px,尺寸大小就不用关心了,肯定和 A 小图一样,不一样就没法做了。

把 B 小图的定位 background-position:-50px -374px;放在.btn:hover{}里即可。

样式如下:

.btn{
background:url(bg.png);
background-repeat:no-repeat;
background-position:-25px -374px;
height:16px;
width:24px;
text-align:center;
}
.btn a{
line-height:16px;
display:block;
text-decoration:none;
}
.btn:hover{
background-position:-50px -374px;
}

最终效果-鼠标移入之前:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
最终效果-鼠标移入之后:

Xhtml+css 基础第 7 课 css sprites background-position 完美解析
好啦,教程到这就结束了,为了学以致用,给大家一个小小的练习题:
效果:
Xhtml+css 基础第 7 课 css sprites background-position 完美解析

素材:
Xhtml+css 基础第 7 课 css sprites background-position 完美解析

关键代码:

ul.Sprites{ margin:0 auto; border:1px solid #F00; width:300px; padding:10px;} 
    ul.Sprites li{ height:24px; font-size:14px;line-height:24px; text-align:left; overflow:hidden} 
    ul.Sprites li span{ float:left; width:17px;padding-top:5px;height:17px;  
    overflow:hidden;background:url(ico.png) no-repeat} 
    ul.Sprites li a{ padding-left:5px} 
<ul class="Sprites"> 
        <li><span class="a1"></span><a href="#">WORD 文章标题</a></li> 
        <li><span class="a2"></span><a href="#">PPT 内容标题</a></li> 
        <li><span class="a3"></span><a href="#">Excel 内容标题</a></li> 
        <li><span class="a4"></span><a href="#">PDF 内容标题</a></li> 
        <li><span class="a5"></span><a href="#">文本文档标题</a></li> 
</ul>

答案:

你的二维码名字
此处内容已经被作者无情的隐藏,请输入验证码查看内容
验证码:
请关注“mxyblog”微信公众号,回复关键字“92wp”,获取验证码。【友情提醒】用微信扫描右侧二维码即可关注哦!

历史上的今天:
让小雨知道,这篇文章帮到了你

展开阅读全文

评论 2

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 帅气小琦琦
    签到成功!签到时间:下午1:20:34,陌小雨,你很棒!一起加油哦哦~回复
  2. 体操之乡网站管理员
    签到成功!签到时间:下午4:56:01,陌小雨,你很棒!一起加油哦哦~回复

登录

忘记密码 ?

切换登录

注册