使用CSS的border屬性繪制各種幾何形狀的方法

前言
border
邊框?qū)傩钥梢哉f是我們在網(wǎng)頁布局中最常用不過的一個屬性之一。 border
它不只是邊框,它還有很多非常有用的“黑魔法”哈,讓我們一起來學(xué)習(xí)一下。
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; }
在瀏覽器預(yù)覽可以看到下面的效果
接下來,我們把這個 div
的寬度跟高度都設(shè)為 0
,看看是什么效果
是不是剩下4個不同顏色不同方向的三角形了,繼續(xù)往下看,一起來見證下 border
的黑魔法。
border能繪制什么幾何形狀?
- 三角形
- 梯形
- 平行四邊形
- 五邊形
- 六邊形
- 八邊形
- 五角星
- 六角星
- ...
三角形
向上的三角形
要得到向上的三角形,是不是只要設(shè)置 上邊框
的寬度為 0
,設(shè)置 上邊框
、 左邊框
、 右邊框
的邊框顏色設(shè)為 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; }
還可以簡寫成,遵循 上右下左
順序來設(shè)置
.triangle-up { border-width: 0 50px 50px; // 邊框大小 border-style: solid; // 邊框樣式 border-color: transparent transparent blue; // 邊框顏色 }
下面代碼都會用簡寫的形式。
向右的三角形
同理,設(shè)置 右邊框
的寬度為 0
,設(shè)置 上邊框
、 右邊框
、 下邊框
的邊框顏色為透明,保留 左邊框
的邊框顏色就可以了
<div class="triangle triangle-right"></div>
.triangle-right { border-width: 50px 0 50px 50px; border-style: solid; border-color: transparent transparent transparent green; }
向下的三角形
同理,設(shè)置 下邊框
的寬度為 0
,設(shè)置 左邊框
、 右邊框
、 下邊框
的邊框顏色為透明,保留 上邊框
的邊框顏色就可以了
<div class="triangle triangle-bottom"></div>
.triangle-bottom { border-width: 50px 50px 0; border-style: solid; border-color: red transparent transparent; }
向左的三角形
同理,設(shè)置 左邊框
的寬度為 0
,設(shè)置 上邊框
、 下邊框
、 左邊框
的邊框顏色為透明,保留 右邊框
的邊框顏色就可以了
<div class="triangle triangle-left"></div>
.triangle-left { border-width: 50px 50px 50px 0; border-style: solid; border-color: transparent yellow transparent transparent; }
接下來再來看下如何實現(xiàn)下面的三角形呢?
其實不難發(fā)現(xiàn),向左上的三角形剛好是向下的三角形的右半部分,所以要得到這個圖形,是不是只要把向下的三角形左半部分的邊框設(shè)為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; }
梯形
借助上面的實現(xiàn)三角形的方法,我們可以很容易的實現(xiàn)梯形,比如下面這個:
向上的梯形:
其實只要把上面 向上的三角形
的代碼加上寬度就能實現(xiàn)了
.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
設(shè)為 0
,然后設(shè)置相應(yīng)的高度值。
.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; }
平行四邊形
只要一個 向上的三角形
跟 向下的三角形
結(jié)合起來就能實現(xiàn),需要配合一個偽元素。
.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: ""; }
五邊形
梯形加上一個三角形,很容易就能組合成一個五邊形,也需要配合一個偽元素來實現(xiàn)。
.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: ""; }
六邊形
如果兩個相反方向且底邊同樣大小的梯形,疊加在一起,是不是就能得到一個六邊形呢?同樣需要配合一個偽元素來實現(xiàn)。
.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: ""; }
實戰(zhàn)應(yīng)用
聊天氣泡
是不是用到了 向下的三角形
結(jié)合一個圓角矩形來實現(xiàn)。
下拉菜單
我們打開淘寶天貓,來看下它頂部的下拉菜單,是不是也用到 向上的三角形
和 向下的三角
形。
我們來看下它的實現(xiàn)代碼:
再來看一個,我們打開京東秒殺
是不是就用到了我們上面分析的 平行四邊形
來實現(xiàn)的,我們同樣來看下它的實現(xiàn)代碼:
就是通過一個矩形,然后配合兩個偽元素的三角形結(jié)合起來實現(xiàn)的。
具體使用場景還有很多,大家可以根據(jù)自己平時項目開發(fā)中的實際需求來發(fā)揮想象。
能用CSS樣式搞定的效果就不要使用圖片哈,不僅有利于后期的維護,也能減少網(wǎng)頁的請求,提高頁面的加載速度。
總結(jié)
其實通過各種組合,還可以實現(xiàn)很多不同的形狀,這里就不一一列舉了。比如還可以實現(xiàn) 八邊形
、 五角星
、 六角星
、 八角星
、 十二角星
等等, border
就是這么強大。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用CSS的border-radius屬性 設(shè)置圓弧
這篇文章主要介紹了使用CSS的border-radius屬性 設(shè)置圓弧,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-26詳解CSS3中的box-sizing(content-box與border-box)
這篇文章主要介紹了CSS3中的box-sizing(content-box與border-box)的相關(guān)資料,需要的朋友可以參考下2019-04-19- 這篇文章主要介紹了CSS繪制三角形的實現(xiàn)代碼(border法)的相關(guān)資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-11
- 本篇文章主要介紹了CSS3 用border寫 空心三角箭頭 (兩種寫法),非常具有實用價值,需要的朋友可以參考下2017-09-29
- 這是一款由腳本之家翻譯自國外網(wǎng)站的在線CSS工具,可在線調(diào)整生成樣式的邊框圓角效果,以及邊框的寬度、顏色、樣式等屬性,還可實時預(yù)覽生成的CSS代碼,并支持一鍵復(fù)制代碼2017-09-19
css display inline block 兼容性問題寫法
今天在寫布局的時候發(fā)現(xiàn)的一個bug,如果不這樣就達不到預(yù)期的效果,無法兩行排列,原來ie6、ie7下對display:inline-block不支持,所以需要用到css hack才可以2016-01-10- css3給display屬性提供了box這個值,極大的方便了開發(fā)者,下面給大家介紹css3 display box具體用法,對css3 display box相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2015-11-25
- 本篇文章給大家介紹css3 display知識詳解,涉及到css3 display相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧2015-11-25
深入解析CSS的display:inline-block屬性的使用
這篇文章主要介紹了CSS的display:inline-block屬性的使用,其中對使用時產(chǎn)生的空隙問題的解決作了重點講解,需要的朋友可以參考下2015-11-09- 在一般的CSS布局制作時候,我們常常會用到display對應(yīng)值有block、none、inline這三個值。下面我們來分別來認識和學(xué)習(xí)什么時候用什么值。這里通過CSS display知識加實例講解2014-09-02