本文主要内容简译自Dava Shea的英文文章 CSS Sprites: Image Slicing’s Kiss of Death如果觉得博主讲的含糊不清的话,可以看作者原文。

熟悉了常规切图的我们,在浏览大型网站的时候,有时会忍不住审查元素一下,就会发现他们会把所有的小图标整合在一个图片上,比如谷歌的

而且如果你细心一点,你会发现Google的二级搜索结果页面是底下的分页的那一排o也是用CSS Sprite做的。那么什么是CSS Sprite呢?

CSS Sprites是目前大型网站的图片处理的一种方式,原理主要是将网站上的小图片或者图标整合在一张大图上,在用css的background-position属性通过x/y轴的位置来定位图片,从而减少服务器对图片的请求数目,提高网站的加载速度。当然如果你不做大型网站,不需要精细到加载速度的时候,CSS Sprites也会制作和维护带来一些不必要的麻烦。但是当你掌握其用法时,利用CSS Sprites是可以和轻松的做出一些有趣的特效。

CSS Sprites是如何作用的?

     我们用到的工具无非就是css,运用我们的想法写出富有创造力的css。

然我们从原图本身说起,把矩形分为四个部分,我们可以看出来上半部分图片,是链接刚开始的效果,下半部分是我们把鼠标悬停在链接上的效果,我们把鼠标悬停在哪个部分哪个部分就会变色。

HTML代码如下:

<ul id="skyline">
<li id="panel1b"><a href="#1"></a></li>
<li id="panel2b"><a href="#2"></a></li>
<li id="panel3b"><a href="#3"></a></li>
<li id="panel4b"><a href="#4"></a></li>
</ul>

我们用四个<li>标签和<a>组成了四个不同部分的链接。

应用css

  

          #skyline{
width: 400px;
background-image: url(img/test-3.jpg);
height: 200px;
position: relative;
margin: 10px auto;
padding: 0;
}
#skyline li{
margin: 0;
padding: 0;
list-style-type: none;
position: absolute;
top: 0; }
#skyline li,#skyline a{
height: 200px;
display: block;
}

  注意我们并没有把图片放在链接里而是放在的ul里,一会儿你将看到原因。

我们将a元素设定空白透明但是有限定大小的block用来出发链接活动,通过定位包含它的li元素来定位,如果这里我们直接来定位a元素而不是定位li元素将在老版本的浏览器中出现错误。

定位链接

      li元素被绝对定位了(position:abosulute),那么为什么li元素没有出现在浏览器的窗口的上方,被定位的元素有一个怪异却很有用的特性,被绝对定位的后代元素不是相对于浏览器窗口定位,而是相对离它最近的并且position属性为relative的父元素进行定位。所以这里的li元素相对于#skyline进行定位。

  #panel1b {left:; width: 95px;}
#panel2b {left: 96px; width: 75px;}
#panel3b {left: 172px; width: 110px;}
#panel4b {left: 283px; width: 117px;}

所以通过如上代码我们就将每个li元素分别布局到四个小矩形的位置上,这是我们有了带有链接的图片地图,我们来看一下没有加上:hover时的效果和每个部分加border的效果

hover效果

       接下来我们将通过:hover使隐藏的下半部分图片剪裁一部分的方式显现,那么我们将移动图片使它精确定位呢,接下来就是CSS Sptites了,我们要讲的。

  #panel1b a:hover {
background: transparent url(test-3.jpg)
0 -200px no-repeat;}
#panel2b a:hover {
background: transparent url(test-3.jpg)
-96px -200px no-repeat;}
#panel3b a:hover {
background: transparent url(test-3.jpg)
-172px -200px no-repeat;}
#panel4b a:hover {
background: transparent url(test-3.jpg)
-283px -200px no-repeat;}

我们从那里获得的像素值呢,让我们把它拆分一下,第一个数值当然水平方向的值(距离左边),第二个值时垂直方向。垂直方向的数值都是相等的200px,因为图片的高度时400px的,上下半部分各占200px,下边的部分需要向上移动200px才能覆盖上半部分,还有一点就是一般background-position值都是负值,因为背景图都是定位在左上方的。

水平方向的偏移量则是li的宽度,第二个链接的偏移量则是前两个li元素宽度的和,以此类推。

这里是效果

Buttons效果和特殊形状

    通过以上的方式我们就可以在把网页上的按钮button应用各种效果,比如原图,我们可以做成这样的样式,方法同上

   但是我们遇到不规则图形时,这是可能会出现重叠现象(看效果),这是我们可以在原图上做做文章,拆分为两个hover后的效果图,如图,这是我们正确完整的效果

神奇的CSS sprites,制作特效的新方法的更多相关文章

  1. 【转】CSS Sprites教程大全(使用方法、工具介绍)

    什么是CSS Sprite CSS Sprite 又叫CSS精灵,是目前大型网站中经常运用的图片处理方式.它的原理很简单,将网站上零散的小图片(或图标)整合在一张大图上,再用CSS中“backgrou ...

  2. CSS Sprites (CSS图像拼合技术)教程工具

    什么是CSS Sprites? “Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏.视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要 同时保持画面流畅.“Spri ...

  3. CSS Sprites(CSS图像拼合技术)教程、工具集合

    本集合是有一位国外设计师收集整合,并由 oncoding翻译成中文的,感谢他们的辛苦贡献.CSS Sprites技术在国外并不是什么新技术,只不过近两年(尤其08年开始)中国开始流行这个词,大家也开始 ...

  4. CSS Sprites+CSS3 Icon Font

    CSS Sprites+CSS3 Icon Font CSS Sprites在国内很多人叫CSS精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来, ...

  5. 奇思妙想 CSS 3D 动画 | 仅使用 CSS 能制作出多惊艳的动画?

    本文将从比较多的方面详细阐述如何利用 CSS 3D 的特性,实现各类有趣.酷炫的动画效果.认真读完,你将会收获到: 了解 CSS 3D 的各种用途 激发你新的灵感,感受动画之美 对于提升 CSS 动画 ...

  6. CSS3与页面布局学习笔记(五)——Web Font与CSS Sprites(又称CSS精灵、雪碧图)技术

    一.web font web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体.先了解操作系统中的字体: a).安装好操作系统后,会默认安装一些字体,这些字体文件描 ...

  7. CSS Sprites的概念、原理、适用范围和优缺点

    CSS Sprites概念 CSSSprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就 ...

  8. CSS Sprites优缺点

    利用CSS Sprites能很好地减少网页的http请求,从而大大的提高页面的性能,这也是CSS Sprites最大的优点,也是其被广泛传播和应用的主要原因: CSS Sprites能减少图片的字节, ...

  9. Css Sprites 多张图片整合在一张图片上

    CSS Sprites原理: CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的"background-image","backgro ...

随机推荐

  1. [资料分享]dubbo视频教程流行版

    一.基础篇 第001节–课程介绍 第01节–使用Dubbo对传统工程进行服务化改造的思路介绍 第02节–使用Dubbo对传统工程进行服务化改造 第03节–ZooKeeper注册中心安装 第04节–使用 ...

  2. 2016-1-28 图解HTTP(03)

    6.2.5 非HTTP/1.1首部字段        不限于RFC2616中定义的47种首部字段,还有Cookie.Set-Cookie和Content-Disposition等在其他RFC中首部字段 ...

  3. ACM: Gym 101047E Escape from Ayutthaya - BFS

    Gym 101047E Escape from Ayutthaya Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I6 ...

  4. Powershell脚本执行权限

    Powershell脚本需要使用PS1扩展名 在加载脚本前需要确认是都有执行权限,默认是Restricted(受限的), 可以执行Get-ExecutionPolicy查看权限, 一般情况下使用 Re ...

  5. / fluxChatDemo / 系列 ——fluxDemoChat 组件编写

    还是用各部分来表示过程吧,没文采,就先这样记着吧 嘻嘻 梳理问题: 编写es6风格的组件时,需要引入import React from ‘react’ 然后页面就华丽丽的展示出了我写的1.2两个字 在 ...

  6. 前端页面开发,最低兼容IE 8的多设备跨平台问题解决!

    项目要求: 网站能够使用PC.ipad.mobile phone正常访问 页面PSD版式宽度分别为1024px和750px 参考资料 使用CSS3 Media Queries,其作用就是允许添加表达式 ...

  7. Think in 递归

    网上写递归的文章可以用汗牛充栋来形容了,大多数都非常清晰而又细致的角度上讲解了递归的概念,原理等等.以前学生的时候,递归可以说一直是我的某种死穴,原理,细节我都懂,但是不管是在如何运用或者如何试试算法 ...

  8. Visual 2015创建新项,缺少ADO.NET 实体数据模型的解决方法

    现在的某度查资料真的很麻烦,突然我自身的VS2015创建EF的时候找不到 ADO.NET 实体数据模型,但是使用CodeFrist是可以生成数据表的.所有特别郁闷. 打开界面如下 某度半天,都没有查出 ...

  9. C#:获取设备电量相关信息

    更多资源:http://denghejun.github.io [DllImport("kernel32.dll",EntryPoint="GetSystemPowerS ...

  10. 5.Powershell变量

    在指令执行过程中,会有一些数据产生,这些数据被用于以后的语句,需要一个存储单元暂时的存放这些数据,这个时候定义一个变量来存储数据.例如$string = “Hello Powershell!” Pow ...