02 css背景與邊框 css揭秘

2022-01-17 04:14:00 字數 4209 閱讀 4914

背景與邊框

一 半透明邊框 rgba/hsla顏色

1.難題

假設我們想給乙個容器設定一層白色背景和一道半透明白色邊框,body

的背景會從它的半透明邊框透上來。我們最開始的嘗試可能是這樣的:

#border

但實際上看不到邊框,邊框去哪兒了?

2.解決方案

儘管看起來並不像那麼回事,但我們的邊框其實是存在的。預設情況下,

背景會延伸到邊框所在的區域下層。

在css 2.1 中,這就是背景的工作原理。

可以通過background-clip 屬性來調整上述預設行為所帶來的不便。

#border

二 多重邊框

box-shadow的基本用法

1.難題

我們通常希望在css **層面以更靈活的方式來

調整邊框樣式。因此,網頁開發者們最終不得不折騰出各種醜陋的hack,比

如使用多個元素來模擬多重邊框。不過,我們還有更好的辦法來解決這個難

題,並不需要新增無用的額外元素來汙染我們的結構。

2.box-shadow 方案

box-shadow接受4個引數,第4個引數擴充套件半徑

乙個正值的擴張半徑加上兩個為零的偏移量以及為零的模糊值,

得到的「投影」其實就像一道實線邊框

#border

唯一需要注意的是,box-shadow 是層層疊加的,第一層投影位於最頂

層,依次類推。因此,你需要按此規律調整擴張半徑。比如說,在前面的代

碼中,我們想在外圈再加一道5px 的外框,那就需要指定擴張半徑的值為

15px(10px+5px)。如果你願意,甚至還可以在這些「邊框」的底下再加一

層常規的投影:

#border

多重投影解決方案box-shadow注意:

1> 投影的行為跟邊框不完全一致,因為它不會影響布局,而且也不會

受到box-sizing 屬性的影響。不過,你還是可以通過內邊距或外邊

距(這取決於投影是內嵌和還是外擴的)來額外模擬出邊框所需要

佔據的空間。

2> 上述方法所建立出的假「邊框」出現在元素的外圈。它們並不會響

應滑鼠事件,比如懸停或點選。如果這一點非常重要,你可以給

box-shadow 屬性加上inset 關鍵字,來使投影繪製在元素的內圈。

請注意,此時你需要增加額外的內邊距來騰出足夠的空隙。

3.outline 方案

在某些情況下,你可能只需要兩層邊框,那就可以先設定一層常規邊

框,再加上outline(描邊)屬性來產生外層的邊框。

#border

你可以通過outline-offset 屬性來控制它跟

元素邊緣之間的間距,這個屬性甚至可以接受負值。

outline 方案注意:

1> 它只適用於雙層「邊框」的場景,因為 outline 並不能

接受用逗號分隔的多個值。如果我們需要獲得更多層的邊框,前一

種方案就是我們唯一的選擇了。

2> 邊框不一定會貼合border-radius屬性產生的圓角,因此如果元素

是圓角的,它的描邊可能還是直角的。請注意,這種行為被css

工作組認為是乙個bug,因此未來可能會改為貼合borderradius圓角。

三 靈活的背景定位

1.background-position 的擴充套件語法方案

背景與容器底部和右部距離

#bg

2.background-origin 方案

background-origin屬性指定了背景影象的位置區域 預設是padding-box

content-box, padding-box,和 border-box區域內可以放置背景影象

#bg

3.calc() 方案

把背景定位到距離底邊10px 且

距離右邊20px 的位置。如果我們仍然以左上角偏移的思路來考慮,其實

就是希望它有乙個100% - 20px 的水平偏移量,以及100% - 10px 的垂直

偏移量。

#bg

四 邊框內圓角

1.難題

有時我們需要乙個容器,只在內側有圓角,而邊框或描邊的四個角在外

部仍然保持直角的形狀,如圖2-15 所示。這是乙個有趣的效果,目前還沒

有被濫用。用兩個元素可以實現這個效果,這並沒有什麼特別的:

.something-meaningful .something-meaningful > div

有沒有辦法可以只用乙個元素達成同樣的效果呢?

2.解決方案

描邊並不會跟著元素的圓角走

因此,如果我們把這兩者疊加到一起,box-shadow

會剛好填補描邊和容器圓角之間的空隙,

這兩者的組合達成了我們想要的效果:

.something-meaningful

到底多大的投影擴張值box-shadow可以填補這些空隙呢?

請注意,該計算過程揭示了這個方法的另乙個限制:為了讓這個效果得

以達成,擴張半徑需要比描邊的寬度值小,但它同時又要比( 2 −1)r大

(這裡的r 表示 border-radius)。這意味著,如果描邊的寬度比 ( 2 −1)r 小,

那我們是不可能用這個方法達成該效果的。

五 條紋背景

1.難題

不論是在網頁設計中,還是在其他傳統媒介中(比如雜誌和牆紙等),

各種尺寸、顏色、角度的條紋圖案在視覺設計中無處不在。要想在網頁中實

現條紋圖案,其過程還遠遠不夠理想。通常,我們的方法是建立乙個單獨的

位**件,然後每次需要做些調整時,都用影象編輯器來修改它。可能有人

試過用svg 來取代位圖,但這樣還是會有乙個獨立的檔案,而且它的語法

也遠遠不夠友好。如果可以直接在css 中建立條紋圖案,那該有多棒啊!

你可能會驚訝地發現,我們居然真的可以。

2.解決方案 linear-gradient(#fb3,#58a)

#bg

如果多個色標具有相同的位置,它們會產生乙個無限小的過渡區域,

過渡的起止色分別是第乙個和最後乙個指定值。從效果上看,顏色會在那

個位置突然變化,而不是乙個平滑的漸變過程

#bg

如果某個色標的位置值比整個列表中在它之前的色標的位置值都要

小,則該色標的位置值會被設定為它前面所有色標位置值的最大值

#bg 

/*多種顏色:

*/#bg

3.垂直條紋

垂直條紋的**跟水平條紋幾乎是一樣的,差別主要在於:我們需要在

開頭加上乙個額外的引數來指定漸變的方向。在水平條紋的**中,我們其

實也可以加上這個引數,只不過它的預設值to bottom 本來就跟我們的意

圖一致,於是就省略了。最後,我們還需要把background-size 的值顛倒

一下,

#bg

4.斜向條紋

#bg

5.更好的斜向條紋

我們還有更好的方法來建立斜向條紋。乙個鮮為人知的真

相是linear-gradient() 和radial-gradient() 還各有乙個迴圈式的加強

版:repeating-linear-gradient() 和repeating-radial-gradient()。

它們的工作方式跟前兩者類似,只有一點不同:色標是無限迴圈重複的,直

到填滿整個背景。下面是乙個重複漸變的例子

#bg

6.靈活的同色系條紋

#bg

但我們現在只需要修改乙個地方

就可以改變所有顏色了。我們還得到了乙個額外的好處,對於那些不支援

css 漸變的瀏覽器來說,這裡的背景色還起到了回退的作用。

六 複雜的背景圖案

css 漸變在實現這些圖案時也能大展拳腳。用css 漸變

來建立任何種類的幾何圖案幾乎都是可能的,只不過有時這種方法不太實

際。1.網格

七 偽隨機背景

八 連續的影象邊框

CSS揭秘 背景與邊框

css編碼技巧 font size 20px line height 1.5 1.半透明邊框 border 10px solid hsla 0,0 100 5 background white background clip padding box 2.多重邊框 background yellowg...

《css揭秘》之背景與邊框

這本書是魔法哥的譯著,也是買了有很長時間了,現在開始慢慢閱讀,確實比較新穎,包含了很多css方面的小tips。來一點點的做個總結。關於半透明我們可能會想到使用rgba,opacity等等,對於背景提供回退方案還是比較好做的,要麼利用一張單畫素半透明,要麼回退到實色。但是對於其他屬性,比如邊框我們就只...

CSS揭秘 背景與邊框(2) 多重邊框

有些情況下,為了滿足一些要求,普通的邊框有點達不到我們的需求,這時我們可以使用多重邊框。box shadow屬性可以設定乙個或多個下拉陰影的框。語法 box shadow h shadow v shadow blur spread color inset 值 說明h shadow 必需的。水平陰影的...