【基礎】CSS實現多重邊框的5種方式

簡言

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

CSS多重邊框

1 利用描邊(outline)屬性

方案1利用描邊(outline)屬性結合border屬性實現雙重邊框。此方案實現簡單,兼容性好,能兼容除IE6,7以外的瀏覽器。

1.1 核心代碼

.borders {
  border: solid 6px #fff;
  outline: solid 6px #888;  
}

1.2 演示程序

利用outline實現雙重邊框

演示程序

1.3 說明

  • 只能實現雙重邊框
  • 邊框樣式靈活,可以實現虛線等樣式的邊框
  • 描邊在盒模型之外,會與外部元素髮生重疊

2 利用額外的DIV

方案2利用額外的DIV嵌套的方式實現多重邊框。這也是唯一不存在兼容性問題的方案。

2.1 核心代碼

.outer {
    border: solid 6px #888;
    background: #fff;
}
.inner {
    background: #222;
    margin: 6px;
}

2.2 演示程序

利用額外的DIV嵌套實現雙重邊框

演示程序

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利用CSS3border-image屬性實現多重邊框。實現方法簡單,但需要製做一個額外的邊框圖片,兼容性較差。

4.1 核心代碼

.borders {
    border: solid 12px transparent;
    border-image: url('borders.jpg') 12 12 12 12 repeat;
}

4.2 演示程序

利用border-image屬性實現雙重邊框

演示程序

4.3 說明

本例中,利用border-image-slice將邊框圖片分成如下圖所示的9個區域:

border-image-slice示例圖片

其中包括四個角(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 演示程序

利用box-shadow屬性實現多重邊框

演示程序

5.3 說明

爲了用陰影模擬邊框,本例中使用了兩個陰影效果,設置偏移值和模糊值爲0,並適當地設置陰影的尺寸,從而實現了雙重邊框的效果。因爲一個陰影重疊在另一個陰影之上,第二個陰影的尺寸要設置成第一個陰影尺寸的兩倍。關鍵部分是將模糊值設成0,從而產生像邊框一樣的純色陰影,看起來和邊框一樣。

和描邊(outline)屬性一樣,box-shadow屬性可能會和周邊元素髮生重疊,因此要適當地設置元素的外邊距。box-shadow兼容性一般。

6 參考

MDN border-image

MDN box-shadow

Multiple Borders with CSS

CSS-tricks Multiple Borders

7 結語

本文簡述了5種多重邊框的實現方式,各有優缺點,大家要根據實際情況進行取捨。

文中所述部分文字及代碼彙編於網絡。因時間不足,能力有限等原因,存在文字闡述不準及代碼測試不足等諸多問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章