簡言
目前最優雅地實作多重邊框的方案是利用
CSS3
的
box-shadow
屬性,但如果要相容老的浏覽器,則需要選擇其它的方案。本文簡要地列舉了幾種多重邊框的實作方案,大家可以根據項目實際及相容性要求等情況,選擇最适合的實作方案。

1 利用描邊( outline
)屬性
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
屬性
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
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,進而産生像邊框一樣的純色陰影,看起來和邊框一樣。
和描邊(
outline
)屬性一樣,
box-shadow
屬性可能會和周邊元素發生重疊,是以要适當地設定元素的外邊距。
box-shadow
相容性一般。
6 參考
MDN border-image MDN box-shadow Multiple Borders with CSS CSS-tricks Multiple Borders7 結語
本文簡述了5種多重邊框的實作方式,各有優缺點,大家要根據實際情況進行取舍。
文中所述部分文字及代碼彙編于網絡。因時間不足,能力有限等原因,存在文字闡述不準及代碼測試不足等諸多問題。