簡言
目前最優雅地實現多重邊框的方案是利用CSS3
的 box-shadow
屬性,但如果要相容老的瀏覽器,則需要選擇其它的方案。本文簡要地列舉了幾種多重邊框的實現方案,大家可以根據專案實際及相容性要求等情況,選擇最適合的實現方案。
1 利用描邊(outline
)屬性
方案1利用描邊(outline
)屬性結合border
屬性實現雙重邊框。此方案實現簡單,相容性好,能相容除IE6,7
以外的瀏覽器。
1.1 核心程式碼
.borders {
border: solid 6px #fff;
outline: solid 6px #888;
}
複製程式碼
1.2 演示程式
1.3 說明
- 只能實現雙重邊框
- 邊框樣式靈活,可以實現虛線等樣式的邊框
- 描邊在盒模型之外,會與外部元素髮生重疊
2 利用額外的DIV
方案2利用額外的DIV巢狀的方式實現多重邊框。這也是唯一不存在相容性問題的方案。
2.1 核心程式碼
.outer {
border: solid 6px #888;
background: #fff;
}
.inner {
background: #222;
margin: 6px;
}
複製程式碼
2.2 演示程式
2.3 說明
- 相容性好
- 可以實現多重邊框,虛線邊框等樣式
- 需要額外的DIV元素,增加了程式碼複雜性
3 利用偽元素
方案3利用偽元素(:before
)的方式實現雙重邊框。實現程式碼略複雜,屬於hack的實現方式,不推薦。
3.1 核心程式碼
.borders {
border: solid 6px #fff;
position: relative;
}
.borders:before {
content: "";
position: absolute;
top: -12px;
left: -12px;
right: -12px;
bottom: -12px;
border: solid 6px #888;
}
複製程式碼
3.2 演示程式
3.3 說明
IE6,7,8
不相容- 用
:after
也可以 - 同時應用
:before
和:after
可以實現三重邊框
4 利用border-image
屬性
方案4利用CSS3
的border-image
屬性實現多重邊框。實現方法簡單,但需要製做一個額外的邊框圖片,相容性較差。
4.1 核心程式碼
.borders {
border: solid 12px transparent;
border-image: url('borders.jpg') 12 12 12 12 repeat;
}
複製程式碼
4.2 演示程式
4.3 說明
本例中,利用border-image-slice
將邊框圖片分成如下圖所示的9個區域:
其中包括四個角(1,2,3,4),四條邊(5,6,7,8)以及中間區域(9)。
repeat
表示四條邊都在相應的邊框上重複的平鋪。
5 利用box-shadow
屬性
方案5利用box-shadow
屬性實現多重邊框。方案5是最簡單,最直接的實現多重邊框的方式。只有一行程式碼就可以實現多重邊框效果。利用了陰影(box-shadow
)實現邊框多少有一些hack的味道。
5.1 核心程式碼
.borders {
box-shadow: 0 0 0 6px #fff, 0 0 0 12px #888;
}
複製程式碼
5.2 演示程式
5.3 說明
為了用陰影模擬邊框,本例中使用了兩個陰影效果,設定偏移值和模糊值為0
,並適當地設定陰影的尺寸,從而實現了雙重邊框的效果。因為一個陰影重疊在另一個陰影之上,第二個陰影的尺寸要設定成第一個陰影尺寸的兩倍。關鍵部分是將模糊值設成0,從而產生像邊框一樣的純色陰影,看起來和邊框一樣。
和描邊(outline
)屬性一樣,box-shadow
屬性可能會和周邊元素髮生重疊,因此要適當地設定元素的外邊距。box-shadow
相容性一般。
6 參考
7 結語
本文簡述了5種多重邊框的實現方式,各有優缺點,大家要根據實際情況進行取捨。
文中所述部分文字及程式碼彙編於網路。因時間不足,能力有限等原因,存在文字闡述不準及程式碼測試不足等諸多問題。