作者:糖伴西紅柿 類型:編譯 來(lái)源:
前端觀察原文鏈接:
Backgrounds In CSS: Everything You Need To Know (Michael Martin)
譯文鏈接:
css 背景全攻略背景(background)是css中一個(gè)重要的的部分,也是需要知道的css的基礎(chǔ)知識(shí)之一。這篇文章將會(huì)涉及css背景(background)的基本用法,包括諸如 background-attachment 等的屬性,也會(huì)介紹一些有關(guān)背景(background)的常用技巧,以及 css3 中的 背景(background)(包含4個(gè)新的背景(background)屬性)。
css2 中的背景(background)
概述
CSS2中有5個(gè)主要的背景(background)屬性,它們是:
·background-color: 指定填充背景的顏色。
·background-image: 引用圖片作為背景。
·background-position: 指定元素背景圖片的位置。
·background-repeat: 決定是否重復(fù)背景圖片。
·background-attachment: 決定背景圖是否隨頁(yè)面滾動(dòng)。
這些屬性可以全部合并為一個(gè)縮寫(xiě)屬性: background。需要注意的一個(gè)要點(diǎn)是背景占據(jù)元素的所有內(nèi)容區(qū)域,包括padding和border,但是不包括元素的margin。它在Firefox, Safari ,Opera以及IE8中工作正常,但是IE6和IE7中,background沒(méi)把border計(jì)算在內(nèi)。
圖1
基本屬性
背景色(background-color)
background-color屬性用純色來(lái)填充背景。有許多方式指定這個(gè)顏色,以下方式都得到相同的結(jié)果。
background-color: blue;
background-color: rgb(0, 0, 255);
background-color: #0000ff;
background-color 也可被設(shè)置為透明(transparent),這會(huì)使得其下的元素可見(jiàn)。
背景圖(background-image)
background-image屬性允許指定一個(gè)圖片展示在背景中??梢院蚥ackground-color連用,因此如果圖片不重復(fù)地話,圖片覆蓋不到地地方都會(huì)被背景色填充。代碼很簡(jiǎn)單,只需要記住,路徑是相對(duì)于樣式表的,因此以下的代碼中,圖片和樣式表是在同一個(gè)目錄中的。
background-image: url(image.jpg);
但是如果圖片在一個(gè)名為images的子目錄中,就應(yīng)該是:
background-image: url(images/image.jpg);
糖伴西紅柿注釋:使用 ../ 表示上一級(jí)目錄,比如background-image: url(../images/image.jpg); 表示圖片位于樣式表的上級(jí)目錄中的images子目錄中。有點(diǎn)繞,不過(guò)這個(gè)大家應(yīng)該都知道了,我就不詳說(shuō)了。
背景平鋪(background-repeat)
設(shè)置背景圖片時(shí),默認(rèn)把圖片在水平和垂直方向平鋪以鋪滿整個(gè)元素。這也許是你需要的,但是有時(shí)會(huì)希望圖片只出現(xiàn)一次,或者只在一個(gè)方向平鋪。以下為可能的設(shè)置值和結(jié)果:
background-repeat: repeat; /* 默認(rèn)值,在水平和垂直方向平鋪 */
background-repeat: no-repeat; /* 不平鋪。圖片只展示一次。 */
background-repeat: repeat-x; /* 水平方向平鋪(沿 x 軸) */
background-repeat: repeat-y; /* 垂直方向平鋪(沿 y 軸) */
background-repeat: inherit; /* 繼承父元素的 background-repeat 屬性*/
背景定位(background-position)
background-position屬性用來(lái)控制背景圖片在元素中的位置。技巧是,實(shí)際上指定的是圖片左上角相對(duì)于元素左上角的位置。
下面的例子中,設(shè)置了一個(gè)背景圖片并且用background-position屬性來(lái)控制它的位置,同時(shí)也設(shè)置了background-repeat為no-repeat。計(jì)量單位是像素。第一個(gè)數(shù)字表示x 軸(水平)位置,第二個(gè)是y 軸(垂直) 位置。
/* 例 1: 默認(rèn)值 */
background-position: 0 0; /* 元素的左上角 */
/* 例 2: 把圖片向右移動(dòng) */
background-position: 75px 0;
/* 例 3: 把圖片向左移動(dòng) */
background-position: -75px 0;
/* 例 4: 把圖片向下移動(dòng) */
background-position: 0 100px;
圖2
background-position屬性可以用其它數(shù)值,關(guān)鍵詞和百分比來(lái)指定,這比較有用,尤其是在元素尺寸不是用像素設(shè)置時(shí)。
關(guān)鍵詞是不用解釋的。x軸上:
·* left
·* center
·* right
y 軸上:
·* top
·* center
·* bottom
順序方面和使用像素值時(shí)的順序幾乎一樣,首先是x軸,其次是y軸,像這樣:
background-position: top right;
使用百分?jǐn)?shù)時(shí)也類似。需要主要的是,使用百分?jǐn)?shù)時(shí),瀏覽器是以元素的百分比數(shù)值來(lái)設(shè)置圖片的位置的。看例子就好理解了。假設(shè)設(shè)定如下:
使用百分?jǐn)?shù)定位時(shí),其實(shí)是將背景圖片的百分比指定的位置和元素的百分比位置對(duì)齊。也就是說(shuō),百分?jǐn)?shù)定位是改變了背景圖和元素的對(duì)齊基點(diǎn)。不再像使用像素和關(guān)鍵詞定位時(shí),使用背景圖和元素的左上角為對(duì)齊基點(diǎn)。例如上例的background-position: 100% 50%; 就是將背景圖片的100%(right) 50%(center)這個(gè)點(diǎn),和元素的100%(right) 50%(center)這個(gè)點(diǎn)對(duì)齊。
這再一次說(shuō)明了,我們一直認(rèn)為已經(jīng)掌握的簡(jiǎn)單的東西,其實(shí)還有我們有限的認(rèn)知之外的知識(shí)。
最終的效果是笑臉圖片被定位在元素的最右邊,離元素頂部是元素的一半,效果和 background-position: right center; 一樣。
圖3
背景附著
background-attachment屬性決定用戶滾動(dòng)頁(yè)面時(shí)圖片的狀態(tài)。三個(gè)可用屬性為scroll(滾動(dòng)),fixed(固定) 和 inherit(繼承)。inherit 單純地指定元素繼承他的父元素的background-attachment 屬性。
為了正確地理解background-attachment,首先需要明白頁(yè)面(page)和視口(view port)是如何協(xié)作地。視口(view port)是瀏覽器顯示網(wǎng)頁(yè)的部分(就是去掉工具欄的瀏覽器)。視口(view port)的位置固定,不變動(dòng)。
當(dāng)向下滾動(dòng)網(wǎng)頁(yè)時(shí),視口(view port)是不動(dòng)的,而頁(yè)面的內(nèi)容向上滾動(dòng)??雌饋?lái)貌似視口(view port)向頁(yè)面下方滾動(dòng)了。如果設(shè)置 background-attachment: scroll,就設(shè)置了當(dāng)元素滾動(dòng)時(shí),元素背景也必需隨著滾動(dòng)。簡(jiǎn)而言之,背景是緊貼元素的。這是 background-attachment 默認(rèn)值。
用一個(gè)例子來(lái)更清楚地描述下:
background-image: url(test-image.jpg);
background-position: 0 0;
background-repeat: no-repeat;
background-attachment: scroll;
圖4
當(dāng)向下滾動(dòng)頁(yè)面時(shí),背景向上滾動(dòng)直至消失。
但是當(dāng)設(shè)置background-attachment為fixed時(shí),當(dāng)頁(yè)面向下滾動(dòng)時(shí),背景要待在它原來(lái)的位置(相對(duì)于瀏覽器來(lái)說(shuō))。也就是不隨元素滾動(dòng)。
用另一個(gè)例子描述下:
background-image: url(test-image.jpg);
background-position: 0 100%;
background-repeat: no-repeat;
background-attachment: fixed;
圖5
頁(yè)面已經(jīng)向下滾動(dòng)了,但是圖像仍然保持可見(jiàn)。
需要重視的一點(diǎn)是背景圖只能出現(xiàn)在它父元素能達(dá)到的區(qū)域。即使圖片是相對(duì)于視口(view port)定位地,如果它的父元素不可見(jiàn),圖片就會(huì)消失。參見(jiàn)下面的例子。此例中,圖片位于視口(view port)的左下方,但是只有元素內(nèi)的圖片部分是可見(jiàn)的。
background-image: url(test-image.jpg);
background-position: 0 100%;
background-repeat: no-repeat;
background-attachment: fixed;
圖6
因?yàn)閳D片開(kāi)始在元素之外,一部分圖片被切除了。
背景的簡(jiǎn)寫(xiě)屬性
可以把背景的各個(gè)屬性合為一行,而不用每次都單獨(dú)把他們寫(xiě)出來(lái)。格式如下:
background: <color> <image> <position> <attachment> <repeat>
例如,下面的聲明
background-color: transparent;
background-image: url(image.jpg);
background-position: 50% 0 ;
background-attachment: scroll;
background-repeat: repeat-y;
可以合為單獨(dú)一行:
background: transparent url(image.jpg) 50% 0 scroll repeat-y;
而且不需要指定每一個(gè)值。如果省略值地話,就使用屬性地默認(rèn)值。例如,上面那行和下面這個(gè)效果一樣:
background: url(image.jpg) 50% 0 repeat-y;
背景的一般用法
除了可以用來(lái)使元素更加優(yōu)雅這類顯然的用法之外,背景也可以用于其它的目的。
仿欄
當(dāng)使用css的float屬性來(lái)定位布局元素時(shí),要確保兩欄或多欄有相同的長(zhǎng)度是比較困難的。如果長(zhǎng)度不同,其中一欄的背景會(huì)比另外的短,這會(huì)破壞整個(gè)設(shè)計(jì)。
仿欄是個(gè)非常簡(jiǎn)單的背景技巧,這個(gè)技巧最早發(fā)表在A List Apart 。思路很簡(jiǎn)單:不再給每列單獨(dú)設(shè)置背景,而是給各列的父元素設(shè)置一個(gè)背景圖。所有欄的設(shè)計(jì)都包含在這張圖片之中。
文本替換
在網(wǎng)頁(yè)上,對(duì)于字體的選擇是相當(dāng)有限的??梢允褂胹IFR之類的工具來(lái)定制字體,但是這需要用戶啟用JavaScript 。一個(gè)適用于任意瀏覽器的簡(jiǎn)單方法是,用想用的字體來(lái)做一張文本圖片,并用這張圖片作為背景。這樣,文本依然出現(xiàn)在文檔標(biāo)記中以供搜索引擎檢索和屏幕瀏覽器識(shí)別,但是在瀏覽器中就會(huì)顯示首選的字體。
例如,HTML標(biāo)記可能是這樣的:
<h3>Blogroll</h3>
假如有一個(gè)200乘75的圖片,上面有更好看的字體,就可以用如下方式來(lái)替換文本:
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 */
}
簡(jiǎn)單的圓點(diǎn)
無(wú)需列表中的圓點(diǎn)看起來(lái)很難看。不用再處理所有不同的list-style 屬性,只需要簡(jiǎn)單地把他們隱藏并用背景圖代替就可以了。因?yàn)閳D片可以隨意選擇,這些圓點(diǎn)就可以看起來(lái)更漂亮。
下面,我們把一個(gè)無(wú)需列表改造成有圓滑圓點(diǎn)的:
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中的背景有較多改進(jìn)。最顯著的是多背景圖片的選項(xiàng),同時(shí)也增加了4個(gè)新屬性。
多背景
CSS3中,可以對(duì)一個(gè)元素應(yīng)用一個(gè)或多個(gè)圖片作為背景。代碼和css2中的一樣,只需要用逗號(hào)來(lái)區(qū)別各個(gè)圖片。第一個(gè)聲明的圖片定位在元素頂部,其它的圖片按序在其下排列,例如:
background-image: url(top-image.jpg), url(middle-image.jpg), url(bottom-image.jpg);
新屬性:背景修剪(background-clip)
這又把我們帶回了文章開(kāi)始討論的那個(gè)關(guān)于邊框內(nèi)圖片顯示的話題。它被描述為“背景描繪區(qū)”。
background-clip屬性用來(lái)增強(qiáng)背景顯示位置的控制能力。可能的值為:
·background-clip: border-box;
背景顯示在邊框內(nèi)。
·background-clip: padding-box;
背景顯示在內(nèi)補(bǔ)白(padding)內(nèi),而不是邊框內(nèi)。
·background-clip: content-box;
只在內(nèi)容內(nèi)顯示背景,而不是內(nèi)補(bǔ)白(padding)和邊框內(nèi)。
·background-clip: no-clip;
默認(rèn)值,和 border-box 一樣。
新屬性:背景原點(diǎn)(background-origin)
這個(gè)屬性和 background-position 結(jié)合起來(lái)使用。可以從邊框,內(nèi)補(bǔ)白或者內(nèi)容盒子開(kāi)始計(jì)算 background-position (類似于 background-clip)。
·background-origin: border-box;
以邊框?yàn)樵c(diǎn)開(kāi)始計(jì)算 background-position.
·background-origin: padding-box;
以內(nèi)補(bǔ)白為原點(diǎn)開(kāi)始計(jì)算 background-position
·background-origin: content-box;
以內(nèi)容盒子為原點(diǎn)開(kāi)始計(jì)算 background-position
對(duì)于 background-clip 和 background-origin 不同的一個(gè)解釋參看 CSS3.info
新屬性:背景尺寸(background-size)
background-size用來(lái)調(diào)整背景圖的大小。有好幾個(gè)可能值:
·background-size: contain;
縮小圖片來(lái)適應(yīng)元素的尺寸(保持像素的長(zhǎng)寬比)
·background-size: cover;
擴(kuò)展圖片來(lái)填滿元素(保持像素的長(zhǎng)寬比)
·background-size: 100px 100px;
調(diào)整圖片到指定大小
·background-size: 50% 100%;
調(diào)整圖片到指定大小。百分比是相對(duì)于包含元素的尺寸的。
可以看一下
CSS3規(guī)則網(wǎng)站上的幾個(gè)例子。
新屬性:(background-break)
CSS3 中,元素可以被分成幾個(gè)獨(dú)立的盒子(例如 使內(nèi)聯(lián)元素 span 跨越多行)。background-break屬性用來(lái)控制背景怎樣在這些不同的盒子中顯示。
可能值為:
·Background-break: continuous;
默認(rèn)值。忽略盒之間的距離(也就是像元素沒(méi)有分成多個(gè)盒子,依然是一個(gè)整體一樣)
·Background-break: bounding-box;
把盒之間的距離計(jì)算在內(nèi)
·Background-break: each-box;
為每個(gè)盒子單獨(dú)重繪背景
背景色(background-color)的改進(jìn)
background-color在css3中有了稍許改進(jìn)。除了設(shè)置背景顏色之外,如果元素底層的背景圖不可用,還可以設(shè)置一個(gè)“回退色”。
通過(guò)在回退色之前增加一個(gè)斜杠(/)來(lái)實(shí)現(xiàn),例如:
background-color: green / blue;
此例中,背景色應(yīng)該是綠色(green)。然而,如果底層背景圖不能使用的話,背景色就是藍(lán)色而不是綠色。如果在斜杠前不指定顏色,默認(rèn)為透明(transparent)。
背景平鋪(background-repeat)的改進(jìn)
CSS2中當(dāng)圖片平鋪時(shí),會(huì)被元素在末端截?cái)唷SS3引入了兩個(gè)屬性來(lái)修正這個(gè)問(wèn)題:
·space: 應(yīng)用同等數(shù)量的空白到圖片之間,直到填滿整個(gè)元素
·round: 縮小圖片直到正好平鋪滿元素
關(guān)于background-repeat: space; 的一個(gè)例子,可以在CSS3規(guī)則網(wǎng)站看到。
背景附著(background-attachment)的改進(jìn)
background-attachment屬性增加了一個(gè)新值:local。這是用來(lái)配合可以滾動(dòng)的元素的(設(shè)置為 overflow: scroll; 的元素)。當(dāng) background-attachment 設(shè)置為滾動(dòng)(scroll)時(shí),背景圖不會(huì)隨元素內(nèi)容的滾動(dòng)而滾動(dòng)。
設(shè)置為background-attachment :local; 時(shí),背景圖會(huì)隨內(nèi)容的滾動(dòng)而滾動(dòng)。
總結(jié)
總結(jié)一下,css中關(guān)于背景有許多需要知道的知識(shí)。但是一旦把這些知識(shí)融會(huì)貫通了,這些技術(shù)和命名約定就變得非常有意義而且很快就會(huì)成為潛意識(shí)行為了。
如果剛接觸css,主要不斷聯(lián)系就可以較快地掌握背景的要點(diǎn)了。如果是老手,我希望你可以和我一樣期待css3 。
關(guān)于作者
Michael Martin 的文章大多涉及網(wǎng)頁(yè)設(shè)計(jì),WordPres并
Pro Blog Design 工作。可以查看更多關(guān)于博客設(shè)計(jì)的文章或者在
twitter 上關(guān)注他。
糖伴西紅柿:一看到這么長(zhǎng)篇大論的也頭暈,花了好幾天的時(shí)間折騰這篇文章。全是基礎(chǔ)的只是,沒(méi)有什么花哨的,但是我覺(jué)得最基礎(chǔ)的也是最重要的。
鑒于好多網(wǎng)站都會(huì)轉(zhuǎn)載別人的文章,當(dāng)然了,好的文章我們也會(huì)轉(zhuǎn)載,不過(guò)有些人直接把別人辛辛苦苦的勞動(dòng)付出拿來(lái)當(dāng)自己的東西。
這些人真的很無(wú)恥,這個(gè)大環(huán)境也真的很悲哀,沒(méi)人愿意踏踏實(shí)實(shí)地做事。這就是為什么我們總是翻譯國(guó)外的文章,而不是把咱們的文章翻譯成外語(yǔ)讓外國(guó)人看的根本所在。