用::before伪元素实现卡片hover阴影和边框动画,核心是将其作为独立装饰层:卡片设position:relative,::before设absolute+100%宽高+z-index:-1;初始态用transparent边框和微弱阴影,hover时scale放大、实色边框、增强阴影,配合transform/box-shadow精准过渡,避免重排且流畅。
用 ::before 伪元素给卡片加 hover 阴影和边框动画,核心是让伪元素作为“装饰层”独立于内容层,通过 transform + box-shadow 控制过渡效果,避免重排且动画更流畅。
卡片本身设为 position: relative,这样 ::before 才能准确覆盖在
它上面,且不脱离文档流:
.card)添加 position: relative;
::before 设为 position: absolute;,宽高设为 100%,并用 top: 0; left: 0; 对齐z-index: -1; 让伪元素垫在内容下方,不影响点击和文字选择初始时让装饰不突兀,用透明边框配合轻微阴影,为 hover 留出变化空间:
border: 2px solid transparent;(别用 none,否则 transition 不生效)box-shadow: 0 2px 8px rgba(0,0,0,0.08);transition: all 0.3s ease;(推荐只过渡 border-color、box-shadow 和 transform)hover 状态下,通过组合变换强化立体感:
transform: scale(1.02); 轻微放大,模拟“浮起”效果border-color: #4f46e5;(如主色紫)box-shadow: 0 10px 25px -5px rgba(79, 70, 229, 0.3);
filter: brightness(1.03); 提亮整体,增强反馈真机或高分屏上容易出现伪元素边缘模糊或闪烁,可加几行优化:
::before 加 will-change: transform, box-shadow;(慎用,仅对频繁动画的卡片)backface-visibility: hidden; 或 translateZ(0) 触发硬件加速
transition 拆成具体属性:transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s;
基本上就这些。关键不是堆效果,而是让 ::before 承担所有装饰动画,主体卡片保持干净,hover 反馈清晰自然又不卡顿。