【面試技巧】老生常談之 n 種使用 CSS 實現三角形的技巧

ChokCoco發表於2021-04-12

在一些面經中,經常能看到有關 CSS 的題目都會有一道如何使用 CSS 繪製三角形,而常見的回答通常也只有使用 border 進行繪製一種方法。

而 CSS 發展到今天,其實有很多有意思的僅僅使用 CSS 就能繪製出來的三角形的方式,本文將具體羅列講講。

通過本文,你能瞭解到 6 種使用 CSS 繪製三角形的方式,並且它們都非常好掌握。

當然本文僅是拋磚引玉,CSS 日新月異,可能還有一些有意思的方法本文遺漏了,歡迎大家在留言區補充~

使用 border 繪製三角形

使用 border 實現三角形應該是大部分人都掌握的,也是各種面經中經常出現的,利用了高寬為零的容器及透明的 border 實現。

簡單的程式碼如下:

div {
  border-top: 50px solid yellowgreen;
  border-bottom: 50px solid deeppink;
  border-left: 50px solid bisque;
  border-right: 50px solid chocolate;
}

高寬為零的容器,設定不同顏色的 border:

image

這樣,讓任何三邊的邊框的顏色為 transparent,則非常容易得到各種角度的三角形:

image

CodePen Demo - 使用 border 實現三角形

使用 linear-gradient 繪製三角形

接著,我們使用線性漸變 linear-gradient 實現三角形。

它的原理也非常簡單,我們實現一個 45° 的漸變:

div {
  width: 100px;
  height: 100px;
  background: linear-gradient(45deg, deeppink, yellowgreen);
}

image

讓它的顏色從漸變色變為兩種固定的顏色:

div {
  width: 100px;
  height: 100px;
  background: linear-gradient(45deg, deeppink, deeppink 50%, yellowgreen 50%, yellowgreen 100%);
}

image

再讓其中一個顏色透明即可:

div {
  background: linear-gradient(45deg, deeppink, deeppink 50%, transparent 50%, transparent 100%);
}

image

通過旋轉 rotate 或者 scale,我們也能得到各種角度,不同大小的三角形,完整的 Demo 可以戳這裡:

CodePen Demo - 使用線性漸變實現三角形

使用 conic-gradient 繪製三角形

還是漸變,上述我們使用了線性漸變實現三角形,有意思的是,在漸變家族中,角向漸變 conic-gradient 也可以用於實現三角形。

方法在於,角向漸變的圓心點是可以設定的,類似於徑向漸變的圓心點也可以被設定。

我們將角向漸變的圓心點設定於 50% 0,也就是 center top,容器最上方的中間,再進行角向漸變,漸變到一定的角度範圍內,都是三角形圖形。

假設我們有一個 200px x 100px 高寬的容器,設定其角向漸變圓心點為 50% 0

image

並且,設定它從 90° 開始畫角向漸變圖,示意圖如下:

1

可以看到,在初始的時候,角向漸變圖形沒有到第二條邊的之前,都是三角形,我們選取適合的角度,非常容易的可以得到一個三角形:

div {
    background: conic-gradient(from 90deg at 50% 0, deeppink 0, deeppink 45deg, transparent 45.1deg);
}

image

上述程式碼中的 deeppink 45deg, transparent 45.1deg 多出來的 0.1deg 是為了簡單消除漸變產生的鋸齒的影響,這樣,我們通過 conic-gradient,也輕鬆的得到了一個三角形。

同理,再配合旋轉 rotate 或者 scale,我們也能得到各種角度,不同大小的三角形,完整的 Demo 可以戳這裡:

CodePen Demo - 使用角向漸變實現三角形

transform: rotate 配合 overflow: hidden 繪製三角形

這種方法還是比較常規的,使用 transform: rotate 配合 overflow: hidden。一看就懂,一學就會,簡單的動畫示意圖如下:

設定圖形的旋轉中心在左下角 left bottom,進行旋轉,配合 overflow: hidden

完整的程式碼:

.triangle {
    width: 141px;
    height: 100px;
    position: relative;
    overflow: hidden;
    
    &::before {
        content: "";
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: deeppink;
        transform-origin: left bottom;
        transform: rotate(45deg);
    }
}

CodePen Demo - transform: rotate 配合 overflow: hidden 實現三角形

使用 clip-path 繪製三角形

clip-path 一個非常有意思的 CSS 屬性。

clip-path CSS 屬性可以建立一個只有元素的部分割槽域可以顯示的剪下區域。區域內的部分顯示,區域外的隱藏。剪下區域是被引用內嵌的 URL 定義的路徑或者外部 SVG 的路徑。

也就是說,使用 clip-path 可以將一個容器裁剪成任何我們想要的樣子。

通過 3 個座標點,實現一個多邊形,多餘的空間則會被裁減掉,程式碼也非常簡單:

div {
    background: deeppink;
    clip-path: polygon(0 0, 100% 0, 0 100%, 0 0);
}

image

CodePen Demo - 使用 clip-path 實現三角形

在這個網站中 -- CSS clip-path maker,你可以快捷地建立簡單的 clip-path 圖形,得到對應的 CSS 程式碼。

利用字元繪製三角形

OK,最後一種,有些獨特,就是使用字元表示三角形。

下面列出一些三角形形狀的字元的十進位制 Unicode 表示碼。

◄ : ◄ 
► : ► 
▼ : ▼ 
▲ : ▲
⊿ : ⊿
△ : △

譬如,我們使用 ▼ 實現一個三角形 ▼,程式碼如下:

<div class="normal">&#9660; </div>
div {
    font-size: 100px;
    color: deeppink;
}

效果還是不錯的:

image

然而,需要注意的是,使用字元表示三角形與當前設定的字型是強相關的,不同的字型繪製出的同一個字元是不一樣的,我在 Google Font 上隨機選取了幾個不同的字型,分別表示同一個字元,得到的效果如下:

image

可以看到,不同字型的形狀、大小及基線都是不一樣的,所以如果你想使用字元三角形,確保使用者的瀏覽器安裝了你指定的字型,否則,不要使用這種方式。

完整的對比 Demo,你可以戳這裡:

CodePen Demo - 使用字元實現三角形

最後

好了,本文到此結束,關於使用 CSS 繪製三角的 6 種不同方式,希望對你有幫助 ?

想 Get 到最有意思的 CSS 資訊,千萬不要錯過我的公眾號 -- iCSS前端趣聞 ?

更多精彩 CSS 技術文章彙總在我的 Github -- iCSS ,持續更新,歡迎點個 star 訂閱收藏。

如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。

相關文章