vlink属性已彻底失效,现代项目必须用a:visited伪类控制已访问链接颜色,且仅color等极少数属性生效,font-weight、font-size等均被浏览器忽略。

直接说结论:vlink 属性已彻底失效,现代项目中必须用 a:visited CSS 伪类,且能设置的样式非常有限——只改颜色还行,想加粗、换字体、改尺寸?浏览器会直接忽略。
为什么 vlink 在 HTML 中不再起作用
HTML5 完全移除了 这类写法。主流浏览器(Chrome、Firefox、Edge、Safari)在标准模式下会直接忽略它,连警告都不抛。不是“不推荐”,是“根本不解析”。如果你在 DevTools 里看到 vlink 出现在 DOM 树上,那只是 HTML 解析器把它当成了自定义属性,和链接样式毫无关系。
-
vlink是 HTML 4.01 的遗留物,XHTML 1.0 Strict 就已明确不支持 - 所有现代框架(React/Vue/Svelte)生成的 HTML 默认都是 HTML5 文档类型,
vlink天然失能 - 即使强制用
document.body.vLink = "red"操作 DOM,也不会触发任何样式重绘
a:visited 的写法和必须遵守的顺序
CSS 中控制已访问链接,唯一有效方式是 a:visited,但它有个硬性前提:声明顺序不能错,否则整个规则可能静默失效。
- 必须按
a:link→a:visited→a:hover→a:active(LVHA)顺序书写,漏掉或调换都可能导致:visited不生效 -
a:visited { color: #555; }有效;但a:visited { font-weight: bold; }会被浏览器丢弃,且控制台无提示 - 不能用
!important强行覆盖——这不是优先级问题,是安全策略拦截 - 如果页面有更具体的选择器(如
.nav a:visited),它会覆盖全局a:visited,需检查层叠权重
a:visited 能设什么、不能设什么
出于隐私保护,浏览器对 :visited 可控样式做了严格限制。你只能安全地修改以下几类属性:
- 颜色类:
color、background-color、border-color(含border-top-color等)、outline-color、text-decoration-color - 完全无效的常见尝试:
font-size、display、visibility、padding、margin、transform、background-image - JS 无法读取状态:
getComputedStyle(link, ':visited')返回空对象;link.matches(':visited')永远为false - 隐私模式或跨域链接下,
:visited可能完全不触发,测试时务必用无痕窗口手动访问目标 URL 后再刷新
真正麻烦的地方在于:它不报错、不警告、不回退到默认值,而是悄悄跳过——你调了半天颜色没变,很可能是因为误写了 font-weight 导致整条规则被引擎丢弃。动手前先确认只用了允许的属性,比反复刷新更有用。










