2023-09-26 21:12:44
通过CSS的transition与box-shadow结合,可实现平滑的阴影动画效果,常用于按钮悬停、卡片浮起等交互场景,核心是通过定义阴影变化过程并控制过渡属性实现自然动画。
一、基础语法与实现原理场景:卡片或按钮悬停时阴影范围和深度增加,产生“浮起”感。示例代码:
.card { width: 200px; height: 120px; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); /* 初始阴影:轻微偏移、小模糊半径 */ transition: box-shadow 0.3s ease; /* 过渡效果:0.3秒时长,缓动函数为ease */}.card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.15); /* 悬停阴影:更大偏移、模糊半径和深度 */}说明:
场景:通过多层阴影增强立体感,结合自定义缓动函数(如cubic-bezier)实现弹跳或缓入缓出效果。实现方法:
示例代码:
.card { box-shadow: 0 1px 3px rgba(0,0,0,0.1), /* 第一层阴影:轻微偏移和小模糊 */ 0 4px 8px rgba(0,0,0,0.08); /* 第二层阴影:稍大偏移和模糊 */ transition: box-shadow 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); /* 自定义缓动函数 */}.card:hover { box-shadow: 0 8px 16px rgba(0,0,0,0.15), /* 第一层阴影:悬停时放大 */ 0 16px 32px rgba(0,0,0,0.1); /* 第二层阴影:悬停时进一步放大 */}说明:
性能问题:
优化建议:
降级方案示例:
.card { transition: transform 0.3s ease, box-shadow 0.3s ease; /* 同时过渡位移和阴影 */}.card:hover { transform: translateY(-4px); /* 悬停时轻微上浮 */ box-shadow: 0 8px 16px rgba(0,0,0,0.15); /* 阴影同步变化 */}/* 低性能设备降级为仅位移动画 */@media (max-width: 768px) { .card:hover { box-shadow: none; /* 移除阴影动画 */ transform: translateY(-2px); /* 减小位移幅度 */ }}五、总结合理设计阴影变化(如偏移、模糊半径、颜色透明度)。
选择合适的过渡时长和缓动函数。
平衡视觉效果与性能,避免过度渲染。
掌握transition与box-shadow的配合,能显著提升界面交互质感,但需注重细节控制和性能平衡。