CSS3实现圆环内阴影效果

这是一个关于CSS3灵活应用的例子,圆环的内阴影效果。
比如说,我想做一个根据加载进度不同圆环动态填充的效果,如下图:

进度环效果.png

动态效果用SVG+CSS3动画可以很轻松的实现(stroke-dasharray定义成圆的周长,stroke-dashoffset根据参数值变化,利用transition: stroke-dashoffset来实现动态填充)。
如果是下面这种,非常好实现的

无阴影的进度环效果.png

只需要SVG绘制两个圆形。

#base{ stroke: #a4a4a4; stroke-width: 24px; fill:none;}
#dynamic { stroke: #f88566;stroke-width: 30px; fill:none;stroke-linecap:round;
stroke-dashoffset: 0; transition: stroke-dashoffset 1s linear;stroke-dasharray:942.61;}
/*通过js获取进度值转换成对应的stroke-dashoffset值来实现动画效果*/
<circle id="base" r="150" cx="200" cy="200" ></circle> /*底部灰色圆环*/
<circle id="dynamic" r="150" cx="200" cy="200"></circle> /*橙色动态圆环*/

可是作为一个傲娇的设计师,不可放弃自己对细节的追求!一定要实现这种阴影效果。我们先来看一下ps里面是怎么实现这种效果的

圆环内阴影样式.png

非常简单的给圆环一个深色内发光效果。那在CSS3里怎么办呢?我们变通一下思路,如果在ps里,我不是用圆环的内发光效果来实现,而是用下面这种一个深色外发光的大圆

内发光的大圆.png

然后叠加一个外发光的小圆

外发光的小圆.png

同样可以实现圆环的内阴影效果。
有了这个基础,如何用CSS3绘制就一目了然了。先定义两个div,来进行圆形的绘制border-radius:50%是绘制圆形的语法

#circle1{box-shadow:inset 0 0 20px 0 rgba(0,0,0,0.8); border-radius:50%;} /*大圆*/
#circle2{box-shadow: 0 0 20px 0 rgba(0,0,0,0.8); border-radius:50%;} /*大圆*/
/*对应的html代码*/
<div id="circle1"></div><div id="circle2"></div>

来看一下浏览器的效果(为了方便观察,暂时把两个圆形部分重叠)

CSS3实现的两个圆的内发光和外发光效果.png

剩下的工作就是做一些调整了,从上图可以看出来,投影颜色偏浅,这里我对box-shadow进行一些微调,并通过调整位置让两个圆的圆心重叠。

#circle1{box-shadow:inset 0 0 10px 5px rgba(0,0,0,0.8);}
#circle2{box-shadow:0 0 10px 5px rgba(0,0,0,0.8);}

就得到了下面这种效果

CSS3实现的最终效果.png

就像我在《UI设计师进阶技能——CSS3之样式篇》里面提到的一样,掌握基本的语法之后,灵活运用是关键。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请声明 原文链接 关注公众号获取更多资讯 这篇文章主要总结H5的一些新增的功能以及一些基础归纳,这里只是一个提...
    前端进阶之旅阅读 9,117评论 22 225
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,899评论 25 709
  • 因为近期项目没有压力,主要工作就是一些涉及功能增删相关的界面的小工作,修修补补,搞个图标之类,设计师小伙伴们都懂的...
    泱泱悲秋阅读 5,328评论 1 27
  • 我一直觉得我性格平和博爱众生,尽量理解别人,以谦逊平等的态度与人相处。但我当遇到不理解的事情,内心按捺不住一万个问...
    达恩阅读 177评论 0 0
  • 有一些我们平时没有注意到的事物,其实是非常美的。 比如今天我画的这只名猫,你们能猜到它是什么吗? 大家来猜谜! 一...
    Ann苳杭杭阅读 2,743评论 11 39