歡迎關注我的公眾號:前端偵探
提到錐形漸變conic-gradient(也有的稱“角向漸變”),很多人都被這個名稱給迷惑了,以為就是用來畫圓錐的,比如
div {
background-image: conic-gradient(from 40deg, #fff, #000);
}
這樣可以得到錐形的放射性圖案
當然,再進一步,可以繪製餅圖
div {
background: conic-gradient(
red 36deg, orange 36deg 170deg, yellow 170deg);
border-radius: 50%
}
這個也比較容易想到,如下
這類錐形都比較直觀,除了這些,還能繪製哪些圖案呢?下面就來介紹一些比較實用的案例。
一、三角形
在錐形漸變出來之前,用線性漸變也能實現三角形,但只能繪製直角三角形,例如
div{
background: linear-gradient( -45deg, royalblue 50%, transparent 0);
}
可以得到這樣的圖形
如果想要一個這樣的三角形
那隻能用兩個直角三角形拼接了,就像這樣
如果是用錐形漸變,就可以直接一層漸變搞定,比如上面這個,起始角度是 -45deg
,漸變了90deg
,示意如下
用程式碼實現就是
div{
background: conic-gradient( from -45deg, royalblue 90deg, transparent 0deg);
}
像之前這篇文章中的小三角就可以用這個方式來繪製
二、箭頭符號
將三角形改變一下角度,比如
div{
background: conic-gradient(from 30deg, royalblue 120deg, transparent 0deg);
background-size: 40px 60px;
background-repeat: no-repeat;
}
可以得到這樣的圖形
再繪製一個反向鏤空的三角(三角是透明的)
div{
background: conic-gradient(from 30deg at 0 50%, transparent 120deg, royalblue 0deg);
background-size: 40px 60px;
background-repeat: no-repeat;
}
為了區分,換個顏色
接下來,改變一下兩者的位置,組合起來
div{
background-position: 20px 50%, -20px 50%;
}
效果如下
最後水平方向平鋪,並且改成相同的顏色,就能得到這樣的箭頭符號
三、河流符號
這個比較簡單,在上面的基礎上,垂直方向上平鋪就行了,需要調節垂直尺寸
div{
background-size: 40px 30px;
}
這是30px
的效果
這是40px
的效果
CSSBattle中有一個就是類似這樣的圖案,可以參考一下
四、角標效果
這是一個四周都有個三角形的角標效果
如果是線性漸變,我們可能需要 4
個漸變才能完成,但如果是錐形漸變,我們只需要兩個就行了,下面是實現過程:
先畫一個三角
div{
background: conic-gradient( from -45deg, royalblue 90deg, transparent 0deg);
}
和上面一樣
預設情況下,錐形漸變中心是畫布正中心,也就是50% 50%
的地方,我們可以手動指定中心點位置,需要用到at
關鍵詞
div{
background: conic-gradient( from -45deg at 10px 10px, royalblue 90deg, transparent 0deg);
}
這就將整個圖形的移到了左上角
然後改變整個背景圖形的位置,向左偏移10px
div{
background: conic-gradient( from -45deg at 10px 10px, royalblue 90deg, transparent 0deg);
background-position: -10px 0;
}
利用背景的重複平鋪,一個三角形就被拆分成了兩個小三角形
有點看不明白?下面是一個動畫演示(虛線表示視區範圍)
然後用同樣的方式,畫出下面的兩個角標,完整程式碼如下
div{
background: conic-gradient( from -45deg at 10px 10px, royalblue 90deg, transparent 0deg),
conic-gradient( from 135deg at left 10px bottom 10px, royalblue 90deg, transparent 0deg);
background-position: -10px 0;
}
這樣就得到了三角形角標的效果,並且這個跟容器尺寸無關,完全是自適應的
五、矩形、正方形
還可以透過錐形漸變繪製矩形。
div{
background: conic-gradient( royalblue 90deg, transparent 0deg);
}
這樣就能得到一個矩形
還可以透過改變中心點和起始角度,繪製不同位置、不同大小的矩形
比如起始角度是-90deg
div{
background: conic-gradient( from -90deg, royalblue 90deg, transparent 0deg);
}
起始角度是180deg
div{
background: conic-gradient( from -90deg, royalblue 90deg, transparent 0deg);
}
這個應該比較容易,相比線性漸變而言,錐形漸變可以做的更多,下面看一些應用
六、正方形角標
和前面三角形角標比較類似,只是角標是正方形的
這個用錐形漸變就非常簡單了
首先是繪製一個正方形
div{
background: conic-gradient( from -90deg, royalblue 90deg, transparent 0deg);
}
然後將中心點移到左上方
div{
background: conic-gradient( from -90deg at 20px 20px, royalblue 90deg, transparent 0deg);
}
這樣可以得到一個尺寸固定的正方形(20px * 20px),因為中心點在這裡
最後一步,改變一下背景尺寸就行了,預設是 100% * 100%
,原理如下
用程式碼實現就是
div{
background: conic-gradient( from -90deg at 20px 20px, royalblue 90deg, transparent 0deg);
background-size: calc(100% - 20px) calc(100% - 20px);
}
這樣藉助背景平鋪,自然就實現了下面的效果
七、棋盤
錐形漸變還能輕易的實現棋盤效果
之前在這篇文章文章有詳細介紹:CSS 實現透明方格的 3 種方式
原理非常簡單,建立兩段透明間隔的漸變就行了
div{
background: conic-gradient( royalblue 90deg, transparent 0deg 180deg, royalblue 180deg 270deg, transparent 0deg);
background-size: 20px 20px;
}
原理示意如下
八、虛線網格
有時候需要這樣的虛線背景,也可以用錐形漸變實現
之前在這篇文章中有詳細介紹,有興趣可以參考:CSS & SVG 繪製寫作網格線的3種方式
原理和前面幾乎一致,需要改變中心點位置,然後設定背景尺寸,示意如下
具體細節這裡就不重複了,完整實現如下
div{
background: conic-gradient( from -90deg at 10px 4px, royalblue 90deg, transparent 0deg);
background-size: 30px 30px;
}
九、十字線背景
將兩個方向上的虛線疊加就能得到十字線背景
完整實現如下
div{
background: conic-gradient( from -90deg at 10px 4px, royalblue 90deg, transparent 0deg),
conic-gradient( from -90deg at 4px 10px, royalblue 90deg, transparent 0deg);
background-size: 30px 30px;
background-position: 0 3px, 3px 0;
}
十、折線角標
最後看這樣一個例子
仔細觀察,其實和前面的三角形角標比較類似,只是三角形變成了折角,根據前面的思路,反向思考,這四個角其實可以合併成一個十字形,如下
而十字形可以根據前面的方式得到,完整實現如下
div{
background: conic-gradient( from -90deg at 20px 8px, royalblue 90deg, transparent 0deg),
conic-gradient( from -90deg at 8px 20px, royalblue 90deg, transparent 0deg);
background-position: -10px -4px, -4px -10px;
}
十一、demo 和 總結
以上介紹了錐形漸變10個比較實用的案例,以後就別以為錐形漸變僅僅只能畫圓錐了,上面 10 個 demo 我都整合在一個連結上了:
為啥要透過 CSS 繪製?CSS 繪製意味著尺寸都是動態可控的,可以完美適配容器的各種尺寸,而且顏色也可以隨時更換。如果你需要的圖形是固定的,不需要考慮自適應,也不需要改變顏色,大可以採用切圖的方式,當然也可以透過 CSS 繪製來學習、提升自己的CSS水平。最後,如果覺得還不錯,對你有幫助的話,歡迎點贊、收藏、轉發❤❤❤
歡迎關注我的公眾號:前端偵探