图像精灵(Image Sprites)

图像精灵是放入一张单独的图片中的一系列图像。

包含大量图像的网页需要更长时间来下载,同时会生成多个服务器请求。

使用图像精灵将减少服务器请求数量并节约带宽。

图像精灵 - 简单的例子

我们使用这幅单独的图像 ("img_navsprites.gif"),而不是三幅独立的图像:

通过 CSS,能够只显示我们需要的图像部分。

在下面的例子中,CSS 规定要显示 "img_navsprites.gif" 图像的哪个部分:

实例

img.home
{
width:46px;
height:44px;
background:url(img_navsprites.gif) 0 0;
}

亲自试一试

例子解释:

因为 src 属性不能为空,所有我们定义了一幅小的透明图像。而显示的图像将是我们在 CSS 中规定的背景图像:

<img class="home" src="img_trans.gif" />

定义我们希望使用的图像部分:

width:46px;
height:44px;

定义背景图像及其位置 (left 0px, top 0px):

background:url(img_navsprites.gif) 0 0;

这是使用图像精灵的最简单的方法,现在我们希望通过链接和 hover 效果来扩展它。

图像精灵 - 创建导航列表

我们希望使用图像精灵 ("img_navsprites.gif") 来创建导航列表。

我们将使用 HTML 列表,因为它们能够充当列表,同时也支持背景图像:

实例

#navlist {position:relative;}
#navlist li {margin:0;padding:0;list-style:none;position:absolute;top:0;}
#navlist li, #navlist a {height:44px;display:block;} #home {left:0px;width:46px;}
#home {background:url('img_navsprites.gif') 0 0;} #prev {left:63px;width:43px;}
#prev {background:url('img_navsprites.gif') -47px 0;} #next {left:129px;width:43px;}
#next {background:url('img_navsprites.gif') -91px 0;}

亲自试一试

例子解释:

把 position 设置为 relative 允许其中进行绝对定位:

#navlist {position:relative;}

外边距和内边距被设置为 0,去掉 list-style,并且所有列表项均为绝对定位:

#navlist li {margin:0;padding:0;list-style:none;position:absolute;top:0;}

所有图像的高度是 44px:

#navlist li, #navlist a {height:44px;display:block;}

现在开始定位并添加每个具体部分的样式:

定位到最左侧,图像宽度为 46px:

#home {left:0px;width:46px;}

定义背景图像及其位置 (left 0px, top 0px):

#home {background:url(img_navsprites.gif) 0 0;}

向右定位 63px (#home 宽度 46px + 项目之间的间隔),宽度是 43px:

#prev {left:63px;width:43px;}

定义背景图像向右移动 47px (#home 的宽度是 46px + 1px 的分隔线):

#prev {background:url('img_navsprites.gif') -47px 0;}

向右定位至 129px (从 #prev 的 63px 开始 + #prev 宽度 43px + extra space),宽度是 43px:

#next {left:129px;width:43px;}

定义背景图像向右 91px (#home width 46px + 1px line divider + #prev width 43px + 1px line divider ):

#next {background:url('img_navsprites.gif') no-repeat -91px 0;}

图像精灵 - Hover 效果

现在,我们希望向导航列表添加 hover 效果。

提示::hover 选择器用于在鼠标指针位于其上时选取元素。

提示::hover 选择器可用在所有元素上,不仅仅是链接。

我们的新图像 ("img_navsprites_hover.gif") 包含三幅导航图像,以及三幅用于 hover 效果的图像:

由于这是一幅单独的图像,而不是六个独立的文件,当用户将鼠标指针移动到图像上时,不会产生加载延迟。

为了添加 hover 效果,我们只加入了三行代码:

实例

#home a:hover{background: url('img_navsprites_hover.gif') 0 -45px;}
#prev a:hover{background: url('img_navsprites_hover.gif') -47px -45px;}
#next a:hover{background: url('img_navsprites_hover.gif') -91px -45px;}

亲自试一试

例子解释:

对于所有三幅 hover 图像,我们规定了相同的背景位置,只是向下移动 45px:

#home a:hover{background: transparent url(img_navsprites_hover.gif) 0 -45px;}

CSS 图像精灵的更多相关文章

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

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

  2. css 图像热区

    CSS图像热区 在img标签当中,存在一个属性usemap属性,用来和map标签进行绑定,从而实现图像热区.所谓的图像热区,其实指的是在图像中插入一个连接,当用户点击图像的指定区域后就会进行页面跳转. ...

  3. CSS 图像居中对齐

    CSS  图像居中对齐 我们在<CSS 内外边距>学过内容居中,它的原理是将外边左右设置为auto.图像居中也是这个原理. 示例 <!DOCTYPE html> <htm ...

  4. CSS 图像大小

    CSS 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用CSS来控制大小. 给盒子设置属性height.width限制大小.单位通常是像 ...

  5. CSS 图像

    CSS 图像 <上一节下一节> 通过CSS可以控制图像的大小和对齐方式. 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用C ...

  6. CSS 图像拼合技术

    CSS 图像拼合技术 一.图像拼合 图像拼合就是单个图像的集合. 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求. 使用图像拼合会降低服务器的请求数量,并节省带宽. 二.图像拼合 - ...

  7. CSS 图像透明/不透明

    CSS 图像透明/不透明 使用CSS很容易创建透明的图像. 注意:CSS Opacity属性是W3C的CSS3建议的一部分. 一.示例一:创建一个透明图像 CSS3中属性的透明度是 opacity. ...

  8. css图像拼合技术(精灵图)

    CSS图像拼合技术 1.图像拼合 图像拼合技术就是单个图像的集合. 有很多图片的网页可能会需要很多时间来加载和生成多个服务器的请求. 使用图像拼合会降低服务器的请求数量,并节省带宽. 图像拼合实例 有 ...

  9. CSS:CSS 图像拼合技术

    ylbtech-CSS:CSS 图像拼合技术 1.返回顶部 1. CSS 图像拼合技术 图像拼合 图像拼合就是单个图像的集合. 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求. 使用图 ...

随机推荐

  1. sqlserver 表循环-游标、表变量、临时表

    SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...

  2. html实现调用jar包

    整体思路:html引用URL protocol-本地注册表key,key对应某一c#写的exe可执行文件,由exe可执行文件调用cmd,cmd执行jar包. 1.添加注册表: Windows Regi ...

  3. Eclipse中STM32工程建立步骤

    前段时间一直在折腾linux系统上STM32的开发,网上一顿搜,费劲九牛二虎之力终于把环境搭好了(现在都有点忘了,后面再折腾环境搭建一定要写个教程,今天先不写了). 自从环境搭好之后,就基本抛弃MDK ...

  4. Java如何获取JSON数据中的值

    场景:在接口自动化场景中,下个接口发送的请求参数,依赖上个接口请求结果中的值.需要将获取值作为全局参数引用. import java.io.File; import java.io.FileInput ...

  5. Elasticsearch学习笔记(十)批量查询mget、批量增删改bulk

    一.批量查询  mget             GET /_mget {   "docs":[       {         "_index":" ...

  6. 魔方---java

    package LMS; import java.awt.AWTException;import java.awt.Robot;import java.awt.event.InputEvent;imp ...

  7. 温习排序算法(基于C指针)

    以前学过的数据结构课,貌似已经忘得一干二净了,偶然又翻起,书中最后一章详细介绍了7种排序算法,现在对其中4种做个总结.(为啥只总结4种,当然是因为偷懒,只想总结简单又常用的!) 先贴一张排序分类图: ...

  8. iOS Version和Build的区别

    iOS开发中,会面对一个问题,Version和Build的区别.这两种均是版本号,但是在开发中还是有一定的区别,而且用处很大. Version 是版本号,在info.plist中对应的key是 CFB ...

  9. 模拟Oracle行迁移和行链接

    行链接消除方法创建大的block块------------------ 参考tom kyte的例子----------------------------------------------创建4k ...

  10. .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?(转)

    .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?  后端开发  作者: Rector  1973 阅读  0 评论  0 收藏  收藏本文 ...