vlink 属性已完全失效,现代浏览器在 HTML5 模式下直接忽略它;唯一有效方式是 CSS 的 a:visited 伪类,且仅允许设置 color、border-color 等有限属性,并须遵循 LVHA 顺序。

vlink 属性已经完全失效,现代浏览器(Chrome、Firefox、Edge、Safari)在 HTML5 文档模式下会直接忽略它,不解析、不报错、也不生效。
为什么 vlink 不再起作用
HTML5 标准已彻底移除 语法;XHTML 1.0 Strict 早已不支持;所有主流框架(React/Vue/Svelte)输出的 HTML 默认都是 HTML5 文档类型,vlink 天然无法触发样式。即使你用 JS 执行 document.body.vLink = "red",DOM 属性虽可读写,但不会引起任何样式重绘。
常见误判点:
- 在 DevTools 中看到
vlink出现在元素属性里,只是 HTML 解析器把它当成了自定义属性,和链接颜色毫无关系 - 本地双击打开 HTML 文件(
file://协议),部分浏览器会进一步限制 :visited 行为,导致测试结果失真
必须用 a:visited,且只允许改颜色类属性
唯一有效方式是 CSS 的 a:visited 伪类,但它受浏览器隐私策略严格限制——不是“优先级不够”,而是引擎主动丢弃非法声明。
只允许设置的属性包括:
-
color、background-color -
border-color、border-top-color等各方向边框色 -
outline-color、text-decoration-color
以下写法全部静默失效(控制台无警告):
a:visited { font-weight: bold; }a:visited { font-size: 14px; }a:visited { display: inline-block; }a:visited { background-image: url(...); }
a:visited 必须按 LVHA 顺序声明
伪类声明顺序错误会导致整条规则被跳过,不是“部分失效”,而是完全不匹配。
正确顺序(LVHA):
/* link → visited → hover → active */<br>a:link { color: #007bff; }<br>a:visited { color: #6c757d; }<br>a:hover { color: #0056b3; }<br>a:active { color: #004080; }
容易踩的坑:
- 把
a:visited写在a:link前面 → 大概率不生效 - 漏掉
a:link或a:hover→ 后续状态可能回退到浏览器默认(紫色已访问) - 用了更具体的选择器(如
.nav a:visited)却没覆盖全局a:visited→ 实际生效的是更宽泛的那条
调试时看不到效果?先确认三件事
不是代码写错了,而是环境或验证方式不对:
- 必须手动点击链接一次,让它进入“已访问”状态(仅靠 JS 模拟跳转不触发)
- 用无痕窗口访问目标 URL 后,再回到原页面刷新 —— 隐私模式下历史记录为空,
:visited不触发 - 在 DevTools 的 Elements 面板中选中链接,看 Styles 侧边栏里
a:visited规则是否被划掉(表示被浏览器禁用)或显示为灰色(表示未匹配)
真正麻烦的地方在于:它不报错、不提示、不 fallback,只是悄悄跳过整条规则。动手前先删掉所有非颜色属性,比反复改 color 值更有用。











