搜尋
首頁web前端css教學巧用css filter的drop-shadow()函數來建立線條光影效果

本文將介紹一種利用CSS 濾鏡filter 的drop-shadow(),實現對HTML 元素及SVG 元素的部分添加陰影效果,以實現一種酷炫的光影效果,用於各種不同的場景之中。

巧用css filter的drop-shadow()函數來建立線條光影效果

透過本文,你可以學到:

  • 如何利用filter: drop-shadow() 為元素的部分內容加上單重及多重陰影,以及利用多重陰影實現Neon 效果

  • #HTML 元素配合filter: drop-shadow()以及SVG 元素配合filter: drop-shadow() 產生的光影效果

使用WebGL 實現的線條光影Neon 動畫

某天在逛CodePen 的時候,發現了一個很有意思的,使用WebGL 實現的線條光影效果-- NEON LOVE,非常的有趣:

巧用css filter的drop-shadow()函數來建立線條光影效果

但是由於原始程式碼是使用WebGL 完成,繪製如此簡單的一個效果,透過GLSL 著色器等程式碼,接近了300 行。

那麼,我們能否使用 HTML(SVG) CSS 來實現它呢?

利用 drop-shadow 對元素的部分內容添加單重及多重陰影

#首先,要實現上述效果,很重要的一步是為元素的部分內容添加上陰影。

假設我們有這樣一個圖形:

<div></div>

我們給這個div 圖形設定border-radius: 50%,並且新增一個border-top

div {
    width: 200px;
    height: 200px;
    border-top: 5px solid #000;
    border-radius: 50%;
}

結果如下:

巧用css filter的drop-shadow()函數來建立線條光影效果

如果我希望,僅僅只給這個圓弧添加陰影,嘗試使用box-shadow

div {
    width: 200px;
    height: 200px;
    border-top: 5px solid #000;
    border-radius: 50%;
  + box-shadow: 0 0 5px #000;
}

emm,很明顯是不行的,陰影會加給整個div:

巧用css filter的drop-shadow()函數來建立線條光影效果

為了解決這種情況,聰明的同學會立刻想到filter: drop-shadow(),它就是為了解決這個問題而誕生的,box-shadow 屬性在元素的整個框後面創建一個矩形陰影, 而drop -shadow() 濾鏡則是建立一個符合影像本身形狀(alpha 通道)的陰影。

好,我們使用drop-shadow() 替換box-shadow

div {
    width: 200px;
    height: 200px;
    border-top: 5px solid #000;
    border-radius: 50%;
  - box-shadow: 0 0 5px #000;
  + filter: drop-shadow(0 0 5px #000);
}

這樣,我們就能得到符合圖像本身形狀( alpha 通道)的陰影:

巧用css filter的drop-shadow()函數來建立線條光影效果

並且,drop-shadow() 也可以對一個圖像作用多次,實現類似陰影的多重陰影效果:

div {
    ...
    filter: 
        drop-shadow(0 0 2px #000)
        drop-shadow(0 0 5px #000)
        drop-shadow(0 0 10px #000)
        drop-shadow(0 0 20px #000);
}

我們將得到可見部分圖案的多重陰影疊加效果:

巧用css filter的drop-shadow()函數來建立線條光影效果

#我們將上述例子的黑白顏色對換一下,就能得到一副很有意境的圖案,像是在深邃的太空中看某個透光的星球般:

巧用css filter的drop-shadow()函數來建立線條光影效果

#CodePen Demo -- multi drop-shadow Neon

實作心形線條動畫

接下來,就是實作心形線條動畫了,這點利用SVG 還是比較簡單的。

我們首先需要得到一個利用 SVG <path></path> 實作的心形形狀,可以選擇自己繪製 SVG 路徑,也可以藉助一些工具完成。

這裡我借助了這個工具得到一個心形的Path 路徑:SVGPathEditor

透過工具,快速繪製想要的形狀,拿到對應的Path:

巧用css filter的drop-shadow()函數來建立線條光影效果

核心就是要拿到這段SVG Path 路徑:

M 400 160 A 2 2 90 0 0 260 160 A 2 2 90 0 0 120 160 C 120 230 260 270 260 350 C 260 270 400 230 400 160

有了它,利用SVG 的stroke-dasharraystroke-offset,我們可以輕鬆的得到一個心形追逐動畫:

<div class="container">
    <svg>
        <path class="line" d="M 400 160 A 2 2 90 0 0 260 160 A 2 2 90 0 0 120 160 C 120 230 260 270 260 350 C 260 270 400 230 400 160" />
    </svg>
    <svg>
        <path class="line line2" d="M 400 160 A 2 2 90 0 0 260 160 A 2 2 90 0 0 120 160 C 120 230 260 270 260 350 C 260 270 400 230 400 160" />
    </svg>
</div>
body {
    background: #000;
}
svg {
    position: absolute;
}
.container {
    position: relative;
}
.line {
    fill: none;
    stroke-width: 10;
    stroke-linejoin: round;
    stroke-linecap: round;
    stroke: #fff;
    stroke-dasharray: 328 600;
    animation: rotate 2s infinite linear;  
}
.line2 {
    animation: rotate 2s infinite -1s linear;   
}
@keyframes rotate {
  0% {
    stroke-dashoffset: 0;
  }
  100% {
    stroke-dashoffset: 928;
  }
}

#簡單解釋上上述程式碼:

  • ##兩個相同的SVG 圖形,透過

    stroke-dashoffset 將完整的線條圖形截成部分

  • #透過

    stroke-dashoffset 的從0 到928 的變化,實現一次完整的線條動畫循環(這裡的928 是完整的path 的長度,可以透過JavaScript 腳本求出)

  • 整个动画过程 2s,设置其中一个的 animation-delay: -1s,也就是提前 1s 触发动画,这样就实现了两个心形线条的追逐动画

效果如下:

巧用css filter的drop-shadow()函數來建立線條光影效果

给线条添加光影

有了上述两步的铺垫,这一步就非常好理解了。

最后,我们只需要给两段 SVG 线条,利用 drop-shadow() 添加不同颜色的多重阴影即可:

.line {
    ...
    --colorA: #f24983;
    filter:
        drop-shadow(0 0 2px var(--colorA))
        drop-shadow(0 0 5px var(--colorA))
        drop-shadow(0 0 10px var(--colorA))
        drop-shadow(0 0 15px var(--colorA))
        drop-shadow(0 0 25px var(--colorA));
}

.line2 {
    --colorA: #37c1ff;
}

最终,我们就利用 SVG + CSS 近乎完美的复刻了文章开头使用 WebGL 实现的效果:

巧用css filter的drop-shadow()函數來建立線條光影效果

完整的代码,你可以猛击 -- CSS 灵感 - SVG 配合 drop-shadow 实现线条光影效果

扩展延伸

当然,掌握了上述的技巧后,还有非常多有意思的效果我们可以去探索实现的,这里我简单的抛砖引玉。罗列两个我自己尝试的效果。

其中一大类是运用于按钮之上,可以实现按钮带光影的按钮效果,下图是其中一个的示意,巧妙运用 stroke-dashoffset,它可以有非常多的变形:

巧用css filter的drop-shadow()函數來建立線條光影效果

完整源代码可以猛击 CodePen -- Neon Line Button

当然,我们也不是一定要借助 SVG,仅仅是 HTML + CSS 也是可以运用这个效果,利用它实现一个简单的 Loading 效果:

1巧用css filter的drop-shadow()函數來建立線條光影效果

完整源代码可以猛击 CodePen -- Neon Loading

最后

好了,本文到此结束,希望对你有帮助 :)

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

原文地址:https://juejin.cn/post/7016521320183644173

作者:chokcoco

更多编程相关知识,请访问:编程视频!!

以上是巧用css filter的drop-shadow()函數來建立線條光影效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金--chokcoco。如有侵權,請聯絡admin@php.cn刪除
模擬鼠標運動模擬鼠標運動Apr 22, 2025 am 11:45 AM

如果您曾經在現場演講或課程中必須顯示一個互動動畫,那麼您可能知道它並不總是那麼容易與您的幻燈片進行互動

通過Astro Action和Fuse.js為搜索提供動力通過Astro Action和Fuse.js為搜索提供動力Apr 22, 2025 am 11:41 AM

對於Astro,我們可以在構建過程中生成大部分網站,但是有一小部分服務器端代碼可以使用Fuse.js之類的搜索功能來處理搜索功能。在此演示中,我們將使用保險絲搜索一組個人“書籤”

未定義:第三個布爾值未定義:第三個布爾值Apr 22, 2025 am 11:38 AM

我想在我的一個項目中實現一條通知消息,類似於您在保存文檔時在Google文檔中看到的信息。換句話說,一個

捍衛三元聲明捍衛三元聲明Apr 22, 2025 am 11:25 AM

幾個月前,我正在使用黑客新聞(就像一個人一樣),並且遇到了一篇(現已刪除的)文章,內容涉及不使用if語句。如果您是這個想法的新手(就像我

使用網絡語音API進行多語言翻譯使用網絡語音API進行多語言翻譯Apr 22, 2025 am 11:23 AM

自科幻小說以來,我們就幻想著與我們交談的機器。今天這很普遍。即便如此,製造的技術

JetPack Gutenberg塊JetPack Gutenberg塊Apr 22, 2025 am 11:20 AM

我記得當古騰堡被釋放到核心時,因為那天我在WordCamp我們。現在已經過去了幾個月,所以我想我們越來越多的人

在VUE中創建可重複使用的分頁組件在VUE中創建可重複使用的分頁組件Apr 22, 2025 am 11:17 AM

大多數Web應用程序背後的想法是從數據庫中獲取數據,並以最佳方式將其呈現給用戶。當我們處理數據時

使用'盒子陰影”和剪輯路徑一起使用'盒子陰影”和剪輯路徑一起Apr 22, 2025 am 11:13 AM

讓我們在一個情況下做一些似乎有意義的事情的情況下逐步進行一些逐步,但是您仍然可以用CSS欺騙來完成它。在這個

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版