导读:本期聚焦于沙月恵奈‌创作的《如何在CSS初级项目中用box-shadow与transition制作卡片阴影效果?》,敬请观看详情。CSS初级项目里给卡片加阴影并不只是写一句 box-shadow 就完事。想让卡片在鼠标悬停时自然浮起、阴影扩散过渡流畅,需要理解阴影参数和 transition 的配合方式。初学者很容易把 box-shadow 直接写在 hover 状态里,导致动画生硬或完全不动。本文从最基础的阴影偏移、模糊半径、扩展半径讲起,再结合 transition 的时长与缓动函数,逐步演示如何把普通卡片改造成有层次感的交互组件。除了完整代码示例,还会说明为什么 transition 要写在元素的默认状态而不是 hover 状态,以及使用 transform 提升性能的细节。读完你可以掌握一套可复用的卡片阴影方案,并避免常见的过渡不生效、阴影抖动等问题。

给卡片添加阴影是CSS入门阶段最常见的需求之一。单独的 box-shadow 可以快速让元素从背景中分离出来,但如果希望鼠标移入时阴影平滑加深、卡片轻微上浮,就需要把 box-shadow 和 transition 放在一起设计。本文以一个基础卡片组件为例,从阴影参数解释到过渡效果实现,帮助你掌握可复用的交互阴影写法。

如何在CSS初级项目中用box-shadow与transition制作卡片阴影效果?

代码中的核心逻辑并不复杂:默认状态定义较小的阴影,hover 状态定义较大的阴影,再用 transition 对阴影变化进行补间。真正容易出错的地方在于 transition 放置位置、阴影参数顺序以及性能优化选择。下面先从 box-shadow 的语法入手。

一、box-shadow 参数拆解:偏移、模糊与扩展

box-shadow 属性用来给元素添加阴影,完整语法是:box-shadow: h-offset v-offset blur spread color inset;。其中 h-offset 和 v-offset 分别表示水平偏移和垂直偏移,正值向右、向下,负值向左、向上;blur 是模糊半径,数值越大阴影边缘越柔和;spread 是扩展半径,正数让阴影向外扩大,负数让阴影收缩;color 定义阴影颜色,inset 可选,用于生成内阴影。初级项目中常用外阴影,因此 inset 暂时可以忽略。

例如一条常见的卡片阴影:box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);。它表示阴影在垂直方向向下偏移 4px,模糊半径 12px,颜色是透明度 8% 的黑色。这个组合让卡片看起来像浮在浅色背景上。为了后续过渡效果更自然,建议颜色使用 rgba 或 hsla,因为纯颜色在阴影扩散时不会有透明度带来的轻盈感。rgba 中的最后一个值控制阴影深浅,通常从 0.06 到 0.2 之间选择即可。

.card {
  width: 300px;
  padding: 24px;
  border-radius: 12px;
  background-color: #ffffff;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}

上面这段代码定义了一个基础卡片。阴影只给了垂直偏移,水平偏移为 0,这样视觉重心在卡片正下方,符合大多数界面中的卡片位置关系。你可以把 blur 改大,比如 24px,会发现阴影范围变宽但更淡;把 spread 设为 2px,阴影会整体向外扩大一圈。理解这四个长度参数对后续过渡非常有帮助,因为 transition 本质就是对这些数值的渐变插值。

二、transition 如何让阴影变化更平滑

如果只在 .card 和 .card:hover 中分别写不同的 box-shadow,浏览器在状态切换时会瞬间跳变,体验比较生硬。这时需要 transition 来补间两个状态之间的阴影数值。transition 的完整写法可以拆成四个子属性:transition-propertytransition-durationtransition-timing-functiontransition-delay。对于卡片阴影,至少要指定 property 和 duration,常见写法是:transition: box-shadow 0.3s ease;

有一条重要规则:transition 必须写在元素的默认状态,而不是 hover 状态。因为浏览器需要知道从默认状态到 hover 状态的变化过程,如果只在 hover 状态写 transition,鼠标移入时可能不会生效,移出时才会产生动画。这个细节容易让初学者困惑,但只要记住“过渡是默认状态提供的规则”即可。想让移入和移出都有平滑效果,就把它写在 .card 里。

.card {
  width: 300px;
  padding: 24px;
  border-radius: 12px;
  background-color: #ffffff;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.card:hover {
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16);
  transform: translateY(-4px);
}

上面的示例同时过渡了 box-shadow 和 transform。hover 时阴影向下偏移增加到 8px,模糊半径从 12px 变为 24px,颜色透明度从 0.08 提升到 0.16,同时卡片向上移动 4px。这样阴影和位移动画叠加,悬浮感会更明显。transition 中多个属性用逗号分隔,每个属性可以设置不同的时长和缓动函数,例如 transition: box-shadow 0.3s ease-out, transform 0.2s linear;。但对于初级项目,保持统一时长更简单。

如果希望阴影过渡更加柔和,可以尝试不同的缓动函数,比如 ease-in-outcubic-bezier(0.4, 0, 0.2, 1)。ease 在开始时变化较快,适合大多数悬浮交互;ease-in-out 前后都慢,中间快,适合较大的阴影变化。时长一般控制在 0.2 秒到 0.4 秒之间,太短会显得突兀,太长则显得拖沓。

三、完整卡片组件实战:结构与样式结合

实际项目中卡片不仅是一个空盒子,还会包含标题、描述文字和按钮。下面给出一个完整的 HTML 结构和对应 CSS。结构中使用 <article> 作为卡片容器,内部包含 <h3>、<p> 和 <button>。你可以在初级项目中直接复用这套结构,再按业务需求修改文本。

<article class="profile-card">
  <h3>用户昵称</h3>
  <p>这是一段简单的个人介绍,用来展示卡片内容随着阴影一起呈现的效果。</p>
  <button class="card-btn">查看资料</button>
</article>

对应样式如下。为了突出卡片层次,给容器设置了圆角、内边距和浅色背景。阴影默认较小,hover 时加强,并通过 transform 实现轻微上浮。按钮也有自己的阴影变化,但没有使用 transform,只通过 box-shadow 和背景色变化来反馈鼠标操作。

.profile-card {
  max-width: 360px;
  margin: 40px auto;
  padding: 28px 24px;
  border-radius: 16px;
  background-color: #ffffff;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.08);
  transition: box-shadow 0.35s ease, transform 0.35s ease;
}

.profile-card:hover {
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.18);
  transform: translateY(-6px);
}

.profile-card h3 {
  margin: 0 0 12px;
  font-size: 22px;
  color: #1f2937;
}

.profile-card p {
  margin: 0 0 20px;
  line-height: 1.6;
  color: #4b5563;
}

.card-btn {
  padding: 10px 18px;
  border: none;
  border-radius: 8px;
  background-color: #2563eb;
  color: #ffffff;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(37, 99, 235, 0.35);
  transition: box-shadow 0.25s ease, background-color 0.25s ease;
}

.card-btn:hover {
  background-color: #1d4ed8;
  box-shadow: 0 4px 12px rgba(37, 99, 235, 0.5);
}

这段代码可以直接复制到项目中运行。卡片默认阴影较浅,鼠标悬停时阴影加深、卡片向上浮动,按钮颜色变深并扩大阴影。整个过渡过程由 .profile-card 和 .card-btn 上的 transition 驱动。需要注意不要在 hover 规则里再次声明 transition,否则可能导致只有移出时的动画生效。

四、常见误区与性能优化建议

第一个常见误区是只给 hover 状态写 transition。前面已经提到,transition 应放在默认状态。第二个误区是过渡所有属性,例如 transition: all 0.3s;。虽然 all 也能生效,但在复杂页面中可能引起不相关属性的动画,增加渲染负担。建议明确列出要过渡的属性,如 box-shadow 和 transform。

性能方面,box-shadow 的过渡会触发重绘,因为阴影属于视觉效果。不过现代浏览器对阴影动画的优化已经不错,在卡片数量较少时不会产生明显卡顿。如果页面上有大量卡片,建议尽量避免同时过渡阴影,或者使用固定阴影加 transform 位移来模拟悬浮。transform 只涉及合成层,性能更好。必要时可以给卡片添加 will-change: transform;,提示浏览器提前优化,但不要滥用,否则会消耗更多内存。

阴影的颜色和透明度也会影响视觉效果。深色背景上,黑色阴影几乎看不见,应该使用更深的颜色或半透明白色内边框来区分层次。浅色背景上,使用 rgba(0,0,0,0.1) 这一级别的透明度最自然。最后,确保 hover 状态下的阴影和 transform 与默认状态使用相同属性列表,否则过渡可能不完整。

总结来说,box-shadow 与 transition 的结合是 CSS 入门阶段非常实用的技巧。掌握参数含义、过渡位置和性能细节后,你可以在登录卡片、商品列表、个人资料等场景中快速做出专业的悬浮反馈。

CSS卡片阴影box-shadowtransition修改时间:2026-08-26 10:28:13

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。