不幸的是,似乎需要额外加价
这在 FF22、IE9+(CSS2 版本为 IE8)和 Chrome28 中进行了测试。
我发现的唯一方法(并且可能是考虑到安全功能的唯一方法)根据从and状态继承的控制来获得所需的颜色差异是通过html 中的一些额外标记。a
a:visited
具体来说,所有在外面的文本都.bar
需要被自己包裹起来span
(或者两个span
元素,如果后面还有文本的.bar
话),然后.bar
文本需要双重包裹。我认为这是可行的,因为它使用值的正常默认继承color
.bar
(也控制默认值border-color
),因此它允许:visited
文本颜色状态传递给.bar
.
这是代码(我为 html 显示创建了新行,只是为了使额外的标记更明显):
更新未访问的底部边框颜色控制。
见小提琴。
HTML
<a href="http://google.com">
<span>foo </span>
<span class="bar">
<span>bar</span>
</span>
</a>
CSS(CSS3 版本)
a {
text-decoration:none;
color: green; /* controls unvisited border color */
border-bottom-width: 0px;
border-bottom-style: solid;
}
a span:not(.bar) {
color: blue; /* sets text color of unvisited links */
}
a:visited {
color: yellow; /*sets border color of visited links */
}
a:visited span:not(.bar) {
color: red; /* sets text color of visited links */
}
a:hover span:nth-child(n) {
/* nth-child(n) selects all, but is needed to override specificity of
:not(.bar) in the previous selector. NOTE: because all the text must be
wrapped in a child span, there is no need to define just the a:hover
selector without the following span, unless other links will use this
without a .bar nesting
*/
color: gray; /* sets text and border color when hovered */
/* eliminated unneeded border-color property */
}
.bar {
border-bottom-width: 1px;
border-bottom-style: inherit;
/* border-color uses color property of <a> in whatever state it is in */
}
CSS2(如果需要 IE8 浏览器支持)
您必须有条件地将不同a
元素状态的不同 CSS 集提供给 IE8(基本a
代码相同)。这不能以任何方式与上述内容结合使用,否则会破坏 Chrome 所需的工作。
见小提琴。
a span {
color: blue;
}
a:visited {
color: yellow;
}
a:visited span {
color: red;
}
a:visited span.bar {
color: inherit;
}
a:hover span,
a:hover span.bar {
color: gray;
}