Amazing!!CSS 也能实现烟雾效果?
作者:chokcoco
来源:SegmentFault 思否社区
最近利用 CSS 实现了一些看似超出 CSS 能力的效果:
巧用渐变实现高级感拉满的背景光动画 https://github.com/chokcoco/iCSS/issues/150 Amazing!!CSS 也能实现极光? https://github.com/chokcoco/iCSS/issues/155
模糊效果 颗粒感
纯 CSS 实现烟雾动画
![](https://filescdn.proginn.com/145165f5858f457def638518124f3ea9/4865776e5ca4245f96e162f800c6d7ab.webp)
<span>C</span>
span {
text-shadow: 0 0 0 whitesmoke;
animation: smoky 5s;
}
@keyframes smoky {
to {
text-shadow: 0 0 20px whitesmoke;
opacity: 0;
}
}
![](https://filescdn.proginn.com/e397b6c96208a46d1c6d028f449efc0e/5cede80c1e6e2d5fb88e5dac9779461e.webp)
span {
text-shadow: 0 0 0 whitesmoke;
animation: smoky 5s;
}
@keyframes smoky {
to {
transform:
translate3d(200px, -80px, 0)
rotate(-40deg)
skewX(70deg)
scale(1.5);
text-shadow: 0 0 20px whitesmoke;
opacity: 0;
}
}
![](https://filescdn.proginn.com/b01496e5419dc76aada7e2dbb39bd360/69292768d745698d9a343ee08aaebb18.webp)
<div>
<span>C</span>
<span>S</span>
<span>S</span>
// ...
</div>
// ... 上述所有 CSS 代码
@for $item from 1 through 21 {
span:nth-of-type(#{$item}){
animation-delay: #{(($item/10))}s;
}
}
![](https://filescdn.proginn.com/145165f5858f457def638518124f3ea9/4865776e5ca4245f96e162f800c6d7ab.webp)
借助 SVG feturbulence 滤镜实现烟雾效果
有意思!强大的 SVG 滤镜 https://github.com/chokcoco/cnblogsArticle/issues/27 震惊!巧用 SVG 滤镜还能制作表情包? https://github.com/chokcoco/iCSS/issues/107 实现一个会动的鸿蒙 LOGO https://github.com/chokcoco/iCSS/issues/137
<div">SMOKE</div>
div {
background: linear-gradient(#fff, #999, #ddd, #888);
background-clip: text;
}
![](https://filescdn.proginn.com/49f6fec6bc126ecd5f903b9c8e3f40e0/85316aa0e9bf6d6b79ca62ed21a497b9.webp)
<div>SMOKE</div>
<svg width="0">
<filter id="filter">
<feTurbulence id="turbulence" type="fractalNoise" baseFrequency=".03" numOctaves="20" />
<feDisplacementMap in="SourceGraphic" scale="30" />
</filter>
</svg>
body {
filter: url('#filter');
}
div {
background: linear-gradient(#fff, #999, #ddd, #888);
background-clip: text;
}
![](https://filescdn.proginn.com/e060dc0f6d2a4ef7dc94da15ace75010/22b6b2cc9aaf83315b716651c51c35a2.webp)
body {
filter: url('#filter');
}
div {
background: linear-gradient(#fff, #999, #ddd, #888);
background-clip: text;
filter: blur(5px);
}
![](https://filescdn.proginn.com/626a51a8f3ee2d926defcef81209be0e/b19a9cb4377267e337e13b96fcc872f6.webp)
const filter = document.querySelector("#turbulence");
let frames = 1;
let rad = Math.PI / 180;
let bfx, bfy;
function freqAnimation() {
frames += .2
bfx = 0.03;
bfy = 0.03;
bfx += 0.005 * Math.cos(frames * rad);
bfy += 0.005 * Math.sin(frames * rad);
bf = bfx.toString() + " " + bfy.toString();
filter.setAttributeNS(null, "baseFrequency", bf);
window.requestAnimationFrame(freqAnimation);
}
window.requestAnimationFrame(freqAnimation);
![](https://filescdn.proginn.com/ce2bcedc1fb572a02240c913bc4f8db5/d39cc351efe003bbc56c1b38233d2ee4.webp)
控制 <feTurbulence> 的 baseFrequency 属性调节 控制 <feTurbulence> 的 numOctaves 属性调节 控制 <feDisplacementMap> 的 scale 属性调节
![](https://filescdn.proginn.com/0236de399c5a710e4d9debc30f5a10d3/d2197a93fad066b110f4e7a5f68a774a.webp)
最后
![](https://filescdn.proginn.com/c4fed1d0e1eee9695e2d95ec46b0f510/675638d6f29b95256cf0fa0535f1339c.webp)
评论