文章标签 ‘背景’ 的存档
-
背景定位之CSS Sprites的一些技巧
众所周知,减少网站加载时间的最有效的方式之一就是减少网站的HTTP请求数。实现这一目标的一个有效的方法就是通过CSS Sprites——将多个图片整合到一个图片中,然后再用CSS来定位。
下面是一张样图:

本文的目的并不是讲CSS Sprite如何让一个网站更快,而是说一些使用CSS Sprite的时候的一些最佳实践。
不要等到你完成切片之后才开始sprite.
如果你边切图边写CSS,然后等你完成了整个网站之后再来拼接这些图片到一个Sprite中,你就不得不完全重写你的CSS,你也必须要花费很多的时间来用PS拼接大量的图片——这是件令人倍感纠结的事情。但是如果边切图边整合,就会比较容易些。
把图片放到它要显示的地方的相对的地方
这个小技巧貌似比较难理解。我直到创建一个比较大的sprite的时候才理解到这一点。比如,如果我们希望一个图片出现在一个元素的左侧:

将那个图片放到sprite图片的右边(本文开始的那个sprite图片)。这样的话,当你通过CSS移动背景图片的位置的时候,基本上不可能有其它的小图片意外的出现在它的附近。使用Sprite的时候常常遇到的一个问题是图片会出现在它不该出现的位置。
定位时避免使用bottom或right等
当使用CSS sprite的时候,只用background-position: bottom -300px或background-position: right -200px;非常容易。这刚开始的时候是可行的,但是问题是,当你在宽度上或高度上扩展相关sprite图片的时候,原先设置的位置可能是错的,因为那个图片已经不再Sprite图片的底部或右部了。使用确切的位置来避免这个问题。
给每个图片足够的空间
就像你在本文顶部的实例图片看到的那样,那些小图片都被预留了足够的空间。为什么不把他们塞到一块来让sprite图片更小呢? 因为使用这些图片的元素通常都会有大量的内容而且可能会需要扩展的间距,以至于其它图片不会意外出现。
例子:

例子中的每个条目都有个带数字的图片作为背景图片。如果你仔细看了上面的那张图片,你可以看到这三个数字图片是如何错开排列的,这样如果内容增多,其它图片就不会意外出现。
不用担心Sprite图片的像素大小
如果你的网站经过良好的设计,那么你将会有一大堆的图片来整合进到sprite里面,这样你就需要你个非常大的sprite来恰当的放置这些图片。这是很不错的。sprite里的空白不会占用太多的文件大小。
-
续CSS背景定位实战应用
实战前先让大家了解下,浏览器对不同形式引用的图片请求时怎么样的。
1. 隐藏图片
《img src=“1.jpg” style=“display: none” /》
结论:只有Opera不产生请求。
注意:用visibility: hidden隐藏图片时,在Opera下也会产生请求。
2. 重复图片
《img src=“1.jpg” /》
《img src=“1.jpg” /》
结论:所有浏览器都只产生一次请求。
3. 重复背景
《style type=“text/css”》
.test1 { background: url(1.jpg) }
.test2 { background: url(1.jpg) }
《/style》
《div class=“test1”》test1《/div》
《div class=“test2”》test2《/div》
结论:所有浏览器都只产生一次请求。
4. 不存在的元素的背景
《style type=“text/css”》
.test1 { background: url(1.jpg) }
.test2 { background: url(2.jpg) } /* 页面中没有class为test2的元素 */
《/style》
《div class=“test1”》test1《/div》
结论:背景仅在应用的元素在页面中存在时,才会产生请求。这对CSS框架来说,很有意义。
5. 隐藏元素的背景
《style type=“text/css”》
.test1 { background: url(1.jpg); display: none; }
.test2 { background: url(2.jpg); visibility: hidden; }
《/style》
《div class=“test1”》test1《/div》
结论:Opera和Firefox对于用display: none隐藏的元素背景,不会产生HTTP请求。仅当这些元素非display: none时,才会请求背景图片。
6. 多重背景
《style type=“text/css”》
.test1 { background: url(1.jpg); }
.test1 { background: url(2.jpg); }
《/style》
《div class=“test1”》test1《/div》
结论:除了基于webkit渲染引擎的Safari和Chrome,其它浏览器只会请求一张背景图。
注意:webkit引擎浏览器对背景图都请求,是因为支持CSS3中的多背景图。
7. hover的背景加载
《style type=“text/css”》
a.test1 { background: url(1.jpg); }
a.test1:hover { background: url(2.jpg); }
《/style》
《a href=“#” class=“test1”》test1《/a》
结论:触发hover时,才会请求hover状态下的背景。这会造成闪烁,因此经常放在同一张背景图里通过翻转来实现。
注意:在图片no-cache的情况下,IE每次hover状态改变时,都会产生一次新请求。很糟糕。
8. JS里innerHTML中的图片
《script type=“text/javascript”》
var el = document.createElement(‘div’);
el.innerHTML = ‘《img src=“1.jpg” /》’;
//document.body.appendChild(el);
《/script》
结论:只有Opera不会马上请求图片。
注意:当添加到DOM树上时,Opera才会发送请求。
9. 图片预加载
最常用的是JS方案:
《script type=“text/javascript”》
new Image().src = ‘1.jpg’;
new Image().src = ‘2.jpg’;
《/script》
在无JS支持的环境下,可以采用隐藏元素来预加载:
《img src=“1.jpg” style=“visibility: hidden; height: 0; width: 0” /》
总结
对于隐藏图片和隐藏元素的背景,Opera不会产生请求。
对于隐藏元素的背景,Firefox也不会产生请求。
对于尚未插入DOM树的img元素,Opera不会产生请求。
基于webkit引擎的Safari和Chrome,支持多背景图。
其它情景,所有主流浏览器保持一致。
对图片请求的处理上,个人觉得Opera走在前列。
—————————————————————————————————————————
以上总结了那么多,主要的一点,是让大家明白,浏览器请求一张图片的速度,比请求多张要快,大大提高页面下载速度。所以,我们可以把页面用到的所有图片放在一张大的透明图上面,通过css里面的background位移来定位图片。
先看下实例:
QQ腾讯官网:

网易163:

新浪博客:

以上官网都是利用了背景图片定位技术。
看看他们怎么实现的。
/*
#def div,#s1 div,#s2 div,#s3 div,#s4 div,#s5 div,#s6 div,#s7 div,#s8 div,#s9 div,#sar div
{background-image:url(http://mat1.gtimg.com/www/iskin09/skinbt.png);background-repeat:no-repeat;}
#def div{background-position:0 0;}
#s1 div{background-position:0 -11px;}
#s2 div{background-position:0 -22px;}
#s3 div{background-position:0 -33px;}
#s4 div{background-position:0 -44px;}
#s5 div{background-position:0 -55px;}
#s6 div{background-position:0 -66px;}
#s7 div{background-position:0 -77px;}
#s8 div{background-position:0 -88px;}
#s9 div{background-position:0 -99px;}
*/参考“CSS背景属性Background详解”
写个demo给大家看看。。
演示效果:
只看代码:

欢迎转载:注明出处,”UED,紫枫-80後” ,珍惜他人的劳动成果!^-^
-
CSS背景属性Background详解
css2 中的背景(background)
CSS2 中有5个主要的背景(background)属性,它们是:
background-color: 指定填充背景的颜色。
background-image: 引用图片作为背景。
background-position: 指定元素背景图片的位置。
background-repeat: 决定是否重复背景图片。
background-attachment: 决定背景图是否随页面滚动。这些属性可以全部合并为一个缩写属性: background。需要注意的一个要点是背景占据元素的所有内容区域,包括 padding 和 border,但是不包括元素的 margin。它在 Firefox, Safari ,Opera 以及 IE8 中工作正常,但是 IE6 和 IE7 中,background 没把 border 计算在内。

基本属性
背景色(background-color)
background-color 属性用纯色来填充背景。有许多方式指定这个颜色,以下方式都得到相同的结果。
background-color: blue;
background-color: rgb(0, 0, 255);
background-color: #0000ff;background-color 也可被设置为透明(transparent),这会使得其下的元素可见。
背景图(background-image)
background-image 属性允许指定一个图片展示在背景中。可以和 background-color 连用,因此如果图片不重复地话,图片覆盖不到地地方都会被背景色填充。代码很简单,只需要记住,路径是相对于样式表的,因此以下的代码中,图片和样式表是在同一个目录中的。
background-image: url(image.jpg);
但是如果图片在一个名为 images 的子目录中,就应该是:
background-image: url(images/image.jpg);
背景平铺(background-repeat)
设置背景图片时,默认把图片在水平和垂直方向平铺以铺满整个元素。这也许是你需要的,但是有时会希望图片只出现一次,或者只在一个方向平铺。以下为可能的设置值和结果:
background-repeat: repeat; /* 默认值,在水平和垂直方向平铺 */
background-repeat: no-repeat; /* 不平铺。图片只展示一次。 */
background-repeat: repeat-x; /* 水平方向平铺(沿 x 轴) */
background-repeat: repeat-y; /* 垂直方向平铺(沿 y 轴) */
background-repeat: inherit; /* 继承父元素的 background-repeat 属性*/
背景定位(background-position)background-position 属性用来控制背景图片在元素中的位置。技巧是,实际上指定的是图片左上角相对于元素左上角的位置。
下面的例子中,设置了一个背景图片并且用 background-position 属性来控制它的位置,同时也设置了 background-repeat 为 no-repeat。计量单位是像素。第一个数字表示 x 轴(水平)位置,第二个是 y 轴(垂直) 位置。/* 例 1: 默认值 */
background-position: 0 0; /* 元素的左上角 *//* 例 2: 把图片向右移动 */
background-position: 75px 0;/* 例 3: 把图片向左移动 */
background-position: -75px 0;/* 例 4: 把图片向下移动 */
background-position: 0 100px;
background-position 属性可以用其它数值,关键词和百分比来指定,这比较有用,尤其是在元素尺寸不是用像素设置时。
关键词是不用解释的。x 轴上:
* * left
* * center
* * righty 轴上:
* * top
* * center
* * bottom顺序方面和使用像素值时的顺序几乎一样,首先是 x 轴,其次是 y 轴,像这样:
background-position: top right;
使用百分数时也类似。需要主要的是,使用百分数时,浏览器是以元素的百分比数值来设置图片的位置的。看例子就好理解了。假设设定如下:
background-position: 100% 50%;
使用百分数定位时,其实是将背景图片的百分比指定的位置和元素的百分比位置对齐。也就是说,百分数定位是改变了背景图和元素的对齐基点。不再像使用像素和关键词定位时,使用背景图和元素的左上角为对齐基点。例如上例的 background-position: 100% 50%; 就是将背景图片的 100%(right) 50%(center) 这个点,和元素的 100%(right) 50%(center) 这个点对齐。

背景附着
background-attachment 属性决定用户滚动页面时图片的状态。三个可用属性为 scroll(滚动),fixed(固定) 和 inherit(继承)。inherit 单纯地指定元素继承他的父元素的 background-attachment 属性。
为了正确地理解 background-attachment,首先需要明白页面(page)和视口(view port)是如何协作地。视口(view port)是浏览器显示网页的部分(就是去掉工具栏的浏览器)。视口(view port)的位置固定,不变动。
当向下滚动网页时,视口(view port)是不动的,而页面的内容向上滚动。看起来貌似视口(view port)向页面下方滚动了。如果设置 background-attachment: scroll,就设置了当元素滚动时,元素背景也必需随着滚动。简而言之,背景是紧贴元素的。这是 background-attachment 默认值。
用一个例子来更清楚地描述下:
background-image: url(test-image.jpg);
background-position: 0 0;
background-repeat: no-repeat;
background-attachment: scroll;
当向下滚动页面时,背景向上滚动直至消失。
但是当设置 background-attachment 为 fixed 时,当页面向下滚动时,背景要待在它原来的位置(相对于浏览器来说)。也就是不随元素滚动。
用另一个例子描述下:
background-image: url(test-image.jpg);
background-position: 0 100%;
background-repeat: no-repeat;
background-attachment: fixed;
页面已经向下滚动了,但是图像仍然保持可见。
需要重视的一点是背景图只能出现在它父元素能达到的区域。即使图片是相对于视口(view port)定位地,如果它的父元素不可见,图片就会消失。参见下面的例子。此例中,图片位于视口(view port)的左下方,但是只有元素内的图片部分是可见的。
background-image: url(test-image.jpg);
background-position: 0 100%;
background-repeat: no-repeat;
background-attachment: fixed;
因为图片开始在元素之外,一部分图片被切除了。
背景的简写属性可以把背景的各个属性合为一行,而不用每次都单独把他们写出来。格式如下:
background:
例如,下面的声明
background-color: transparent;
background-image: url(image.jpg);
background-position: 50% 0 ;
background-attachment: scroll;
background-repeat: repeat-y;可以合为单独一行:
background: transparent url(image.jpg) 50% 0 scroll repeat-y;
而且不需要指定每一个值。如果省略值地话,就使用属性地默认值。例如,上面那行和下面这个效果一样:
background: url(image.jpg) 50% 0 repeat-y;
背景的一般用法
除了可以用来使元素更加优雅这类显然的用法之外,背景也可以用于其它的目的。
仿栏当使用 css 的 float 属性来定位布局元素时,要确保两栏或多栏有相同的长度是比较困难的。如果长度不同,其中一栏的背景会比另外的短,这会破坏整个设计。
仿栏是个非常简单的背景技巧,这个技巧最早发表在A List Apart 。思路很简单:不再给每列单独设置背景,而是给各列的父元素设置一个背景图。所有栏的设计都包含在这张图片之中。
文本替换在网页上,对于字体的选择是相当有限的。可以使用 sIFR 之类的工具来定制字体,但是这需要用户启用 JavaScript 。一个适用于任意浏览器的简单方法是,用想用的字体来做一张文本图片,并用这张图片作为背景。这样,文本依然出现在文档标记中以供搜索引擎检索和屏幕浏览 器识别,但是在浏览器中就会显示首选的字体。
例如,HTML 标记可能是这样的:
Blogroll
假如有一个 200 乘 75 的图片,上面有更好看的字体,就可以用如下方式来替换文本:
h3.blogroll {
width: 200px;
height: 75px; /* So that the element will show the whole image. */
background:url(blogroll-text.jpg) 0 0 no-repeat; /* Sets the background image */
text-indent: -9999px; /* Hides the regular text by moving it 9999 pixels to the left */
}简单的圆点
无需列表中的圆点看起来很难看。不用再处理所有不同的 list-style 属性,只需要简单地把他们隐藏并用背景图代替就可以了。因为图片可以随意选择,这些圆点就可以看起来更漂亮。
下面,我们把一个无需列表改造成有圆滑圆点的:
ul {
list-style: none; /* Removes default bullets. */
}ul li {
padding-left: 40px; /* Indents list items, leaving room for background image on the left. */
background: url(bulletpoint.jpg) 0 0 no-repeat;
}CSS3 中的背景
CSS3 中的背景有较多改进。最显著的是多背景图片的选项,同时也增加了4个新属性。
多背景CSS3 中,可以对一个元素应用一个或多个图片作为背景。代码和 css2 中的一样,只需要用逗号来区别各个图片。第一个声明的图片定位在元素顶部,其它的图片按序在其下排列,例如:
background-image: url(top-image.jpg), url(middle-image.jpg), url(bottom-image.jpg);
新属性:背景修剪(background-clip)
这又把我们带回了文章开始讨论的那个关于边框内图片显示的话题。它被描述为“背景描绘区”。
background-clip 属性用来增强背景显示位置的控制能力。可能的值为:
* background-clip: border-box;
背景显示在边框内。
* background-clip: padding-box;
背景显示在内补白(padding)内,而不是边框内。
* background-clip: content-box;
只在内容内显示背景,而不是内补白(padding)和边框内。
* background-clip: no-clip;
默认值,和 border-box 一样。新属性:背景原点(background-origin)
这个属性和 background-position 结合起来使用。可以从边框,内补白或者内容盒子开始计算 background-position (类似于 background-clip)。
* background-origin: border-box;
以边框为原点开始计算 background-position.
* background-origin: padding-box;
以内补白为原点开始计算 background-position
* background-origin: content-box;
以内容盒子为原点开始计算 background-position
对于 background-clip 和 background-origin 不同的一个解释参看 CSS3.info新属性: 背景尺寸(background-size)
background-size 用来调整背景图的大小。有好几个可能值:
* background-size: contain;
缩小图片来适应元素的尺寸(保持像素的长宽比)
* background-size: cover;
扩展图片来填满元素(保持像素的长宽比)
* background-size: 100px 100px;
调整图片到指定大小
* background-size: 50% 100%;
调整图片到指定大小。百分比是相对于包含元素的尺寸的。可以看一下 CSS3规则 网站上的几个例子。
新属性:(background-break)
CSS3 中,元素可以被分成几个独立的盒子(例如 使内联元素 span 跨越多行)。background-break 属性用来控制背景怎样在这些不同的盒子中显示。
可能值为:
* Background-break: continuous;
默认值。忽略盒之间的距离(也就是像元素没有分成多个盒子,依然是一个整体一样)
* Background-break: bounding-box;
把盒之间的距离计算在内
* Background-break: each-box;
为每个盒子单独重绘背景背景色(background-color)的改进
background-color 在 css3 中有了稍许改进。除了设置背景颜色之外,如果元素底层的背景图不可用,还可以设置一个“回退色”。
通过在回退色之前增加一个斜杠(/)来实现,例如:
background-color: green / blue;
此例中,背景色应该是绿色(green)。然而,如果底层背景图不能使用的话,背景色就是蓝色而不是绿色。如果在斜杠前不指定颜色,默认为透明(transparent)。
背景平铺(background-repeat)的改进CSS2中当图片平铺时,会被元素在末端截断。CSS3 引入了两个属性来修正这个问题:
* space: 应用同等数量的空白到图片之间,直到填满整个元素
* round: 缩小图片直到正好平铺满元素关于 background-repeat: space; 的一个例子,可以在 CSS3 规则网站看到。
背景附着(background-attachment)的改进background-attachment 属性增加了一个新值:local。这是用来配合可以滚动的元素的(设置为 overflow: scroll; 的元素)。当 background-attachment 设置为滚动(scroll)时,背景图不会随元素内容的滚动而滚动。
设置为 background-attachment :local; 时,背景图会随内容的滚动而滚动。
最近文章
- 设计师如何搜集资料?
- Google的设计原则
- Axure RP 快速原型制作软件 – 线框图,原型,规格文档
- SEO优化—挖掘关键词3大秘诀!
- 建新网站要做的四个SEO优化
- 教你如何让google baidu收录网站最快最多
- CSS Overflow属性详解
- CSS网页布局中易犯的10个小错误
- 网站结构设计之关键词群布局
- 使用CSS为图片添加的五种特殊效果
最近评论
- 问道推广员 在 当视觉设计师遇上产品经理、开发工程师 上的评论
- AileenFULTON23 在 当视觉设计师遇上产品经理、开发工程师 上的评论
- 物流服务 在 当视觉设计师遇上产品经理、开发工程师 上的评论
- 小区 在 当视觉设计师遇上产品经理、开发工程师 上的评论
- 色播 在 当视觉设计师遇上产品经理、开发工程师 上的评论
分类目录
- SEO (5)
- 互联网 (19)
- 免费模板 (1)
- CSS模板 (1)
- 前端技术 (25)
- CSS+HTML (16)
- JavaScript (1)
- Jquery (1)
- WAP (4)
- 用户体验设计(UED) (50)
- 紫枫生活 (10)
- 设计制作 (7)
- 设计杂谈 (37)
紫枫印迹
| 一 | 二 | 三 | 四 | 五 | 六 | 日 |
|---|---|---|---|---|---|---|
| « 三 | ||||||
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 | |||||
