用css的shadow模拟光效

5,478 阅读3分钟

过年宅在家,时间太多试着写篇文章。有什么不对的地方欢迎指出,谢谢。

模拟光效

光是什么样就不解释(不知道怎么解释 - -!),说是模拟,自然是因为搞不出自然发光的物体。那么如何模拟呢? 看下面的图:

由于有明暗的对比,亮度高的物体就会在视觉上给我们一种发光的效果。 接着来试试用代码实现一个demo:

实现完成,但效果不对啊,和上面的图对比是不是还缺少了点什么?

没关系,在看看另外一张图:

图中的光线是丁达尔效应 ,是光的一种散射,在图片上用上这种效果通常能营造出一种朦胧美。 实际通过这种散射,有助于在视觉上让我们感觉到光,即增强了光效。 看回上面两张图,就会发现刚刚用代码实现的好像就缺少了散射的效果。 那么如何实现这种效果呢?当然是用shadow啦,可能还有其他的样式也能模拟,不过这次的主角是它!

什么是shadow?

shadow有: box-shadowtext-shadow等,用法请翻MDN,不过多介绍。

这里介绍两个特点:

  1. 能写很多个值

.box {
    position: absolute;
    top: 200px;
    left: 200px;
    width: 200px;
    height: 200px;
    background: #000;
    box-shadow:
        10px 10px 0 #e5e12c,
        20px 20px 0 #70c5e5,
        30px 30px 0 #e24fe5;
}
  1. 支持补间动画

接着给demo加上shadow

width: 200px;
    height: 200px;
    background: #fff;
    border-radius: 50%;
    position: absolute;
    top: 80px;
    left: 80px;
    box-shadow: 
        5px 5px 10px #eee, 
        -5px 5px 10px #eee, 
        5px -5px 10px #eee, 
        -5px -5px 10px #eee, 
        5px 5px 30px #aaa, 
        -5px 5px 30px #aaa, 
        5px -5px 30px #aaa, 
        -5px -5px 30px #aaa;

4个为一组,第一组模糊距离短(10px),会比第二组的稍微亮一点,同时靠近中心圆,又比中心圆暗淡一点,这样在视觉上会觉得中间圆更加亮, 两组加起来,模拟光线渐渐变弱的效果。 当然,为了更好的效果,可以设置更多组。

和第一个效果比起来更加亮了。并且加上box-shadow后,有点内味了。

小结

内容其实就这么多,上面只是介绍了一种在css中模拟光效的方式,有了光效,在发挥我们的想象力,就可以用css实现更多好玩又酷炫的效果, 比如用text-shadow实现霓虹文字:

    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate3d(-50%, -50%, 0);
    font-size: 100px;
    color: #fff;
    letter-spacing: 10px;
    text-shadow: 
        0 0 1px #ad6aea, 
        1px 0 2px #ad6aea, 
        -1px 0 2px #ad6aea, 
        1px 0 5px #ad6aea, 
        -1px 0 10px #ad6aea;

然后加点其他特(样)效(式)就能变成:

嘿嘿,祝大家新年快乐!
demo2地址

下面是用box-shadow实现的:

demo3地址

温馨提示:最后两个demo用了大量的css3动画,手机上看起来应该会比较卡!

全部demo地址