标签在现代浏览器中不生效,因其非HTML标准、被主流引擎主动忽略,且存在无障碍隐患;替代方案应使用CSS opacity动画并限制频率,或requestAnimationFrame实现安全可控闪烁。

<blink></blink> 标签没有实际用途,现代浏览器中它不生效,也不该被使用。
为什么 <blink></blink> 标签在页面里不闪烁
它不是 HTML 标准的一部分,Netscape 早期引入后就被主流标准组织弃用。Chrome、Firefox、Safari、Edge 等所有现代浏览器默认忽略该标签——解析时直接跳过,既不渲染闪烁效果,也不会报错。
- 你在 DevTools 的 Elements 面板里能看到
<blink></blink>节点,但它只是普通容器,样式上等同于<span></span> - 即使强制加 CSS(比如
animation: blink 1s infinite),那也不是<blink></blink>自身的能力,而是你后来补的规则 - 某些老旧内嵌浏览器(如部分 Linux 终端浏览器或定制 WebKit 内核)可能残留支持,但不可靠、无兼容性保障
用 setInterval 模拟闪烁为什么容易出问题
很多人试图用 JS 手动控制显隐来“复刻” blink 效果,但 setInterval 是最常踩坑的写法。
- 页面切换标签页后,
setInterval仍持续运行,切回来瞬间可能连闪多次 - 组件卸载(比如 React unmount、Vue destroy)时没调用
clearInterval,导致内存泄漏 + 操作已销毁 DOM 报错 - 用户快速点击触发多次,生成多个定时器,互相覆盖 opacity 或 class,最终行为不可预测
- 没做节流,比如表单提交中反复调用
startBlink(),结果叠加出 5 个定时器同时改同一个元素
真正可用的替代方案只有两个
必须满足:可暂停/恢复、响应页面可见性、不卡主线程、符合 WCAG 闪烁频率限制(≤3 次/秒)。
立即学习“前端免费学习笔记(深入)”;
-
CSS 动画(推荐):用
@keyframes+opacity,浏览器自动优化帧率,且visibility: hidden时动画自然暂停
示例:@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.2; } } .blinking { animation: blink 1.2s step-end infinite; } -
requestAnimationFrame+ 时间戳(需手动控制):适合需要动态调节频率或与用户交互联动的场景,比如 hover 加速闪烁
关键点:每次回调用performance.now()计算相位,避免 setInterval 的累积误差
真正麻烦的不是“怎么让它闪”,而是“怎么让它只在必要时、安全地、可访问地闪”。多数情况下,你应该先问自己:这个闪烁,真的比静默提示更有效吗?



















