CSS 入门卡片
一个可悬停的学习卡片示例。
在前端界面中,卡片组件是最常见的布局单元之一。通过实现一个简单的卡片悬停效果,初学者可以同时练习 Transition、Transform 与 阴影变化 等核心概念,从而建立对 CSS 动画的直观理解。
本练习的目标是让你在不依赖复杂 JavaScript 的情况下,通过 CSS 就能实现平滑的交互反馈,进而提升用户体验和页面的层级感。平滑过渡和交互可控性将是学习的重点。
需要关注的点包括:浏览器兼容性、性能开销、以及可访问性,确保动效不会影响阅读和操作。
准备一个文本编辑器如 VS Code、一个现代浏览器,以及一个简单的本地静态文件结构。通过创建一个包含 index.html、styles.css 的最小项目,你可以快速看到效果。
结构上,最好把卡片的样式独立到 styles.css,并在 index.html 引入,这样在后续修改中更易维护。通过模块化的代码便于复用。版本控制也建议搭建一个简单的 Git 流程。
搭建后,在浏览器中直接打开 index.html,并使用开发者工具实时观察 样式的渲染与性能。
卡片通常包含图片、标题和描述文本等元素。为便于样式和交互,使用明确的类名如 card、card__image、card__content。
语义上,卡片作为一个独立单位,应当具备 role="article" 或 aria-label 来辅助屏幕阅读器,提升可访问性。

CSS 入门卡片
一个可悬停的学习卡片示例。
在静态状态下,卡片宽度、圆角和 阴影基线构成第一印象。通过适配的 颜色方案 与对比度,确保内容清晰易读。
还应设置一个稳定的 图片填充方式,避免不同图片导致的高度跳变,从而为后续动画提供平滑的框架。
.card {width: 320px;border-radius: 12px;background: #ffffff;overflow: hidden;box-shadow: 0 2px 6px rgba(0,0,0,.08);
}
.card__image { width: 100%; height: 180px; object-fit: cover; display: block; }
.card__content { padding: 16px; }
.card__title { margin: 0; font-size: 1.1rem; }
通过以上静态样式,结构清晰、视觉层次感与 可读性得到保障,为后续的动态效果打下稳固基础。
使用 transition 属性可以让属性在一段时间内平滑变化。将 transform 与 box-shadow 设定为同一过渡,可以实现统一的动画节奏。

通过指定 transition-duration、transition-timing-function 以及 transition-property,你可以对不同属性应用不同的节奏,保持页面的一致性。
.card {transition: transform .25s ease, box-shadow .25s ease;
}
这样設定后,悬停时既有位置的变化也会带来阴影的微妙改变,从而提升交互感。
要实现悬停时的位移与缩放效果,核心在于 transform 属性。常用的值包括 translateY、scale 等,组合使用可创建立体感。
通过组合 translateY(-6px) 与 scale(1.02),你可以获得轻微抬升与放大的视觉效果。
.card:hover {transform: translateY(-6px) scale(1.02);
}
此时的过渡会同步应用在移动与缩放上,形成连贯的视觉反馈,增强触控端的一致体验。
阴影能强化层级感,box-shadow 的变化能够更加突出悬停的反馈。阴影的模糊半径、横向偏移与颜色透明度共同决定最终的视觉效果。
在悬停状态中增大阴影的模糊半径和偏移量,通常会带来更深的层次感。
.card:hover {box-shadow: 0 12px 20px rgba(0,0,0,.2);
}
通过合理的阴影深度变化,可以让用户直观感受到“进入”与“离开”的差异,增强 可用性 与 美观度。
为无障碍考虑,使用 prefers-reduced-motion 媒体查询,在用户偏好减少动画时关闭过渡与变换,以避免引发不适。
@media (prefers-reduced-motion: reduce) {.card {transition: none;transform: none;}
}
此外,确保文本在不同尺寸下仍保持清晰,字体大小与 行高应具备响应性调整。
下面给出一个完整的最小示例,包含 HTML 结构与 CSS 样式,便于直接在本地演练。
CSS 入门卡片悬停示例

CSS 入门卡片
这是一个可悬停的学习卡片,用于演示 Transition、Transform 与阴影变化。
:root {--card-bg: #fff;--shadow: 0 2px 6px rgba(0,0,0,.08);--shadow-hover: 0 12px 20px rgba(0,0,0,.2);
}
body {font-family: system-ui, -apple-system, "Segoe UI", Roboto, Arial;background: #f7f7f7;padding: 40px;
}
.card {width: 320px;border-radius: 12px;background: var(--card-bg);overflow: hidden;box-shadow: var(--shadow);transition: transform .25s ease, box-shadow .25s ease;
}
.card__image { width: 100%; height: 180px; object-fit: cover; display: block; }
.card__content { padding: 16px; }
.card__title { margin: 0 0 6px; font-size: 1.1rem; }
.card:hover {transform: translateY(-6px) scale(1.02);box-shadow: var(--shadow-hover);
}
@media (max-width: 680px) {.card { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {.card { transition: none; transform: none; }
}