寫 css 的時候,用慣了背景圖,忽略了 css 自己其實能夠實現不少簡單的基本圖形,好比三角形:css
.triangle { border-style: solid; border-width: 20px; border-color: #000 transparent transparent; width: 0px; height: 0px; }
效果圖:web
百思不得qijie,爲啥寬高爲 0,卻能顯示一個三角形?日常的邊框,看上去都是四條直線,其實否則,修改三角型代碼,展現其兩條邊爲例:學習
.triangle { border-style: solid; border-width: 20px; border-color: #000 blue transparent transparent; width: 50px; height: 50px; }
效果圖:spa
恍然大悟,原來邊框實際上是等腰梯形!3d
那麼還能夠作其餘哪些圖形(如下代碼摘自 the shapes of css)?code
#circle { width: 200px; height: 200px; background: red; -moz-border-radius: 50%; -webkit-border-radius: 50%; border-radius: 50%; }
主要利用了 border-radius
屬性,將矩形圓角化。其值可使用長度(px
),也可使用百分比。百分比會轉化成長度,好比此例中,50% 表示 水平圓角半徑=寬度*50%
,垂直圓角半徑=高度*50%
因此直接寫 100px
也是等價的。orm
#parallelogram { width: 150px; height: 100px; -webkit-transform: skew(160deg); -moz-transform: skew(160deg); -o-transform: skew(160deg); background: red; }
利用 transform
傾斜特性以下:blog
向x軸方向(水平向右)傾斜 160°:能夠想象爲矩形的右側邊沿着逆時針方向旋轉 160°(當旋轉 90° 時,四條邊重合,圖形會消失;當旋轉超過 90° 時,相似對稱;當旋轉超過 180° 時,便相似轉圈了)ip
向 y 軸方向(水平向下)傾斜,能夠想象爲矩形底邊沿着順時針方向旋轉。ci
是時候提升下難度了,咱們來看下怎麼畫五角形⭐️?五角星能夠當作是由三個等腰三角形組成。
三角形三個角分別是 36°、36°、108°,此時畫五角星等價於畫三個三角形。文章開頭提到的方法只能畫角度固定的等腰三角形。仔細研究下 border
,其實角度是可控的,以下所示:
width: 10px; height:10px; border-right: 100px solid green; border-bottom: 70px solid red; border-top: 20px solid blue; border-left: 50px solid black;
經過給邊框設置不一樣的長度,會影響到邊框的形狀:以上圖紅色三角形爲例它的底邊長爲 border-left + border-right
;高中學習的餘弦定理得知:經過已知三角形的角度和任意一邊的長度,能夠肯定三角形的形狀。因此理論上,經過控制一個 div
三條 border
的長度,進而實現不一樣大小的三角形是可行。實踐了一番,因爲很可貴到一個整數值,因此經過這種方法畫正五角形幾乎是沒法實現的。
原文的代碼以下(很驚訝原做者是如何算出來這些邊框寬度的):
#star-five { margin: 50px 0; position: relative; display: block; color: red; width: 0px; height: 0px; border-right: 100px solid transparent; border-bottom: 70px solid red; border-left: 100px solid transparent; -moz-transform: rotate(35deg); -webkit-transform: rotate(35deg); -ms-transform: rotate(35deg); -o-transform: rotate(35deg); } #star-five:before { border-bottom: 80px solid red; border-left: 30px solid transparent; border-right: 30px solid transparent; position: absolute; height: 0; width: 0; top: -45px; left: -65px; display: block; content: ''; -webkit-transform: rotate(-35deg); -moz-transform: rotate(-35deg); -ms-transform: rotate(-35deg); -o-transform: rotate(-35deg); } #star-five:after { position: absolute; display: block; color: red; top: 3px; left: -105px; width: 0px; height: 0px; border-right: 100px solid transparent; border-bottom: 70px solid red; border-left: 100px solid transparent; -webkit-transform: rotate(-70deg); -moz-transform: rotate(-70deg); -ms-transform: rotate(-70deg); -o-transform: rotate(-70deg); content: ''; }
鑽石
經過一個梯形和一個三角形組合而成
吃豆人
一個圓形,隱藏右側邊
對話框
一個三角形,加一個圓角矩形