CSS 필터의 drop-shadow() 기능을 영리하게 사용하여 선 조명 및 그림자 효과 만들기
이 기사에서는 CSS 필터 drop-shadow()
를 사용하여 HTML 요소 및 SVG 요소의 일부에 그림자 효과를 추가하여 다양한 시나리오에서 멋진 빛과 그림자 효과를 얻는 방법을 소개합니다. . drop-shadow()
,实现对 HTML 元素及 SVG 元素的部分添加阴影效果,以实现一种酷炫的光影效果,用于各种不同的场景之中。
通过本文,你可以学到:
如何利用
filter: drop-shadow()
对元素的部分内容添加单重及多重阴影,以及利用多重阴影实现 Neon 效果HTML 元素配合
filter: drop-shadow()
以及 SVG 元素配合filter: drop-shadow()
生成的光影效果
使用 WebGL 实现的线条光影 Neon 动画
某天在逛 CodePen 的时候,发现了一个非常有意思的,使用 WebGL 实现的线条光影效果 -- NEON LOVE,非常的有意思:
但是由于源代码是使用 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%; }
结果如下:
如果我希望,仅仅只给这个圆弧添加阴影,尝试使用 box-shadow
:
div { width: 200px; height: 200px; border-top: 5px solid #000; border-radius: 50%; + box-shadow: 0 0 5px #000; }
emm,明显是不行的,阴影会加给整个 div:
为了解决这种情况,聪明的同学会立马想到 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 通道)的阴影:
并且,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); }
我们将得到可见部分图案的多重阴影叠加效果:
我们将上述例子的黑白颜色对换一下,就能得到一副很有意境的图案,像是在深邃的太空中看某个透光的星球般:
CodePen Demo -- multi drop-shadow Neon
实现心形线条动画
接下来,就是实现心形线条动画了,这点利用 SVG 还是比较简单的。
我们首先需要得到一个利用 SVG <Path>
实现的心形形状,可以选择自己绘制 SVG 路径,也可以借助一些工具完成。
这里我借助了这个工具得到一个心形的 Path 路径:SVGPathEditor
通过工具,快速绘制想要的形状,拿到对应的 Path:
核心就是拿到这一段 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-dasharray
和 stroke-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
🎜🎜이 기사를 통해 다음 내용을 배울 수 있습니다.🎜
- 🎜
filter: drop-shadow()
를 사용하여 요소 콘텐츠의 일부에 단일 및 다중 그림자를 추가하는 방법 및 네온 효과를 얻으려면 여러 그림자를 사용하세요🎜 - 🎜
filter: drop-shadow()
가 있는 HTML 요소와filter: drop이 있는 SVG 요소에 의해 생성된 빛과 그림자 효과 -shadow()
🎜
WebGL을 사용하여 구현한 선 빛과 그림자 네온 애니메이션
🎜어느 날 CodePen을 탐색하던 중 , WebGL로 구현된 선 조명 및 그림자 효과를 사용하여 매우 흥미로운 것을 발견했습니다. NEON LOVE, 매우 흥미롭습니다 :🎜🎜🎜🎜 하지만 소스코드는 WebGL을 이용해서 완성되기 때문에 이런 간단한 효과를 그리려면 GLSL 셰이더 같은 코드가 300줄 가까이 필요합니다. 🎜🎜그럼 HTML(SVG)+CSS를 사용해 구현할 수 있을까요? 🎜
드롭 섀도우를 사용하여 요소 콘텐츠의 일부에 단일 및 다중 그림자 추가
🎜우선, 위의 효과를 얻으려면 매우 중요한 단계는 다음과 같습니다. 요소 내용의 일부에 단일 및 다중 그림자를 추가합니다. 위쪽 그림자를 추가합니다. 🎜🎜다음과 같은 그래픽이 있다고 가정해 보겠습니다. 🎜🎜이 div 그래픽에.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; }
로그인 후 복사로그인 후 복사border-radius: 50%
를 설정하고border-top
을 추가합니다. 🎜rrreee🎜결과 다음과 같습니다: 🎜🎜🎜 🎜이 호에 그림자만 추가하려면
box-shadow
를 사용해 보세요. 🎜rrreee🎜emm, 분명히 작동하지 않을 것입니다. 그림자는 전체 div에 추가됩니다. 🎜 🎜🎜🎜순서대로 이 상황을 해결하려면 현명하게 행동하세요. 학생들은 이 문제를 해결하기 위해 탄생한
filter: drop-shadow()
를 즉시 떠올릴 것입니다.box-shadow
속성은 직사각형을 생성합니다. 요소의 전체 상자 뒤에 그림자를 만드는 반면,drop-shadow()
필터는 이미지 자체의 모양(알파 채널)에 맞는 그림자를 만듭니다. 🎜🎜좋아,box-shadow
를drop-shadow()
로 바꾸자: 🎜rrreee🎜이런 식으로 이미지 모양에 맞는 그림자를 얻을 수 있다 자체(알파 채널): 🎜🎜🎜🎜및
drop-shadow()
를 이미지에 여러 번 적용하여 그림자와 유사한 다중 그림자 효과를 얻을 수도 있습니다. 🎜rrreee🎜다음과 같은 다중 그림자 오버레이 효과를 얻습니다. 패턴의 보이는 부분: 🎜🎜🎜🎜위의 예를 흑백으로 만들겠습니다. 색상을 바꾸면 깊은 우주에 있는 빛을 투과하는 행성을 보는 것과 같은 매우 예술적인 패턴을 얻을 수 있습니다. 🎜🎜
🎜🎜CodePen 데모 -- 멀티 드롭 섀도우 네온🎜
마음 실현 -shape line animation
🎜Connect 다음 단계는 SVG를 사용하여 상대적으로 간단한 하트 모양의 라인 애니메이션을 구현하는 것입니다. 🎜🎜먼저 SVG<Path>
를 사용하여 구현된 하트 모양을 가져와야 합니다. SVG 경로를 직접 그리도록 선택하거나 일부 도구를 사용하여 완료할 수 있습니다. 🎜🎜여기서는 이 도구를 사용하여 하트 모양의 경로를 얻었습니다. SVGPathEditor🎜🎜도구를 사용하여 원하는 모양을 빠르게 그리고 해당 경로를 가져옵니다:🎜🎜🎜🎜핵심은 이 SVG 경로를 얻는 것입니다: 🎜rrreee🎜이와 함께 SVG의 Stroke-dasharray</ /code> 및 <code를 사용하세요. >Stroke-offset
, 하트 모양의 추격 애니메이션을 쉽게 얻을 수 있습니다: 🎜rrreeerrreee🎜위 코드에 대한 간략한 설명: 🎜- Stroke-dashoffset을 통해 전체 라인 그래픽을 여러 부분으로 자릅니다🎜
- 🎜
- 🎜
스트로크-대시오프셋
사용 > 0에서 변경 완전한 라인 애니메이션 주기를 달성하려면 928까지(여기서 928은 JavaScript 스크립트를 통해 찾을 수 있는 전체 경로의 길이입니다) 🎜 整个动画过程 2s,设置其中一个的
animation-delay: -1s
,也就是提前 1s 触发动画,这样就实现了两个心形线条的追逐动画
效果如下:
给线条添加光影
有了上述两步的铺垫,这一步就非常好理解了。
最后,我们只需要给两段 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 灵感 - SVG 配合 drop-shadow 实现线条光影效果
扩展延伸
当然,掌握了上述的技巧后,还有非常多有意思的效果我们可以去探索实现的,这里我简单的抛砖引玉。罗列两个我自己尝试的效果。
其中一大类是运用于按钮之上,可以实现按钮带光影的按钮效果,下图是其中一个的示意,巧妙运用 stroke-dashoffset
,它可以有非常多的变形:
完整源代码可以猛击 CodePen -- Neon Line Button
当然,我们也不是一定要借助 SVG,仅仅是 HTML + CSS 也是可以运用这个效果,利用它实现一个简单的 Loading 效果:
完整源代码可以猛击 CodePen -- Neon Loading
最后
好了,本文到此结束,希望对你有帮助 :)
如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
原文地址:https://juejin.cn/post/7016521320183644173
作者:chokcoco
更多编程相关知识,请访问:编程视频!!
위 내용은 CSS 필터의 drop-shadow() 기능을 영리하게 사용하여 선 조명 및 그림자 효과 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











vue.js에서 bootstrap 사용은 5 단계로 나뉩니다 : Bootstrap 설치. main.js.의 부트 스트랩 가져 오기 부트 스트랩 구성 요소를 템플릿에서 직접 사용하십시오. 선택 사항 : 사용자 정의 스타일. 선택 사항 : 플러그인을 사용하십시오.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

부트 스트랩 분할 라인을 만드는 두 가지 방법이 있습니다 : 태그를 사용하여 수평 분할 라인이 생성됩니다. CSS 테두리 속성을 사용하여 사용자 정의 스타일 분할 라인을 만듭니다.

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

부트 스트랩 버튼을 사용하는 방법? 부트 스트랩 CSS를 소개하여 버튼 요소를 만들고 부트 스트랩 버튼 클래스를 추가하여 버튼 텍스트를 추가하십시오.

부트 스트랩 프레임 워크를 설정하려면 다음 단계를 따라야합니다. 1. CDN을 통해 부트 스트랩 파일 참조; 2. 자신의 서버에서 파일을 다운로드하여 호스팅하십시오. 3. HTML에 부트 스트랩 파일을 포함; 4. 필요에 따라 Sass/Less를 컴파일하십시오. 5. 사용자 정의 파일을 가져옵니다 (선택 사항). 설정이 완료되면 Bootstrap의 그리드 시스템, 구성 요소 및 스타일을 사용하여 반응 형 웹 사이트 및 응용 프로그램을 만들 수 있습니다.

Bootstrap에 이미지를 삽입하는 방법에는 여러 가지가 있습니다. HTML IMG 태그를 사용하여 이미지를 직접 삽입하십시오. 부트 스트랩 이미지 구성 요소를 사용하면 반응 형 이미지와 더 많은 스타일을 제공 할 수 있습니다. 이미지 크기를 설정하고 IMG-Fluid 클래스를 사용하여 이미지를 적응할 수 있도록하십시오. IMG 통과 클래스를 사용하여 테두리를 설정하십시오. 둥근 모서리를 설정하고 IMG 라운드 클래스를 사용하십시오. 그림자를 설정하고 그림자 클래스를 사용하십시오. CSS 스타일을 사용하여 이미지를 조정하고 배치하십시오. 배경 이미지를 사용하여 배경 이미지 CSS 속성을 사용하십시오.
