阅读更多

17顶
0踩

Web前端

转载新闻 解密CSS Sprites:技巧、工具和教程

2009-04-30 15:00 by 副主编 zly06 评论(12) 有10497人浏览

CSS Sprites并没有一个确定的中文翻译,通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟。CSS Sprites并不是什么金科玉律,但在很多情况下,它有着一定的优势,最重要的是它可以减轻服务器的负载,提高网页加载速度。

本文系统的介绍了CSS Sprites的概念、用途和用法,相信本文会解决你在使用CSS Sprites中遇到的大部分问题。

什么是CSS Sprites?

“Sprite”(精灵)这个词在计算机图形学中有它独特的定义,由于游戏、视频等画质越来越高,必须有一种技术可以智能的处理材质和贴图,并且要 同时保持画面流畅。“Sprite”就是这样一种技术,它将许多图片组合到一个网格上,然后通过程序将每个网格的内容定位到画面上。

Sprite被定位到一副静态图片上,并且通过简单的程序或硬件即可正确定位到画面上,一幅幅图片就像是被“变”出来的,他们并没有单独占用内存,所以被取名为“Sprite精灵”。

 

Screenshot

上图是口袋妖怪的组合图片,可以点这里欣赏更多

时间进行到2000年,Web设计向着精致、巧妙的方向发展。设计师们开始考虑使用非Javascript的方 式制作鼠标滑过、悬停菜单的效果,这时CSS Sprite应运而生,它基于同上文提到的游戏Sprite同样的原理,并且使用CSS更容易控制,很快的流行开来。

2004年,Dave Shea 提出了一种使用CSS控制组合图片的方案 ,将许过小的图片组合在一起,使用css定义背景属性,来控制图片的显示位置和方式。

当页面加载时,不是加载每个但以图片,而是一次加载整个组合图片。这是一个了不起的改进,它大大减少了HTTP请求的次数,减轻服务器压力,同时缩短了悬停加载图片所需要的时间延迟,使效果更流畅,不会停顿。

CSS Sprites用在哪里?

CSS Sprites可以用在很多场合,大字那个网站可以将许多单独的图片,以有机的方式组合起来,从而使其便于维护和更新。图片之间通常会留出较大的空白,使 得图片不会影响网页的内容。但同时CSS Sprite大多使用于较固定的像素定位中,它的弹性较差,收到定位等因素的制约。所以,你需要在可维护性vs降低负载之间权衡利弊,选择最适合你的项目 的方式。

下面是一些CSS Sprites的使用范例:

Xing

这个网站将一些按钮、图标以及LOGO做成了CSS Sprites:

Screenshot

Amazon
亚马逊使用的大幅、整齐巧妙的CSS Sprites:

Screenshot

Apple
苹果网站使用CSS Sprites来制作导航菜单的鼠标悬停效果:

Screenshot

YouTube
YouTube使用了一个2008像素高的CSS Sprites:

Screenshot

CNN
CNN使用了非常简单谨慎的方案:

Screenshot

Digg
Digg的方案比较复杂:

Screenshot

Yahoo
Yahoo将他们漂亮的图标等距离排布起来:

Screenshot

Google
Google使用了极其简化的方案:

Screenshot

Dragon Interactive
一个丰富多彩的CSS Sprites方案:

Screenshot

TV1.rtp.pt
一个很大很酷的CSS Sprites方案

Screenshot

CSS Sprites常用来合并频繁使用的图形元素,如导航、LOGO、分割线、RSS图标、按钮等。通常它们不会作为网页内容出现,因为涉及内容的图片并不是每个页面都一样。

关于CSS Sprites的文章

CSS Sprites: Image Slicing’s Kiss of Death

中文版 http://www.liquidroc.name/post/my_view_on_css_sprites.html

最权威的CSS Sprites介绍文章之一

Screenshot

CSS Sprites: What They Are, Why They’re Cool And How To Use Them
一片图文并茂的介绍文章

Screenshot

How Yahoo.com and AOL.com Improve Web Performance With CSS Sprites
介绍Yahoo、AOL等网站使用CSS Sprites降低服务器压力的案例。

What Are CSS Sprites?
又一片介绍文章

Screenshot

Sprite Optimization
Dave Shea的思考:是不是真的有必要简历复杂的大型CSS Sprites?答案是不!不要搞得太复杂,找到一个折中的方案才是正道。

CSS Sprites

Creating Easy and Useful CSS Sprites

一篇教程,其源文件可下载学习

Screenshot

Fast Rollovers Without Preload

一个快速翻转效果的例子

Screenshot

CSS Sprites + Rounded corners

另一个例子:使用CSS Sprites实现背景圆角

Screenshot

CSS Image Sprites

一篇教程

Optimize Your Website Using CSS Image Sprites

非常详细的教程,介绍了CSS Sprites的原理和应用方法。

Screenshot

Animated GIF For CSS Sprites

一个比较特别的应用

Screenshot

Image Sprite Navigation With CSS

怎样制作简单的悬停菜单效果

Screenshot

Advanced CSS Menu

还是悬停效果

Screenshot

Creating and Using CSS Sprites

一个非常基本的教程

CSS Sprites Screenshot

CSS Sprites视频教程

How to Use CSS Sprites
David Perel解释了CSS Sprites的基本概念,并演示了如何在网页中使用它,长度:10分钟

Creating Rounded Buttons With CSS Sprites
继续上面的教程,展示了如何制作滑动按钮

Exactly How to Use CSS Sprites
Andres Fernandez  展示了 CSS sprites如何加快加载时间和减少请求次数

How To Use CSS Sprites
Chris Coyier 展示了一个 CSS sprites的范例,他将8幅图片组合在了一起,并且使用jQuery制作了一个小程序。

Faster Page Loads With Image Concatenation
对于复杂的网站,减少图片请求数量可以减轻服务器负担,这是许多站长所希望看到的。

CSS Image Sprites In 10 Minutes
另一个关于导航菜单的教程

CSS: Using Percentages in Background-Image
介绍背景图片定位的方法

 

利用CSS Sprites制作图像映射(image maps)

使用CSS Sprites,你可以对一个对象的一小部分加载翻转效果,使用负值的背景图片位置( background-position ),你可以创建基于CSS的图像映射,下面的文章讲述了这一技术:

CSS Image Maps Using Sprites
一个基于CSS的图像映射的简单例子。你可以同传统的方式对比一下优劣。

Screenshot

City Guide Map Using Sprites
另一个横向定位的例子

Screenshot

Advanced Map Using Sprites
一个更高级的技术。

Screenshot

CSS Sprites技术

CSS Sprites 2
Dave Shea 使用jQuery扩展了经典的CSS Sprites, 他的技术可以让不同的链接之间使用组合图片,即使用户禁用了Javascript。

CSS Sprites2 Refactored: Building an Unobtrusive jQuery Plug-In
Joel Sutherland 制作的jQuery插件,整理了Dave Shea的功能,并简化了初始化设置。

CSS Sprites Screenshot

Background Repeat and CSS Sprites
什么情况下使用CSS Sprites

CSS Sprite: Photoshop Script Combines Two Images for CSS Hover
这是一个可以导入Photoshop的动作设置,可以让你快速制作翻转按钮的背景图片。

CSS Sprites Screenshot

Extending CSS Spriting
Jennifer Semtner 扩展了经典CSS Sprites技术,并讲述应该在什么时候使用它。

Sliding Doors Meets CSS Sprites
滑动门技术 “Sliding Doors of CSS.”

How to Preload Images When You Can’t Use CSS Sprites
如何处理CSS Sprites对网页内容的影响

JavaScript Sprite Animation Using jQuery
Alex Walker 结合CSS Sprites和jQuery,实现了“打开页面”的效果

CSS Sprites Screenshot

IE6, CSS Sprites and Alpha Transparency
Julien Lecomte 讲述IE6下的透明hack问题

CSS Sprite 制作工具

Data URI Sprites
DURIS (Data URI [CSS] Sprites) 是一个管理网页图片的新工具,它可以最大限度的帮助你减少背景图片的数量,减少请求数。

Screenshot

Spritr
一个生成CSS Sprites的简单工具

Sprite Creator 1.0
同上

CSS Sprite Generator
制作CSS sprites 的Drupal插件

CSS Sprites Generator
这个工具允许你上传多张图片生成CSS Sprites和CSS代码

Projekt Fondue CSS Sprite Generator
它具有忽略重复图像,调整图像精度,确定横向和纵向偏移,指定背景色和透明度,指定CSS前缀等众多功能。

Screenshot

SmartSprites
基于java的桌面程序

你可以继续以你自己的方式编写CSS和使用图像,有一个工具可以自动为你设置CSS Sprites,这里是PHP 版本 ,它是开源的,具体可以看: Chris Brainard’s Sprite Creator 1.0.

 

附:CSS属性background-position(图像背景位置)该如何设置

background-position(图像背景位置)这个属性是CSS中非常重要的属性。

根据CSS规范,background-position属性包含了两个(可选的)变量:水平位置(horizontal)和垂直位置(vertical),例如:

  1. .introduction {  
  2.     background-imageurl(bg.gif);  
  3.     background-position: [horizontal position] [vertical position];  
  4.     }  
	.introduction { 		background-image: url(bg.gif); 		background-position: [horizontal position] [vertical position]; 		}

使用这个属性,你可以定义块级元素的背景图像位置,可以使用%百分比或px像素为单位来定义图像开始的位置,也可以使用关键字:top left, top center, top right, center left, center center, center right, bottom left, bottom center, bottom right.

在“ background-position: x% y%;  ”这样一个语句中,x%指水平偏移,y%指垂直偏移,左上角是:0%,0%,右下角是:100%,100%,默认的是50%。

例如,你可以这样定义:

  1. ul li {  
  2.     background-imageurl(bg.gif);  
  3.     background-position19px 85px;  
  4.     },  
	ul li { 		background-image: url(bg.gif); 		background-position: 19px 85px; 		},

这样背景图片就被定位到了距离左侧19像素,距离上边85像素。

关于这个属性,可以在这里找到更详细的资料:background-position (CSS property)

 

英文原文:Smashing Magazine
中文翻译:Oncoding编码营

来自: yeeyan
17
0
评论 共 12 条 请登录后发表评论
12 楼 fengzhiyu_sh 2009-07-31 09:15
好文! 感谢作者的分享~~~  
11 楼 crazycode 2009-05-03 22:38
要是有一个脚本工具自动把图片合并起来,并修改所有CSS内容就好了。
10 楼 Snow_Young 2009-05-01 18:14
嗯,其实css sprites提出前就已经在游戏制造界广泛使用了,当时用就是直译叫精灵层的,现在用css sprites也是得心应手。
9 楼 sefcertyu 2009-05-01 14:31
这样做可以提高网站的性能
8 楼 whaosoft 2009-05-01 09:51
不错的好东西啊
7 楼 cwdqcdsg95 2009-05-01 09:42
不错,有点意思
6 楼 caiceclb 2009-05-01 09:40
这...不算新闻的吧...
5 楼 taya 2009-05-01 07:18
改个小图片的话是不是等于要用户整个大图片重新下载一次?
4 楼 tryonmind 2009-05-01 01:31
呵呵 谢了
之前在腾讯网上见到做的很漂亮的小图像保存下来,结果发现保存你后的竟是集合了好多小图的一张大图片,很是纳闷,现在明白了。
3 楼 genki 2009-04-30 17:50
好文,,很有用.
2 楼 inosin 2009-04-30 15:59
百十张图片放在一个里面,维护起来不是一般的麻烦啊~
1 楼 desire 2009-04-30 15:54
好东西啊,收下了!

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 解密CSS Sprites的使用技巧及经典实例

     CSS Sprites并没有一个确定的中文翻译,通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术,目前它已经在网页开发中发展得较为成熟。CSS Sprites并不是什么金科玉律,但在很...

  • html&css&浏览器相关面试题大全

    html css 浏览器面试题

  • 前端三剑客(html、css、js)面试题

    CSS Sprites   CSS Sprites是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去。利用CSS的“background-image”,“background- repeat”,“background-position”的组合...

  • 前端面试题整理(vue/js/css)

    什么是盒子模型 把所有的网页元素都看成一个盒子,它具有content,padding,border,margin 四个属性,这就是盒子模型 ...怪异模式,总宽度= width + margin(左右)(即width已经包含了padding和border...

  • html + css 面试

    ‘流’是css的一种基本定位和布局机制,HTML默认的布局机制就是’流布局’,是一种自上而下(例如块级元素div),从左到右排列的布局方式 盒模型 两种类型 & 区别 IE盒模型(怪异盒模型) W3C盒模型(标准...

  • 常见的前端考试面试题目【vue,react,css,six】

    严格模式是 ECMAScript 5 引入的一种 JavaScript 执行模式,它强制执行一些更严格的语法和行为规则,以提高代码的安全性和可靠性。变量必须先声明再使用,否则会抛出错误。禁止使用 with 语句。禁止删除不可删除的...

  • 浏览器htmlcss面试题

    浏览器/html/css面试题 持续更新 1.什么是盒模型 盒模型是规定了网页元素如何显示,元素间的相互关系。 盒模型的组成为分为以下几个部分: content(内容区):元素的宽和高; border(边框区):盒子的边缘; ...

  • html+css常见面试问题汇总

    标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索机率、使用外链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维护...

  • 前端经典面试题 ( 20道前端面试题包含 JS、CSS、vue、Es6、浏览器、网络等)

    1、什么是防抖和节流?有什么区别?如何实现? 参考答案 防抖 触发 高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 思路: 每次触发事件时都取消之前的延时调用方法 &...

  • 【深入理解JS核心技术】3. 调用、应用和绑定有什么区别

    5月1/31call, apply, bind之间的区别:call()方法调用一个给定this值和参数一一提供的函数。var person = { lastName: '哪吒' }; function invite(greeting1, greeting2) { console.log( greeting1 + " " + this....

  • 前端经典面试题(60道前端面试题包含JS、CSS、React、网络、浏览器、程序题等)

    1、什么是防抖和节流?有什么区别?如何实现? 参考答案 防抖 触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 思路: 每次触发事件时都取消之前的延时调用方法 function ...

  • 前端视频学习(九、HTML5+CSS3)

    3. CSS3新增选择器和样式 3.1 新增选择器——属性、伪类、伪元素 属性选择器 兄弟伪类 —— +, ~ 相对父元素的伪类 伪元素选择器 —— ::before, ::after 3.2 颜色设置 rgba HSLA 透明度对比 3.3 盒模型——box-...

  • 前端html+css+js面试题

    对Web标准的理解(结构、表现、行为)、浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、盒模型、 Hack、CSS预处理器、CSS3、Flexbox、CSS Modules、Document flow、...

  • 2021前端面经-看这篇就够了(笔者靠这个拿到阿里和字节的offer)

    性能评级工具(PageSpeed 或 YSlow) css CSS优化、提高性能的方法有哪些 多个css合并,尽量减少HTTP请求 将css文件放在页面最上面 移除空的css规则 避免使用CSS表达式 选择器优化嵌套...

  • 前端开发面试题——CSS篇

    原文地址:...看全部问题和答案点这里 本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习、透彻学习,形成自己的知识

  • jQuery web工具集

    利用CSS Sprites技术和少量jQuery代码实现鼠标移到图片上,能够让图片变成灰白色,移开后还原。 Greyscale Hover Effect w/ CSS & jQuery Image inFrame: Keep Demos Inside the Page with jQuery 利用jQuery在同一...

  • 菜鸟教程中的面试题总结

    前端开发面试题分类编程技术本文收集总结了一些前端...前端还是一个年轻的行业,新的行业标准, 框架, 库都不断在更新和新增,正如赫门在2015深JS大会上的《前端服务化之路》主题演讲中说的一句话:"每18至24个月...

  • 常用jQuery web工具集6

    利用CSS Sprites技术和少量jQuery代码实现鼠标移到图片上,能够让图片变成灰白色,移开后还原。 Greyscale Hover Effect w/ CSS & jQuery Image inFrame: Keep Demos Inside the Page with jQuery ...

  • yolo算法-电线杆数据集-1493张图像带标签-.zip

    yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip

  • yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip

    yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip;yolo算法-电线杆数据集-7255张图像带标签-杆顶.zip

Global site tag (gtag.js) - Google Analytics