深入淺出CSS3 background-clip,background-origin和border-image教程






<div class=”content” style=”height:32px;”> /*這個是伸縮的*/
<div class=”left” style”width:15px; height:32px;”></div>
<div class=”center” style=”height:32px;”>這里存放文字內容</div>/*這個也是可以伸縮的*/
<div class=”right” style=”width:15px; height:32px;”></div>
</div>
但至于如何才能使最外層的容器內收縮緊貼內部div,使div#center自動伸縮,就不在本課的范圍之內,大家可以百度,也可以參照我上一篇文字《深入理解box盒子模型》。





.border
{
background:url("images/qwqw_s.jpg");
background-repeat:no-repeat;
background-position:left top;
border-width:30px;
border-style:dashed;
border-color:red;
width:180px;
height:254px;
padding:30px;
margin:0 auto;
}

.border
{
background:url("images/qwqw_s.jpg") black;
background-repeat:no-repeat;
background-position:left top;
border-width:30px;
border-style:dashed;
border-color:red;
background-clip: content-box;
background-origin: border-box;
-moz-background-clip: content;
-moz-background-origin: border;
-webkit-background-clip: content;
-webkit-background-origin: border;
width:180px;
height:254px;
padding:30px;
margin:0 auto;
}

正如以上所說,我們可以看見雖然圖片是從頂著邊框的左上角進行定位,但是裁剪屬性background-clip的屬性是設置為content-box,所以只有content區(qū)域的內容看得見,也就是只要是在content之外的圖片內容都被隱蔽掉了。
我之所以要在不同瀏覽器下進行測試( Firefox/3.6.3,Google:7.0.517.24, Opera/9.80, Safari:5.0.1),答案也在圖上,我們看到在火狐下的結果和其他瀏覽器結果竟然不一樣。明明background-clip設置的屬性是content-box,但卻沒有圖片的任何部位被屏蔽。我想說的是:在火狐下-moz-background-clip屬性是沒有content這一值的(但是padding和border還是有的),在firebug中可以看到,-moz-background-clip的值直接是border,當你強行改為content時,這條屬性會直接從bug中消失。當然這只是在 3.6.3版本下的結果,至于在4.0版本中表現(xiàn)如何(雖然只是beta版)??梢宰孕袦y試
四.實戰(zhàn)
在學習了基本background-clip和background-origin用法和原理之后,我們將通過操作一個實際的例子,來加深我們的學習:
這個圓角背景是由三部分組成:和
和
(呃,其實是從Webqq2.0網站上撬下來的,就是上面的工具條……但是作為教學用,應該無傷大雅吧……),思路和開篇的那個黑背景制作過程是一樣的,左右固定,中間窄的repeat-x。但是這會不用插入三個div,又要設置float,又要設置display考慮布局那么麻煩。
步驟一:
先搭建一個框架出來,給一個布局。不著急把圖片插入進去。主意看以下代碼,有幾點需要說明的:因為僅需在盒子左右兩側插入背景,且恰好為左右要插入圖片的寬度(如果不恰好為那么寬呢?那么不會成功的,因為css3中還沒有屬性能控制圖片在邊框中的定位,你會想不是有background- position屬性嗎?要注意那個是控制圖片在整個盒子中的定位。還是不信的話你可以親自試試);還有就是padding的值也是可以不用設置的,是為了與上面的例子盡力保持一致,方便大家對比學習 margin也是為了讓盒子居中而已,可以忽略;最后border-style和border-color也是方便大家理解布局才添加上去的。
.border
{
background:black;
border-width:0 11px; /*為了要適應左右兩個圖片的寬度,且只有左右需要,上下的寬度就不需要了*/
border-style:dashed;
border-color:Red;
width:180px;
height:90px; /*因為要適應圖片,所以寬度改小一點*/
padding:30px; /*其實Padding也是可以不需要的,為了方便說明一些問題,還是保留*/
margin:0 auto;
}


步驟二:
這一步很簡單,就是把中間需要x軸重復的圖片添加上去,并且把黑色背景去掉
.border
{
background:url("images/tool-bar/bg_b_c.png");/*添加背景*/
background-repeat:repeat-x;
background-position:center;
border-width:0 11px; /*為了要適應左右兩個圖片的寬度,且只有左右需要,上下的寬度就不需要了*/
border-style:dashed;
border-color:Red;
width:180px;
height:90px; /*因為要適應圖片,所以寬度改小一點*/
padding:30px; /*其實Padding也是可以不需要的,為了方便說明一些問題,還是保留*/
margin:0 auto;
}
步驟三:
這步也很簡單,就是把中間重復的背景的左右兩端去掉,為了方便我們下一步在左右邊框中插入需要的圖片。注意這里的
-moz-background-origin的content屬性是無效的,實際上這里的值是padding。正如在上一節(jié)的最后說道,在火狐中是沒有content這個屬性的。如果有朋友想要copy這段代碼,記得根據瀏覽器版本做相應的修改,把origin的值content改為 padding,或者把盒子的padding去掉。
.border
{
background:url("images/tool-bar/bg_b_c.png");
background-repeat:repeat-x;
background-position:center;
-moz-background-clip: padding;
-moz-background-origin: content; /*firefox中background-origin沒有content這個屬性,其實現(xiàn)在的值是padding。在其他瀏覽器中是有效的*/
border-width:0 11px; /*為了要適應左右兩個圖片的寬度,且只有左右需要,上下的寬度就不需要了*/
border-style:dashed;
border-color:Red;
width:180px;
height:90px; /*因為要適應圖片,所以寬度改小一點*/
padding:30px; /*其實Padding也是可以不需要的,為了方便說明一些問題,還是保留*/
margin:0 auto;
}


.border
{
background:url("images/tool-bar/bg_b_c.png"),
url("images/tool-bar/bg_b_l.png"),
url("images/tool-bar/bg_b_r.png");
background-repeat:repeat-x,no-repeat,no-repeat;
background-position:center,left center, right center;
-moz-background-clip: padding,border,border;
-moz-background-origin: content,border,border;
border-width:0 11px; /*為了要適應左右兩個圖片的寬度,且只有左右需要,上下的寬度就不需要了*/
border-style:dashed;
border-color:Red;
width:180px;
height:90px; /*因為要適應圖片,所以寬度改小一點*/
padding:30px; /*其實Padding也是可以不需要的,為了方便說明一些問題,還是保留*/
margin:0 auto;
}
重要提示!寫到這一步,可以從上圖看到已經快大功告成了。把左右的紅色邊框去掉就可以了——那么把 border-color改為none或是直接去掉這句話?不行的。如果不設置顏色的話邊框就會變成黑色,因為邊框有樣式,而且樣式還有11px寬啊,所以會用默認的黑色來填充。現(xiàn)在你可能又會覺得是邊框樣式border-style的問題,那咱們把樣式去掉,把寬度保留?也不行,因為如果沒有樣式寬度是無效的,結果會如下圖(我們可以從firebug中看到邊框的寬度是0,雖然仍然保留border-width)。所以border- style,border-color,border-width缺一不可!這一點要十分注意!
步驟五:
綜上所述,你可能會覺得既不能改border-style又不能改border-color豈不是沒轍了?正確答案是——還是修改border-color,別忘了,color還有一個值transparent,透明。顏色還讓它在,但只要人們看不見就行了。我們實現(xiàn)它:
.button
{
background:url("images/Fancybox/fancy_title_main.png"),
url("images/Fancybox/fancy_title_left.png"),
url("images/Fancybox/fancy_title_right.png");
background-repeat:repeat-x,no-repeat,no-repeat;
background-position:center,left,right;
background-clip: padding-box,border-box,border-box;
background-origin:padding-box,border-box,border-box;
-moz-background-clip: padding,border,border;
-moz-background-origin: content,border,border;
border-width:0 15px;
border-style:dashed;
border-color:transparent;
width:80px;
height:32px;
}







.border
{
background:url("images/tool-bar/bg_b_c.png");
background-repeat:repeat-x;
background-position:center;
-moz-background-clip: padding;
-moz-background-origin: padding;
-moz-border-image:url("images/bg_b_l_r.png") 0 11;
border-width:0 11px; /*為了要適應左右兩個圖片的寬度,且只有左右需要,上下的寬度就不需要了*/
width:180px;
height:90px; /*因為要適應圖片,所以寬度改小一點*/
padding:0 30px; /*其實Padding也是可以不需要的,為了方便說明一些問題,還是保留*/
margin:0 auto;
}




相關文章
- 這篇文章主要介紹了css中background-clip屬性的作用,background-clip屬性的通俗作用就是指定元素背景所在的區(qū)域,對css中background-clip屬性的相關知識感興趣的朋友一起看2018-03-29
CSS3基于背景裁剪(background-clip)實現(xiàn)的文本標題透視特效源碼
這是一款CSS3基于背景裁剪(background-clip)實現(xiàn)的文本標題透視特效源碼。畫面上的外星球與飛船背景中央呈現(xiàn)出帶有背景剪切透視的文本視覺效果。同時可響應鼠標的移動呈2017-11-17CSS3中background-clip和background-origin的區(qū)別示例介紹
本文為大家介紹下CSS3中background-clip和background-origin的區(qū)別,感興趣的朋友可以參考下2014-03-10CSS3教程:background-clip和background-origin-CSS教程-網頁制作-網頁
原文:http://www.planabc.net/2008/04/14/background-clip_background-origin/ background-clip 和 background-origin 是 CSS3 中新加的 background module 屬性,用來2008-10-17詳解CSS3中的box-sizing(content-box與border-box)
這篇文章主要介紹了CSS3中的box-sizing(content-box與border-box)的相關資料,需要的朋友可以參考下2019-04-19- 這篇文章主要介紹了淺談CSS3 box-sizing 屬性 有趣的盒模型 ,需要的朋友可以參考下2019-04-02
- 一說到CSS的盒模型(Box model)我想很多人都會比較煩,特別是對于新手,然而這個Box model又是我們CSS運用中比較重要的一個屬性,box-sizing 屬性允許您以特定的方式定義匹2015-04-09
- 這篇文章主要介紹了CSS3屬性box-sizing使用指南,需要的朋友可以參考下2014-12-09
- CSS3 box-sizing屬性,在很多新手朋友來看是比較陌生的,接下來介紹CSS3 box-sizing使用及注意部分,感興趣的朋友可以了解下2013-01-08
解決CSS 中box-sizing與background-clip解決背景顯示范圍的問題
這篇文章主要介紹了CSS box-sizing與background-clip解決背景顯示范圍的問題,主要用這篇文章給大家做個記錄,避免大家遇到此類問題,感興趣的朋友跟隨小編一起看看吧2019-05-13