头像光环悬停 4 种特效(脉冲光环/虚线旋转/渐变辉光 CSS 源码)
头像光环悬停 4 种玩法:光环扩散脉冲、虚线旋转光环、渐变辉光描边、光环加放大,纯 CSS 实现,适合用户列表、团队成员、评论头像。
效果演示(真实可交互)
把鼠标移到任意头像上,观察光环的出现方式。头像本身用渐变圆加表情演示,替换成真实图片后效果一致,伪元素实现的光环不会影响头像裁切。
完整代码
HTML 结构:.av-ring 是头像容器,.av-face 是头像本体,光环全部由 ::before 伪元素实现:
<figure class="av-card">
<div class="av-ring av-pulse"><span class="av-face">🦊</span></div>
<figcaption>光环扩散</figcaption>
</figure>
<!-- 换用 av-dash / av-glow / av-zoom 切换玩法 -->
核心 CSS:
.av-ring { position: relative; width: 88px; height: 88px; border-radius: 50%; }
.av-face {
position: absolute;
inset: 4px;
border-radius: 50%;
background: linear-gradient(135deg, #4facfe, #00f2fe);
display: flex; align-items: center; justify-content: center;
transition: transform .4s cubic-bezier(.22, .61, .36, 1);
}
/* ① 光环扩散:圆环 hover 时放大并淡出,模拟脉冲 */
.av-pulse::before {
content: '';
position: absolute; inset: 0;
border-radius: 50%;
border: 2px solid #6c8cff;
opacity: 0;
transition: transform .6s ease-out, opacity .6s ease-out;
}
.av-card:hover .av-pulse::before { transform: scale(1.45); opacity: 1; }
/* ② 虚线旋转光环 */
.av-dash::before {
content: '';
position: absolute; inset: -8px;
border-radius: 50%;
border: 2px dashed rgba(108, 140, 255, .85);
opacity: 0;
}
.av-card:hover .av-dash::before {
opacity: 1;
animation: av-spin 6s linear infinite;
}
@keyframes av-spin { to { transform: rotate(360deg); } }
/* ③ 渐变辉光:mask 挖空出渐变描边 + drop-shadow 光晕 */
.av-glow::before {
content: '';
position: absolute; inset: -3px;
border-radius: 50%;
padding: 3px;
background: linear-gradient(135deg, #ff6ec4, #7873f5, #4ade80);
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask-composite: exclude;
opacity: 0;
}
.av-card:hover .av-glow::before {
opacity: 1;
filter: drop-shadow(0 0 10px rgba(120, 115, 245, .8));
}
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 头像尺寸 | 88px | .av-ring 的宽高,光环随之缩放 |
| 扩散倍率 | 1.45 | 脉冲光环放大的倍数 |
| 虚线内边距 | -8px | 虚线光环与头像的距离,负数表示向外 |
| 旋转时长 | 6s | 虚线光环转一圈的时间 |
| 渐变描边粗细 | 3px | padding: 3px 即描边宽度 |
| 光晕模糊 | 10px | drop-shadow 的模糊半径 |
兼容性与性能
- 纯 CSS 实现;
mask-composite需要 Chrome 120+ / Safari 15.4+,老浏览器可用border-image渐变或直接叠一层半透明圆环代替 - 动画仅涉及
transform、opacity、filter,全部为合成器属性,性能开销极小 - 头像数量多的列表页建议开启
will-change: transform,避免悬停瞬间出现锯齿 - 触屏设备无 hover,可搭配
@media (hover: none)让光环常驻展示
常见问题
Q: 光环想一直显示而不是悬停才出现? 把 ::before 的 opacity: 0 删除、默认态直接给 opacity: 1,并把 animation 移出 hover 规则即可。
Q: 渐变描边在 Firefox 上显示不出来? Firefox 需要标准 mask-composite: exclude,同时保留 -webkit- 前缀;如果仍异常,改用 background: conic-gradient(...) 加 inset 遮罩方案。
Q: 真实头像怎么放进去? 把 .av-face 换成 <img>,设置 width: 100%; height: 100%; border-radius: 50%; object-fit: cover;,inset: 4px 会让头像与光环之间留出空隙。
Q: 可以商用吗? 可以,本组件为粤喵自研原创,免费商用无需署名,欢迎调整颜色、尺寸与动画时长。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。