css 實現各類基本圖形

三角形

寫 css 的時候,用慣了背景圖,忽略了 css 自己其實能夠實現不少簡單的基本圖形,好比三角形:css

.triangle {
    border-style: solid;
    border-width: 20px;
    border-color: #000 transparent transparent;
    width: 0px;
    height: 0px;
}

效果圖:web

clipboard.png

百思不得qijie,爲啥寬高爲 0,卻能顯示一個三角形?日常的邊框,看上去都是四條直線,其實否則,修改三角型代碼,展現其兩條邊爲例:學習

.triangle {
    border-style: solid;
    border-width: 20px;
    border-color: #000 blue transparent transparent;
    width: 50px;
    height: 50px;
}

效果圖:spa

clipboard.png

恍然大悟,原來邊框實際上是等腰梯形3d

那麼還能夠作其餘哪些圖形(如下代碼摘自 the shapes of css)?code

圓形

clipboard.png

#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

平行四邊形

clipboard.png

#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

五角形

是時候提升下難度了,咱們來看下怎麼畫五角形⭐️?五角星能夠當作是由三個等腰三角形組成。

clipboard.png

三角形三個角分別是 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;

clipboard.png

經過給邊框設置不一樣的長度,會影響到邊框的形狀:以上圖紅色三角形爲例它的底邊長爲 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: '';
}

其餘有趣的圖形

鑽石

clipboard.png

經過一個梯形和一個三角形組合而成

吃豆人

clipboard.png

一個圓形,隱藏右側邊

對話框

clipboard.png

一個三角形,加一個圓角矩形

相關文章
相關標籤/搜索