共计 1801 个字符,预计需要花费 5 分钟才能阅读完成。
CSS :visited
伪类用于选择页面中被访问过的超链接元素,并为这些超链接设置样式。
使用 :visited
伪类时需要特别注意,只有 带有 href
属性的超链接 <a>
元素 才会被 :visited
伪类匹配。例如:
<!-- 下面的超链接都会被匹配 -->
<a href="#"> 随机链接 </a>
<a href="#id"> 内部链接 </a>
<a href="http://www.htmleaf.com"> 外部链接 </a>
<!-- 下面这个超链接不会被匹配 -->
<a> 不带 href 属性的超链接 </a>
通常超链接元素在不同的状态下可以使用以下 4 个不同的伪类来为它设置样式::link、:visited
、:hover和active。
当你在 CSS 中为超链接元素同时定义了以上 4 个伪类的时候,要注意它们的书写顺序。正确的书写顺序是::link—:visited
—:hover
—:active。抽取第一个字母是“LVHA”,你可以把它记忆为“LoVe HAte”(喜欢讨厌)。
a:link {/* style links */}
a:visited {/* style visited link */}
a:hover {/* hover styles */}
a:active {/* active state styles */}
使用:visited 伪类的隐私安全问题
使用 :visited
伪类时有一个重要的隐私安全问题需要注意。一些高手可以通过编写脚本,利用 :visited
伪类来查看浏览器的浏览历史。为了防止由这个引起的隐私问题,现代浏览器都会限制能够在 :visited
伪类上添加的样式。这些限制能够阻止脚本从用户访问过的页面中查找用户的浏览历史。可以查看 Mozilla 的 David Baron 发表的 Preventing attacks on a user’s history through CSS :visited selectors 这篇文章。
在 David Baron 的解决方案中,被访问过的超链接仅能添加下面的一些 CSS 样式:color、background-color、border-*-color、outline-color
和column-rule-color
。
另外,如果对被访问的超链接使用 background-color 属性,需要注意一些问题:只有在超链接的 :link
状态时为超链接设置了一个背景颜色,在 :visited
状态时才能够使用 background-color 属性。
例如下面的设置不会使超链接的 :visited
状态有背景颜色出现:
a:link {
color: white;
background-color: transparent;
/* 或者没有设置背景颜色 */
}
a:visited {
color: white;
background-color: black;
}
如果要使超链接的 :visited
状态有背景颜色出现,代码应该类似下面:
a:link {
color: white;
background-color: #eee;
}
a:visited {
color: white;
background-color: black;
}
示例代码
下面的代码使用 LVHA 原则为页面中的超链接元素设置样式。
a:link {
color: skyblue;
border-bottom: 1px solid #aaa;
}
a:visited {color: grey;}
a:hover {border-bottom: 1px solid skyblue;}
a:active {
background-color: skyblue;
color: white;
}
在线演示
下面的例子将超链接元素的 :visited
状态设置为深色背景和白色文字。
a:link{
background-color: white;
color: #19b5fe;
}
a:visited {
background-color: #2d3e50;
padding: .5em;
color: #fff;
}
浏览器支持
所有的现代浏览器都支持 :visited
伪类,包括:Chrome, Firefox, Safari, Opera, Internet Explorer 以及 Android 和 iOS。