css3:背景属性background-origin/clip详解

智能手机的出现让HTML5+CSS3有了一个全新的舞台去演绎。很多的单页面都应用到了css3的酷炫效果,所以捣腾一下webapp开发工具应该可以帮助自己了解一下相关知识。算是一个加分项么。。。

前面的几篇文章已经介绍了边框属性,那么今天我们正式来入手这个背景属性,css3中新增了3大属性,分别是背景裁剪(background- clip)、背景尺寸(background-size)、背景起点(background-origin),因为涉及到的知识点不是很多,所以在这里一 一写出来,算是整合吧。

背景裁剪 background-clip

先来说说背景裁剪属性clip,假如你看过前面的文章的话,那么你就会对裁剪属性有一丝了解。不过边框图片属性中是切片属性slice而非 clip,对于其含义,前者是用刀子随便切,后者是为了某个区域而裁剪额外的区域,比如说桌布,想把尺寸为1.2M*1M桌布正正方方地码在尺寸为 1M*1M的书桌上,那么必须用剪刀把多余的0.2M卡擦掉!而slice可不管你这么多,使出十八般武艺一道乱剪。先来看看clip的语法

属性名: background-clip
属性值: <box> [ , <box> ]*
初始值: border-box
应用于: 所有元素
继承性:
百分比: N/A
计算值: 根据指定

背景裁剪 background-clip确定了背景画布区域,对于box属性值,W3C这么解释:
<dfn id="box"><var><box></var></dfn> = border-box | padding-box | content-box>

语法解释:

1、border-box:背景图片或者颜色描绘区域延伸到边框边界,这是默认值

2、padding-box:背景图片或者颜色描绘区域只能在盒子padding区域

3、content-box:背景图片或者颜色描绘只能在内容区域起作用。

4、我们说过*这个符号就是前面的属性值可以重复一次也可以重复多次,假如重复多次必须要用 ”,”来隔开。

背景裁剪三个属性值的调用demo

只要记住对于背景裁剪background-clip都是基于盒子box来裁剪,分别在边框盒子、内边距盒子还有内容区盒子处裁剪。

背景图片原点background-origin

origin在英文的解释是起点,开端,起源,原点的意思,为了方便,我这里用了原点的意思。因为按照我的个人了解是这样:假如一张桌布想要改在桌 子上,那么就必须先确定桌布从桌子的哪个地方先盖的,这个就是桌布的原点。所以origin在这里的意思估摸应该就是这样。既然是这样,那么这个原点的地 方也跟背景裁剪属性clip一样分成三个盒子:border-box | padding-box | content-box

w3c对origin的语法如下:

属性名: background-origin
属性值: border-box | padding-box | content-box 
初始值: padding-box
应用于: 所有元素
继承性:
百分比: N/A
计算值: 根据指定

背景图片原点原点属性严格意义上来说是针对css中使用图片属性background-image的情况下使用的,因为只有引用了背景图片之后才能发挥其原点的微妙区别,不信待会看下demo你就会发现的。

语法解释

1、padding-box,这是它的默认值,于裁剪clip属性默认值有所不同。该值确定了背景相对填充框作为原点位置,并且拉伸整个元素padding盒子,即从左上角到右下角拉伸,整个背景被拉伸自适应元素的宽高,这点在有border-width的时候特别明显;

2、border-box,规定了背景图片原点位置相对边框盒子

3、content-box,规定了背景图片原地位置相对内容区盒子

远观不如近邻,请轻戳 背景图片原点demo

效果图如下:
css3:背景属性background-origin/clip详解_第1张图片

注意:
1.假如背景图片使用了 background-attachment:fixed 那么这个值是不起作用的,相对背景区就是初始包含块,也可以叫视觉窗口
2.假如 background-clip:padding-boxbackground-origin:border-boxbackground-position:top left(也就是初始位置),并且元素有一个非0数值边框宽度,那么左侧和顶部边框的图片会被裁剪。

/*第1点注意点*/
.im-com{
    padding:10px;
    background-image:url(http://img.xiaoho.com/mystar/mada4.jpg);
    background-position: top left;
}
.no-effect{
    background-attachment:fixed; /*使用了fixed,那么在origin就会失效*/ 
    background-origin:content-box;
}
.normal{background-origin:content-box;/*不使用fixed*/}

/*第2点注意点*/
.padding-box{
    background-image:url(http://img.xiaoho.com/mystar/mada4.jpg);
    background-position:top left; 
    background-origin:padding-box;
    border:10px #ccc;/*变宽宽度非负数,使用padding-box*/
    border-style:dashed dotted;
}
.border-box{
    background-image:url(http://img.xiaoho.com/mystar/mada4.jpg);
    background-position:top left;
    background-origin:border-box;
    border:10px #ccc;/*变宽宽度非负数,使用border-box*/
    border-style:dashed dotted;
}

远观不如近邻,请轻戳 背景图片原点2点注意

效果图如下:
css3:背景属性background-origin/clip详解_第2张图片

图片中画圈圈的地方就是第二点注意点,假如元素没有设置边框或者为透明边框,那么设置padding-box和border-box似乎看上去都是一样的,但是假如设置了一个非负的边框宽度,那背景图片的原点位置将会不一样,padding-box元素左上角为原点向右下角进类似拉伸,而 border-box 则是从元素边框开始作为起点位置。

后话

为什么要拿两个属性合成一个来说其实就是其属性值都是一样的,但是其所表达的不尽相同。不过真实用到的该属性的貌似确实有点少,除非是在射击湿非要在设计图上边框和背景分离开来,那可能确实需要用到该属性。

你可能感兴趣的:(css3:背景属性background-origin/clip详解)