前言
border
邊框屬性可以說是我們在網頁佈局中最常用不過的一個屬性之一。border
它不只是邊框,它還有很多非常有用的“黑魔法”哈,讓我們一起來學習一下。
border繪製幾何形狀的原理
我們先來看一個簡單的小例子:
在頁面上寫一個div
<div class="border-test"><div>
複製程式碼
給這個div
加上以下樣式
.border-test {
width: 200px;
height: 200px;
background-color: #000;
border-top: 50px solid red;
border-right: 50px solid yellow;
border-bottom: 50px solid blue;
border-left: 50px solid green;
}
複製程式碼
在瀏覽器預覽可以看到下面的效果
接下來,我們把這個div
的寬度跟高度都設為0
,看看是什麼效果
是不是剩下4個不同顏色不同方向的三角形了,繼續往下看,一起來見證下border
的黑魔法。
border能繪製什麼幾何形狀?
- 三角形
- 梯形
- 平行四邊形
- 五邊形
- 六邊形
- 八邊形
- 五角星
- 六角星
- ...
三角形
向上的三角形
要得到向上的三角形,是不是隻要設定上邊框
的寬度為0
,設定上邊框
、左邊框
、右邊框
的邊框顏色設為transparent
透明,保留下邊框
的邊框顏色就可以了,看程式碼:
<div class="triangle triangle-up"></div>
複製程式碼
// 公共
.triangle {
width: 0;
height: 0;
}
// 向上的三角形
.triangle-up {
border-top: 0 solid transparent; // 這句這可以省略
border-right: 50px solid transparent;
border-bottom: 50px solid blue;
border-left: 50px solid transparent;
}
複製程式碼
還可以簡寫成,遵循上右下左
順序來設定
.triangle-up {
border-width: 0 50px 50px; // 邊框大小
border-style: solid; // 邊框樣式
border-color: transparent transparent blue; // 邊框顏色
}
複製程式碼
下面程式碼都會用簡寫的形式。
向右的三角形
同理,設定右邊框
的寬度為0
,設定上邊框
、右邊框
、下邊框
的邊框顏色為透明,保留左邊框
的邊框顏色就可以了
<div class="triangle triangle-right"></div>
複製程式碼
.triangle-right {
border-width: 50px 0 50px 50px;
border-style: solid;
border-color: transparent transparent transparent green;
}
複製程式碼
向下的三角形
同理,設定下邊框
的寬度為0
,設定左邊框
、右邊框
、下邊框
的邊框顏色為透明,保留上邊框
的邊框顏色就可以了
<div class="triangle triangle-bottom"></div>
複製程式碼
.triangle-bottom {
border-width: 50px 50px 0;
border-style: solid;
border-color: red transparent transparent;
}
複製程式碼
向左的三角形
同理,設定左邊框
的寬度為0
,設定上邊框
、下邊框
、左邊框
的邊框顏色為透明,保留右邊框
的邊框顏色就可以了
<div class="triangle triangle-left"></div>
複製程式碼
.triangle-left {
border-width: 50px 50px 50px 0;
border-style: solid;
border-color: transparent yellow transparent transparent;
}
複製程式碼
接下來再來看下如何實現下面的三角形呢?
其實不難發現,向左上的三角形剛好是向下的三角形的右半部分,所以要得到這個圖形,是不是隻要把向下的三角形左半部分的邊框設為0就可以了,看程式碼:
<div class="triangle triangle-top-left"></div>
複製程式碼
.triangle-top-left {
border-width: 50px 50px 0 0;
border-style: solid;
border-color: red transparent transparent;
}
複製程式碼
同理,可得到其他三個不同方向三角形,程式碼如下:
.triangle-top-right {
border-width: 50px 0 0 50px;
border-style: solid;
border-color: red transparent transparent;
}
.triangle-bottom-left {
border-width: 0 50px 50px 0;
border-style: solid;
border-color: transparent transparent blue;
}
.triangle-bottom-right {
border-width: 0 0 50px 50px;
border-style: solid;
border-color: transparent transparent blue;
}
複製程式碼
##梯形
藉助上面的實現三角形的方法,我們可以很容易的實現梯形,比如下面這個:
向上的梯形:
其實只要把上面向上的三角形
的程式碼加上寬度就能實現了
.trapezoid {
width: 60px;
border-bottom: 60px solid red;
border-left: 60px solid transparent;
border-right: 60px solid transparent;
}
複製程式碼
同理,可以得到向下的梯形
.trapezoid-bottom {
width: 50px;
border-top: 50px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
}
複製程式碼
如果要得到向左和向右的梯形,需要把width
設為0
,然後設定相應的高度值。
.trapezoid-left {
width: 0;
height: 50px;
border-width: 50px 50px 50px 0;
border-style: solid;
border-color: transparent red transparent transparent;
}
.trapezoid-right {
width: 0;
height: 50px;
border-width: 50px 0 50px 50px;
border-style: solid;
border-color: transparent transparent transparent red;
}
複製程式碼
平行四邊形
只要一個向上的三角形
跟向下的三角形
結合起來就能實現,需要配合一個偽元素。
.parallelogram {
position: relative;
width: 0;
height: 0;
border-width: 0 50px 50px;
border-style: solid;
border-color: transparent transparent red;
}
.parallelogram:after {
position: absolute;
top: 0;
left: 0;
border-width: 50px 50px 0;
border-style: solid;
border-color: red transparent transparent;
content: "";
}
複製程式碼
五邊形
梯形加上一個三角形,很容易就能組合成一個五邊形,也需要配合一個偽元素來實現。
.pentagon {
position: relative;
width: 50px;
border-bottom: 50px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
}
.pentagon:after {
position: absolute;
top: 50px;
left: -50px;
width: 0;
height: 0;
border-width: 75px 75px 0;
border-style: solid;
border-color: red transparent transparent;
content: "";
}
複製程式碼
六邊形
如果兩個相反方向且底邊同樣大小的梯形,疊加在一起,是不是就能得到一個六邊形呢?同樣需要配合一個偽元素來實現。
.hexagon {
position: relative;
width: 50px;
border-bottom: 50px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
}
.hexagon:after {
position: absolute;
top: 50px;
left: -50px;
width: 50px;
border-top: 50px solid red;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
content: "";
}
複製程式碼
實戰應用
聊天氣泡
是不是用到了向下的三角形
結合一個圓角矩形來實現。
下拉選單
我們開啟淘寶天貓,來看下它頂部的下拉選單,是不是也用到向上的三角形
和向下的三角
形。
我們來看下它的實現程式碼:
再來看一個,我們開啟京東秒殺
是不是就用到了我們上面分析的平行四邊形
來實現的,我們同樣來看下它的實現程式碼:
就是通過一個矩形,然後配合兩個偽元素的三角形結合起來實現的。
具體使用場景還有很多,大家可以根據自己平時專案開發中的實際需求來發揮想象。
能用CSS樣式搞定的效果就不要使用圖片哈,不僅有利於後期的維護,也能減少網頁的請求,提高頁面的載入速度。
總結
其實通過各種組合,還可以實現很多不同的形狀,這裡就不一一列舉了。比如還可以實現八邊形
、五角星
、六角星
、八角星
、十二角星
等等,border
就是這麼強大。
參考
關注
歡迎大家關注我的公眾號,感謝!