前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
最近有個小夥伴問我,在某個網站看到一個使用 SVG 實現的炫彩三角邊框動畫,問能否使用 CSS 實現:
很有意思的一個動畫效果,立馬讓我想起了我在 CSS 奇思妙想邊框動畫 一文中介紹的邊框動畫,非常的類似:
其核心就是利用了角向漸變(conic-gradient
),然後將圖案的中心區域通過覆蓋遮罩一個小號的圖形實現。
然而,這個三角形動畫裡有兩個難點:
整個圖形是個三角形
在 CSS 中,我們可比較輕鬆的實現矩形與圓形,但是三角形這裡無疑會棘手很多。
整個邊框還附帶陰影,並且陰影還是在邊框的兩側
這裡看似不復雜,實則困難重重,如果採用上述的方法,將圖案的中心區域通過覆蓋遮罩一個小號的圖形實現鏤空,那麼另外一側的陰影如何產生?即便使用 drop-shadow
,也會被覆蓋的內側圖形給遮擋住。
當然,CSS 還是可以實現這個圖形的,本文就將講解如何使用 CSS 實現上述炫彩三角邊框動畫。
首先,我們還是需要藉助角向漸變 conic-gradient
實現整個動畫的主體。
<div></div>
登入後複製
@property --angle {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
div {
width: 260px;
height: 260px;
background: conic-gradient(from var(--angle), hsl(162, 100%, 58%), hsl(270, 73%, 53%), hsl(162, 100%, 58%));
animation: rotate 3s infinite linear;
}
@keyframes rotate {
to {
--angle: 360deg;
}
}
登入後複製
核心就僅僅只是一個角向漸變圖案,配合 CSS @Property,讓整個效果旋轉起來:
當然,如果這裡覺得 CSS @Property 不好理解或者擔心相容性問題,可以替換成利用偽元素實現同樣的圖形,然後進行 transform: rotate()
旋轉,效果一樣。
OK,接下來,我們需要基於矩形圖形得到三角形圖形,對於外圈的三角形,我們可以通過 clip-path
切割得到,也非常的簡單:
div {
width: 260px;
height: 260px;
background: conic-gradient(from var(--angle), hsl(162, 100%, 58%), hsl(270, 73%, 53%), hsl(162, 100%, 58%));
animation: rotate 3s infinite linear;
+ clip-path: polygon(0 100%, 100% 100%, 50% 0);
}
登入後複製
即可得到如下效果:
這樣,我們就得到了一個實心的三角形。接下來需要先辦法把內部給掏空。
最簡單的思路就是,通過疊加一個小一號的圖形在中間,顏色和背景色一致即可:
完整的程式碼你可以戳這裡 -- CodePen Demo -- Pure CSS Linear Triangle
但是,這樣做有兩個致命問題:
如果背景色不是實色而是漸變色,這個方法就失效了
這個方法實現的三角形邊框內側無法新增陰影效果
這兩個缺陷都是不可接受的,所以我們必須尋找真正能夠鏤空中間的方式,鏤空完成後,它的中心得是透明的。
因此,這裡我們得使用 mask。
不過使用 mask 基於這樣一個圖形再實現一個小一號的三角形是比較麻煩的,我們相當於要實現這樣一個鏤空三角形圖形,示意圖如下:
這樣一個圖形,配合 clip-path
,就能得到一個三角形邊框圖形,啥意思呢,我這裡製作了一個動圖示意:
左邊是利用 mask
實現遮罩後的圖形,右邊是利用 clip-path
切割後的圖形,它們的效果疊加在一起,就能實現一個邊框三角形。
當然,這裡需要對 mask 掌握的比較深入,要使用 mask 切割一個內部鏤空的三角形示意圖如下:
OK,完整的程式碼是這樣:
@property --angle {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
div {
width: 260px;
height: 260px;
background: conic-gradient(from var(--angle), hsl(162, 100%, 58%), hsl(270, 73%, 53%), hsl(162, 100%, 58%));
clip-path: polygon(0 100%, 100% 100%, 50% 0);
mask:
linear-gradient(117deg, #000 55%, transparent 55%, transparent),
linear-gradient(-117deg, #000 55%, transparent 55%, transparent),
linear-gradient(#000, #000);
mask-position: 0 0, 130px 0, 0 250px;
mask-size: 130px 250px, 130px 250px, 100% 10px;
mask-repeat: no-repeat;
animation: rotate 3s infinite linear;
}
@keyframes rotate {
to {
--angle: 360deg;
}
}
登入後複製
我們就得到了一個內部鏤空的三角形邊框了:
最後一步就比較簡單了,由於上述三角形已經是一個鏤空圖形,這裡直接使用 drop-shadow
給元素加上一層光影效果即可,不過由於使用了 clip-path
,直接在原元素上新增的 drop-shadow
無法展示,這個好解決,我們只需要多套一層結構,將 drop-shadow
新增到父元素上即可:
<div class="g-container">
<div class="g-triangle"></div>
</div>
登入後複製
登入後複製
@property --angle {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
.g-container {
width: 260px;
height: 260px;
filter: drop-shadow(0 0 5px hsl(162, 100%, 58%)) drop-shadow(0 0 10px hsl(270, 73%, 53%));
}
.g-triangle {
width: 260px;
height: 260px;
background: conic-gradient(from var(--angle), hsl(162, 100%, 58%), hsl(270, 73%, 53%), hsl(162, 100%, 58%));
clip-path: polygon(0 100%, 100% 100%, 50% 0);
mask:
linear-gradient(117deg, #000 55%, transparent 55%, transparent),
linear-gradient(-117deg, #000 55%, transparent 55%, transparent),
linear-gradient(#000, #000);
mask-position: 0 0, 130px 0, 0 250px;
mask-size: 130px 250px, 130px 250px, 100% 10px;
mask-repeat: no-repeat;
animation: rotate 3s infinite linear;
}
@keyframes rotate {
to {
--angle: 360deg;
}
}
登入後複製
這裡又是一個小技巧,drop-shadow
是可以重複新增多個的,這裡新增的兩個陰影顏色就是 conic-gradient()
裡設定的顏色,最終,我們就得到了題圖所示效果:
完整的程式碼你可以戳這裡 -- CodePen Demo -- Pure CSS Glowing Triangle
上面利用了 clip-path
剪下外三角形,mask
鏤空內三角形,經提醒,其實 clip-path
可以獨自裁剪出一個環形三角形。
上述程式碼也可以簡化成:
<div class="g-container">
<div class="g-triangle"></div>
</div>
登入後複製
登入後複製
@property --angle {
syntax: '<angle>';
inherits: false;
initial-value: 0deg;
}
.g-container {
width: 260px;
height: 260px;
filter: drop-shadow(0 0 5px hsl(162, 100%, 58%)) drop-shadow(0 0 10px hsl(270, 73%, 53%));
}
.g-triangle {
width: 200px;
height: 200px;
clip-path:
polygon(
50% 0%,
0% 100%,
8% 100%,
50% 15%,
88% 93%,
7% 93%,
7% 100%,
100% 100%
);
background: conic-gradient(from var(--angle), hsl(162, 100%, 58%), hsl(270, 73%, 53%), hsl(162, 100%, 58%));
animation: rotate 3s infinite linear;
}
@keyframes rotate {
to {
--angle: 360deg;
}
}
登入後複製
效果一樣:
完整的程式碼你可以戳這裡 -- CodePen Demo -- Pure CSS Glowing Triangle
這裡有必要講解一下,使用 clip-path
切割一個環形圖案,是可以做到的。假設,我們需要一個正方形環形,其點順序如下:
{
clip-path: polygon(0% 0%,0% 100%,25% 100%,25% 25%,75% 25%,75% 75%,25% 75%,14% 100%,100% 100%,100% 0%);
}
登入後複製
即可得到:
同理,需要得到一個三角形環形,只需要 7 個點即可:
{
clip-path: polygon(50% 0%,0% 100%,13% 100%,50% 20%,85% 90%,8% 90%,8% 100%,100% 100%);
}
登入後複製
效果如下:
這裡有個很好用的工具,輔助製作 clip-path
圖形, 感興趣可以試下:CSS clip-path Editor
瞭解上述完整程式碼,你可能還需要補齊一些基礎 CSS 知識,可以按需點進去了解:
好了,本文到此結束,希望本文對你有所幫助
原文地址:https://www.cnblogs.com/coco1s/p/15958444.html
作者:ChokCoco
更多程式設計相關知識,請存取:!!
以上就是手把手帶你使用CSS建立炫彩三角邊框動畫的詳細內容,更多請關注TW511.COM其它相關文章!