:hover 配合 --glow-color 自定义属性即可实现轻量稳定的发光边框,无需 JS;应将变量定义在元素自身上,用 box-shadow 引用并加 transition;blur-radius 推荐 8–16px,spread-radius 宜为 0;需动态方向时改用 radial-gradient + JS 更新坐标;IE11 不支持 CSS 变量,建议降级为普通 border。

用 :hover 配合 --glow-color 自定义属性就能实现,无需 JS
鼠标移入发光边框,99% 的场景根本不需要监听 mousemove 事件——:hover 更轻量、更稳定、兼容性更好。自定义属性在这里的作用是让颜色可配置,而不是触发逻辑。
常见错误是把 --glow-color 写死在 :root 里,结果所有卡片共用一个发光色;或者试图用 JS 动态 setProperty 去响应鼠标的细微位移,反而卡顿且无实际增益。
- 把
--glow-color定义在卡片元素自身上,例如- 在
.card:hover中用box-shadow引用该变量:box-shadow: 0 0 12px var(--glow-color);- 加
transition: box-shadow 0.2s ease让发光有缓动,避免突兀box-shadow的模糊半径和扩散半径怎么配才不糊不淡?发光边框本质是单层
box-shadow,但参数调不好会要么像毛玻璃(太糊),要么像描边(太硬)。关键不是堆叠多层阴影,而是控制两个值:-
blur-radius(第三个值)决定光晕软硬度:8–16 是常用区间,12px多数情况最自然 -
spread-radius(第四个值)为 0 时最稳妥;设为正值(如2px)会让光“撑开”,适合强调轮廓,但容易在高缩放下出现像素断裂 - 避免
blur-radius > 24px:在低分辨率屏或缩放 125% 时,边缘会严重失真
示例:
box-shadow: 0 0 12px 0 var(--glow-color);需要鼠标移动位置感应发光方向?用
radial-gradient替代box-shadow真要根据鼠标坐标动态改变光晕方向(比如左上角进光强、右下角进光弱),
box-shadow无法做到——它始终居中。此时得放弃纯 CSS hover,改用radial-gradient作为background,再用 JS 更新--x和--y。- HTML 中给卡片加
style="--x:50%; --y:50%;"作为初始中心点 - CSS 里写:
background: radial-gradient(circle at var(--x) var(--y), rgba(255,255,255,0.4), transparent 70%); - JS 只需监听
mousemove,计算相对坐标并更新:el.style.setProperty('--x', `${e.offsetX}px`)(注意单位) - 性能关键:加
pointer-events: none到渐变层(如果用伪元素实现),或用will-change: background提前提示渲染引擎
IE 不支持自定义属性?降级方案别硬扛
IE11 完全不识别
var(--xxx),强行加fallback(如var(--glow-color, #00f))也没用——整个声明会被忽略。这时候不如直接放弃发光,或换回传统类名控制。- 检测支持:用
@supports (background: paint(...))不现实,应改用@supports (color: var(--t)) - 务实做法:对 IE 用户显示普通
border,用@supports not (color: var(--t)) { .card { border: 1px solid #ccc; } } - 千万别用 JS 注入 CSS 变量来“模拟”支持——维护成本高,且首次渲染必闪白
复杂点不在写法,在权衡:是否值得为 0.1% 的 IE 流量增加两套样式逻辑。多数项目,直接忽略更干净。
- 在
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











