如何用css实现卡片阴影渐变动画

答案:通过CSS的box-shadow和transition属性实现卡片阴影渐变动画,结合hover状态改变阴影大小与透明度,并可使用filter或多重阴影增强立体感。

要实现卡片阴影的渐变动画,核心是利用 CSS 的 box-shadowtransition 属性,配合伪元素或滤镜(filter)来增强视觉效果。下面是一种简洁、实用的方法,让卡片在鼠标悬停时产生柔和的阴影扩散动画。

基础卡片结构

先创建一个简单的卡片 HTML 结构:


  卡片内容

使用 box-shadow 实现渐变阴影动画

通过设置默认阴影和悬停时的更大阴影,结合过渡效果实现平滑动画。

CSS 样式如下:

.card {
  width: 200px;
  height: 120px;
  background: white;
  border-radius: 12px;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
  transition: box-shadow 0.3s ease;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  margin: 50px auto;
}

.card:hover {
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.2);
}

说明:

  • 默认状态使用较轻的阴影 rgba(0,0,0,0.1)
  • hover 时阴影范围和模糊值增大,颜色稍深
  • transition 让阴影变化更自然

进阶:使用 filter 实现更柔和的阴影扩散

如果想让阴影看起来更“发散”或“发光”,可以用 filter: drop-shadow() 配合过渡。

.card {
  filter: drop-shadow(0 4px 10px rgba(0,0,0,0.1));
  transition: filter 0.3s ease;
}

.card:hover {
  filter: drop-shadow(0 12px 25px rgba(0,0,0,0.2));
}

优点:

  • drop-shadow 对非矩形元素更友好
  • 视觉上比 box-shadow 更自然,像真实投影

小技巧:多层阴影模拟渐变感

box-shadow 支持多层阴影叠加,可以制造出类似渐变的层次感:

.card:hover {
  box-shadow:
    0 8px 16px rgba(0,0,0,0.1),
    0 16px 32px rgba(0,0,0,0.15),
    0 24px 48px rgba(0,0,0,0.2);
}

这种写法让阴影从内到外逐渐变淡,更有立体深度。

基本上就这些。关键点是用 transition 控制变化节奏,box-shadow 或 filter 调整视觉表现。不复杂但容易忽略细节,比如阴影颜色透明度和模糊半径的搭配。调试时可以逐步增加数值,找到最舒服的“浮起”感。