背 景

Background images

在线示例

Updates to existing background properties

CSS3扩展了之前已存在的background属性。

background-position

设置背景的起始位置。
在CSS2.1中,background-position 属性接受两个值,如下:

background-position的值 描述
top/center/bottom left/center/right 如果您仅规定了一个关键词,那么第二个值将是"center"。
x% y% 第一个值是水平位置,第二个值是垂直位置。
左上角是 0% 0%。右下角是 100% 100%。 如果仅规定了一个值,另一个值将是 50%。
默认值:0% 0%。
xpos ypos 左上角是 0 0。单位是像素 (0px 0px) 或任何其他的 CSS 单位。
如果仅规定了一个值,另一个值将是50%。

CSS3中,此属性可以接受四个值,指定一个边,然后是距离此边的距离。

E { background-position: right 10em bottom 50%; }

background-attachment

background-attachment 属性,设置背景图片是否在浏览器窗口中滚动。

background-position的值 描述
scroll 默认值,元素的背景图片不会随元素的滚动条而滚动,但是随浏览器窗口的滚动条滚动
fixed 元素的背景图片不会随任何滚动条而滚动
local CSS3中新增的值,元素的背景图片不仅会随元素的滚动条而滚动,还会随浏览器窗口的滚动条滚动

background-repeat

background-repeat 属性设置背景图片在水平和垂直方向如何排列。
CSS3中新增了 spaceround 两个值。 Safari和Friefox目前还不支持这两个值。

background-repeat的值 描述
repeat 默认,背景图像将在垂直方向和水平方向重复
repeat-x 在水平方向重复
repeat-y 在垂直方向重复
no-repeat 背景图像将仅显示一次
space 背景图片在不被元素clip的情况下的最大重复次数。然后按照这个次数,背景图片均匀分布在元素中。水平和垂直方向均是如此
round 背景图片在元素中显示的最大重复次数,然后按照这个数的约数来显示,并且拉伸铺满元素空间。比如水平方向显示了2.6个图片,那么这个数就是3
div {
    border: 1px solid gray;
    background-image: url(samo.jpg);
    background-size: 65px auto;
    height: 260px;
    float: left;
    width: 296px;
    margin-left: 30px;
}
.space{  background-repeat: space; }
.round{  background-repeat: round; }
<div class="repeat"></div>
<div class="space"></div>
<div class="round"></div>

尝试手动改变div的width或height,来观察round时显示的图片个数。


background-repeat 还可以同时接受两个属性,第一个值控制水平方向,第二个值控制垂直方向。

E { background-repeat: round space; }

Multiple background images

CSS3允许为同一个元素设置多个背景图片,background-*系列的属性可以接受多个值,除了background-color,此属性只会被设置到最下面那层背景图上,也只接受一个值,即使有多个背景图片。

E { background-image: value, value; }

每一个背景图片都可以设置其他对应的background-*属性。第一个图片在最上层,第二个在下层。

div{
    height: 600px;
    border: 1px solid;
    background-image: url(samo.jpg), url(grass.jpg);
    background-position: left center, 0% 0%;
    background-size: auto 100px, auto;
    background-repeat: no-repeat; /*当一个属性的值少与背景图片的个数,那么这个或这些值会被循环使用*/
}


以上的样式可以用background 来缩写,等价于:

background: url("samo.jpg") no-repeat left center, url("grass.jpg") no-repeat 0% 0%;
background-size: auto 100px, auto; /* 注意background-size如果写入到缩写属性中,要跟在background-position之后,并用`/`间隔开,后面例子会展示用法*/

如果此时要设置背景颜色,由于background-color 属性只接受一个值,所以只能在最后一个背景图层设置背景颜色,否则属性值非法。

background: url("samo.jpg") no-repeat left center, url("grass.jpg") no-repeat 0% 0% lightblue; /*只能在最后一个图层设置背景颜色*/
background-size: auto 100px, auto;

Dynamically scaled background images

前面的例子已经使用了background-size 属性,他是CSS3新加入的属性,用来设置背景图片的大小。

E { background-size: value; }
E { background-size: width height; }

其属性值可以是一个或一对 长度值/百分比,还可以是一个关键字。

background-size的值 描述
length 第一个值设置宽度,第二个值设置高度。如果只设置一个值,则第二个值会被设置为 "auto"
percentage 以父元素的百分比来设置背景图像的宽度和高度。如果只设置一个值,则第二个值会被设置为 "auto"。
cover 把背景图像扩展至父元素宽度或高度的最大值。背景图像的部分可能会超过父元素区域
contain 把图像图像扩展至最大尺寸,但是不能超过其父元素的宽度或高度

下面来看 covercontain 的区别:

<div class="contain"></div>
<div class="cover"></div>
div{
    height: 300px;
    width: 200px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    background: url("samo.jpg") no-repeat left center;
}
.contain{background-size: contain}
.cover{background-size: cover}

效果如下图,
左边是 contain 效果,可以看到当图片等比例扩展到高度边界时,还没有到达其宽度边界,但是此时图片不会再扩展了。
右边是 cover 效果,当图片等比例扩展到高度边界时,还没有到达其宽度边界,此时图片仍然会继续扩展,直到不能再扩展(就是到达其宽度边界)了。

Background clip and origin

CSS3提供了两个新的属性:
background-clip 属性规定背景(背景图片或背景颜色)的绘制区域,默认值是 border-box
background-origin 属性规定** background-position 属性相对于什么位置来定位**,默认值是 padding-box

他们的属性值相同,都是关键字: border-box, content-box, padding-box

E { background-clip: box; } /*默认值是border-box*/
E { background-origin: box; } /*默认值是padding-box*/

下面来看background-clip 的示例:

<div class="border"></div>
<div class="padding"></div>
<div class="content"></div>
div{
    height: 200px;
    width: 100px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    background: url("samo.jpg") no-repeat center center / 200px auto; /*background-size紧跟在background-position之后,并用`/`间隔开*/
    border: 20px solid rgba(173,216,230,.3); /*这里设置了颜色透明*/
    padding: 20px;
}
.border{background-clip: border-box;}
.padding{background-clip: padding-box;}
.content{background-clip: content-box;}

颜色透明可参考http://www.jianshu.com/p/b91306268fe2

三种背景的绘制区域,依次是border-box, padding-box, content-box

下面来看background-origin 的示例,还使用同样的HMTL,样式修改如下:

div{
    height: 200px;
    width: 100px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    background: url("samo.jpg") no-repeat left top / 100px auto;
    border: 20px solid rgba(173,216,230,.3);
    padding: 20px;
}
.border{background-origin: border-box;}
.padding{background-origin: padding-box;}
.content{background-origin: content-box;}

可以看到背景分别从不同的位置开始定位,background-origin 就是用来设置background-position 的起始位置的。

Updated background shortcut

前面提到了background缩写属性,下面来完整总结下:

background: background-color background-image background-repeat background-attachment background-position / background-size background-origin background-clip

值都是可选的,background-originbackground-clip由于值相同,可以只设置一个值,那么这两个属性就有相同的值,如果设置两个,第一个是background-origin,第二个是background-clip
还用前面的HMTL,修改样式为如下:

div {
    height: 200px;
    width: 100px;
    border: 1px solid;
    float: left;
    margin-left: 20px;
    border: 20px solid rgba(173, 216, 230, .3);
    padding: 20px;
}
.border { background: url("samo.jpg") no-repeat left top / 160px auto content-box; }
.padding { background: url("samo.jpg") no-repeat left top / 160px auto content-box padding-box; }
.content { background: url("samo.jpg") no-repeat left top / 160px auto content-box border-box; }

此文是对《The Book of CSS3 2nd edition》第8章的理解和归纳,方便以后查阅。
感谢其作者Peter Gasston !

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    wzhiq896阅读 1,722评论 0 2
  • 选择qi:是表达式 标签选择器 类选择器 属性选择器 继承属性: color,font,text-align,li...
    love2013阅读 2,298评论 0 11
  • 1、属性选择器:id选择器 # 通过id 来选择类名选择器 . 通过类名来选择属性选择器 ...
    Yuann阅读 1,604评论 0 7
  • CSS3对background新加了3个属性,background-origin、background-clip、...
    彬_仔阅读 1,504评论 0 9
  • background应该是CSS里使用频率颇高的属性,简单实用。但参数偏多,本篇就介绍一下background的各...
    张歆琳阅读 4,250评论 4 26