CSS3 Background-origin
Background-origin是CSS3为Background扩展的第三个属性,从Background-origin字面上不难发现是指背景图片的原点,其实background-origin主要就是用来决定背景图片的定位原点,换句话说就是背景图片定位的起点(background-position的原点)如果你看过了《CSS3 background-clip》一文,你不难发现,元素Background中的background-color原点位置是在Border的外边缘处,而background-image的原点是在元素的padding外边缘处(也就是在元素border的内边缘处),下面一起重新看看在《CSS3 background-clip》中所展示的background模型图:

上图展示的是元素默认时的背景图像原点位置,那我们如休何使用background-origin来改变背景图片的position位置呢?想知道答案的就一起接着往下看吧:
语法:
background-origin在早期的Webkit和Gecko内核浏览器(Firefox3.6-,Safari和Chrome代版本)他们都支持一种老式的语法规则,类似于background-clip在Firefox3.6以下的版本一样
background-origin: padding || border || content
那么在那些现代浏览器都支持的是一种新的语法
background-origin: padding-box || border-box || content-box
为了兼容新老版本的浏览器,在使用background-origin改变background-position的原点位置时,最好老旧语法一起加上,并且新语法放在老语法后面,这样只要是支持新语法规则的浏览器就自动会识别background-origin的最新语法
background-origin: padding || border || content
background-origin: padding-box || border-box || content-box
取值说明:
1、padding-box(padding):此值为background-origin的默认值,决定background-position起始位置从padding的外边缘(border的内边缘)开始显示背景图片;
2、border-box(border):此值决定background-position起始位置从border的外边缘开始显示背景图片;
3、content-box(content):此值决定background-position起始位置从content的外边缘(padding的内边缘)开始显示背景图片;
有一点需要提出,在IE8以下版本解析是不一样的,在IE7以下版本background-origin默认是从border开始显示背景图片。
兼容浏览器:

background-origin虽然现代浏览器都支持,但在不同内核浏览器下还是需要带上其各自的前缀,这样在实际应用中最好按下面的语法规则书写,以保证只要支持background-origin的都能正常运行:
/*Old Webkit and Gecko*/
-moz-background-origin: padding || border || content;
-webkit-background-origin: padding || border || content;
/*New Webkit and Gecko*/
-moz-background-origin: padding-box || border-box || content-box;
-webkit-background-origin: padding-box || border-box || content-box;
/*Presto*/
-o-background-origin: padding-box || border-box || content-box;
/*W3c标准*/
background-origin: padding-box || border-box || content-box;
上面主要介绍了background-origin相关方面的理论知识,下面我们同样针对background-origin的三个属性值padding-box,border-box,content-box在实际应用中对background-position有哪些影响。
先给他们创建一个Demo:
<div class="demo"></div>
加上基本的CSS样式
.demo {
font-size: 16px;
font-weight: bold;
color: red;
width: 220px;
height: 80px;
padding: 20px;
border: 20px dashed rgba(255,0,0,0.8);
/*加上背景图片,并且把背景色设置为green*/
background: green url("../images/background-origin-bg.png") no-repeat;
}
现在我们给这个demo加上了一个背景图片,并且设置了其背景颜色为green,大家都知道这个Demo中的background-position为left top(0% 0% 或者 0 0),有关这方面详细介绍可以参考《CSS Background-size》一文中的background-position部分,这里不在花时间陈述。现在回到本节的正题上来,先看这个demo的最初效果吧:

一、background-origin:padding-box
首先来看padding-box的应用,在前面的Demo基础上,给这个Demo加上background-origin:padding-box,具体如下所示
.paddingBox {
-moz-background-origin: padding;
-webkit-background-origin: padding;
-moz-background-origin: padding-box;
-webkit-background-origin: padding-box;
-o-background-origin: padding-box;
background-origin: padding-box;
}
效果:

看到效果后有些人一定会问,怎么和当初效果一样,没有任何效果变化呢?细心的你要是仔细看了前面的内容,你一定不会这样问,因为padding-box是background-origin的默认值 ,也就是说background-origin:padding-box就是使用background-position的起点在"left top"位置处,也是background-position的默认值。从而也就没有任何的变化。
二、background-origin:border-box
同样的方法,基于上面的demo,只是把相应的background-origin属性值改成border-box
.borderBox {
-moz-background-origin: border;
-webkit-background-origin: border;
-moz-background-origin: border-box;
-webkit-background-origin: border-box;
-o-background-origin: border-box;
background-origin: border-box;
}
效果:

现在效果明显变化了,背景图片从刚才的padding外边缘移动到了border的外边缘,其实background-position并没有改变,依旧是left top;但是background-origin把background-position的原点位置改变了,从当初的padding外边缘移动到了border的外边缘。在background-origin属性还没有出现时,做这样的效果,都是通过改变background-position的值,就拿这个例子来说吧,我们边框的20px的大小,那么需要把背景图片从边框的外边缘处开始的话,那只有改变background-position的初始值,也就是变成background-position:-20px -20px;如此一来,background-origin取值为border-box等于把background-position变成了负的边框宽度:
background-origin: border-box;
等于把
background-position: left top;
变成了
background-position: 一(左边框宽度) -(顶边边框宽度);
三、content-box
content-box是background-origin最后一个属性值,同样在前面的Demo基础上把background-origin的值换一下:
.contentBox {
-moz-background-origin: content;
-webkit-background-origin: content;
-moz-background-origin: content-box;
-webkit-background-origin: content-box;
-o-background-origin: content-box;
background-origin: content-box;
}
效果:

当background-origin值为content-box时,background-position的起点位置就由当初的padding外边缘移动到现在content的外边缘处了,换句话说,background-position由当初的(left top)位置变成了现在的(20px 20px),因为这个Demo的padding为20px。这样一来background-origin值为content-box时,background-position位置将发生如下的变化:
background-origin: content-box;
等于把:
background-position: left top;
变成了:
background-position: 左内边距 上内边距;
上面介绍了background-origin在取不同值时对background-position的影响,但大家发现了没有,上面实例都是在background-attachment:scroll下。但是如果将background-attachment设置为fixed时,background-origin将不起任何作用。并且background-origin取任何值将不会影响body中background-image的任何设置。
最后总结一下,background-clip主要是用来控制背景(背景色和背景图片)的显示区域,其主要配合background-origin来制作不同的效果;而background-origin主要是用来控制背景图片的background-position位置,并且其只能控制背景图片。
CSS3 Background-origin的更多相关文章
- css3 & background & background-image
css3 & background & background-image https://developer.mozilla.org/en-US/docs/Web/CSS/backgr ...
- css3-background clip 和background origin
1.background-origin background-origin 里面有3个参数 : border-box | padding-box | content-box; border-box,p ...
- css3 background
background是一个很重要的css属性,在css3中新增了很多内容.一方面是原有属性新增了属性值,另一方面就是新增了3个属性. 一.css3中新增属性值介绍 css2的background有5个 ...
- CSS3 background属性
background: #00FF00 url(bgimage.gif) no-repeat fixed top; background 简写属性在一个声明中设置所有的背景属性. 可以设置如下属性: ...
- CSS3详解:background
CSS3对于background做了一些修改,最明显的一个就是采用设置多背景,不但添加了4个新属性,并且还对目前的属性进行了调整增强. 1.多个背景图片 在css3里面,你可以再一个标签元素里应用多个 ...
- css2和CSS3的background属性简写
1.css2:background:background-color || url("") || no-repeat || scroll || 0 0; css3: backg ...
- CSS3中background属性的调整
CSS3对于background做了一些修改,最明显的一个就是采用设置多背景,不但添加了4个新属性,并且还对目前的属性进行了调整增强. 1.多个背景图片 在css3里面,你可以再一个标签元素里应用多个 ...
- 前端小知识~~关于css3新增知识~~归纳总结
1.新增选择器 E:nth-last-child(n) E:nth-of-type(n) E:nth-last-of-type(n) E:last-child E:first-of-type E:on ...
- 深入了解——CSS3新增属性
CSS3 选择器(Selector) 写过 CSS 的人应该对 CSS 选择器不陌生,我们所定义的 CSS 属性之所以能应用到相应的节点上,就是因为 CSS 选择器模式.参考下述代码: 清单 1. C ...
- <转载>css3 概述
参照 https://www.ibm.com/developerworks/cn/web/1202_zhouxiang_css3/ http://www.cnblogs.com/ghost-xyx/p ...
随机推荐
- mongodb复制+分片集原理
----------------------------------------复制集---------------------------------------- 一.复制集概述: Mongodb ...
- 仿EXCEL插件,智表ZCELL产品V1.5 版本发布,IE8/9完全兼容
详细请移步 智表(ZCELL)官网www.zcell.net 更新说明 这次更新主要应用户要求,主要解决了IE8/9等低版本浏览器兼容的问题,新增了部分功能,欢迎大家体验使用. 本次版本更新内容如下 ...
- 【Teradata SQL】行转列函数TDStats.udfConcat
TDstats.udfConcat为Teradata自带UDF,定义如下: show function tdstats.udfconcat; REPLACE FUNCTION tdstats.UDFC ...
- IDEA Can't Update No tracked branch configured for branch master or the branch doesn't exist.
IDEA Can't Update No tracked branch configured for branch master or the branch doesn't exist.To make ...
- PHP设计模式概述
PHP设计模式概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...
- C#二维码与条形码的生成
二维码 using Gma.QrCodeNet.Encoding;using Gma.QrCodeNet.Encoding.Windows.Render; string str = "Htt ...
- LoRa---她的芯片和她的几种工作模式
LoRa对应的芯片------sx1278芯片 sx1278芯片为Semtech公司推出的具有新型LoRa扩频技术的RF芯片,具有功耗低.容量大.传输距离远.抗干扰能力强的优点.我接下来在这块芯片上进 ...
- DotNetCore 3.0 助力 WPF 开发
DotNetCore Is AnyWhere. 前言 Visual Studio 2019 已经正式发布了,DotNetCore 3.0 的正式版也指日可待.在之前的版本中,作为一名基于微软生态的传统 ...
- 你注意到 .Net Framework 和 .Net Core 中使用 Session 的区别了吗?
起因 在测试一个例子时发现的问题,这个示例实现的功能是刷新页面也能保持表格锁定列的状态,先看下页面的完成效果: 测试中发现,几乎相同的代码: 在 FineUIMvc(Net Framework)下没有 ...
- asp.net 文件分片上传
最近在研究文件上传,里面的门道还是挺多的,网上大多数文章比较杂乱,代码都是片段,对于新手小白来说难度较高,所以在此详细写一下今天看到的一个demo,关于文件分片上传的. <!DOCTYPE ht ...