多层 box-shadow 是实现动态光影的物理基础,需用逗号分隔三层阴影模拟光晕质感,并配合 :hover/:active 状态变化、@keyframes 脉冲动画及伪元素叠加,兼顾性能与真实感。

box-shadow 多层叠加是动态光影的物理基础
单层 box-shadow 只能模拟单一光源,而真实光影有明暗过渡、边缘衰减和色温变化。必须用逗号分隔的多层阴影,每层控制不同模糊半径和透明度,才能逼近“光晕”质感。
-
0 0 5px #00ffff:最内层,高饱和+低模糊,模拟强光核心区 -
0 0 15px rgba(0, 255, 255, 0.6):中层,适度扩散+透明度下降,形成过渡带 -
0 0 30px rgba(0, 255, 255, 0.2):外层,大模糊+低透明度,模拟环境光漫反射
注意:三层总模糊半径不宜超过 60px,否则渲染开销陡增,尤其在低端移动设备上易卡顿。
:hover 和 :active 状态下阴影参数必须差异化
用户操作不是开关式切换,而是连续物理过程。悬停(:hover)应模拟“被托起”,点击(:active)应模拟“被按压”,两者的阴影变化方向相反。
-
:hover:增大blur值(如从 15px → 25px),降低rgba()的 alpha(如 0.6 → 0.4),让光晕更“蓬松” -
:active:缩小blur(如 15px → 8px),提高 alpha(0.6 → 0.8),并加一点v-offset(如2px)模拟下沉感 - 必须搭配
transition: box-shadow 0.2s ease-out,硬切会像灯泡开关,毫无物理反馈
用 @keyframes 实现呼吸/脉冲类动态光影
纯交互状态不够——有些按钮需要持续视觉提示(如未读消息、系统状态)。这时得靠 @keyframes 循环动画,但关键不是“动”,而是“节奏感”。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 不要只改
box-shadow模糊值,同步调节rgba()的 alpha 和 color 色相(用hsla()更可控) - 推荐三段式节奏:
0%(正常)、50%(光最强)、100%(回落),避免线性匀速,用ease-in-out - 示例关键帧:
@keyframes pulse-glow {<br> 0% { box-shadow: 0 0 10px hsla(180, 100%, 70%, 0.3); }<br> 50% { box-shadow: 0 0 25px hsla(180, 100%, 70%, 0.7); }<br> 100% { box-shadow: 0 0 10px hsla(180, 100%, 70%, 0.3); }<br>}
动画时长建议 1.2–2s,太快像频闪,太慢失去提示意义。
伪元素 ::before / ::after 是光影层次的隐藏推手
主元素的 box-shadow 有局限:无法单独控制内外圈、无法旋转、不能错位。这时用伪元素叠加,相当于给按钮“加一层光学滤镜”。
-
::before设为绝对定位,inset阴影模拟内发光,或用radial-gradient做中心高亮 -
::after可设为旋转动画(transform: rotate(30deg)),配合透明度渐变,制造流动光边 - 务必设置
z-index: -1,避免遮挡文字或点击区域 - 伪元素动画要加
will-change: transform,否则 iOS Safari 容易撕裂
真正难的不是写出效果,而是判断哪一层该用 box-shadow、哪一层该用伪元素、哪一层该交给 @keyframes —— 光影是物理现象,CSS 是模拟工具,别让它违背常识。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










