【问题标题】:Combine a:visited with a:after, or chaining pseudo-classes with pseudo-elements将 a:visited 与 a:after 结合,或将伪类与伪元素链接起来
【发布时间】:2013-12-13 19:09:47
【问题描述】:

假设我想在链接被访问后在链接旁边添加一个形状(如复选标记),而不是让它变成紫色,使用 a:after 和 a:visited。

我不确定是否应该选择这样的形状:

a:visited:after {

或者像这样:

a:visited a:after

a:visited :after {

(对于何时应该或不应该在伪元素之前添加空格,我也有点模糊,或者它甚至重要吗?)

或者可能是不同的东西?

现在我的 css 看起来像这样:

a:visited:after {
    /* check mark shape */
    content:'\00a0';
    color: black;
    position: relative;
    left:15px;
    display:inline-block;
    width: 3px;
    height: 6px;
    border: solid black;
    border-width: 0 2px 2px 0;  
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -o-transform: rotate(45deg);
}

复选标记形状代码来自 http://webitect.net/design/webdesign/creating-fancy-bullet-points-with-pure-css3/

感谢您的帮助。

【问题讨论】:

标签: html css css-selectors


【解决方案1】:

您应该像当前一样使用a:visited:after。它不起作用不是因为您的代码中的错误,而是因为问题在于:visited 伪类 - 因为privacy concerns,它不允许使用伪元素。

因此,基本上,您将无法仅将复选标记图标应用于访问过的链接。

关于这个:

(对于何时应该或不应该在伪元素之前添加空格,我也有点模糊,或者它甚至重要吗?)

这很重要,因为空格代表一个后代组合器:

  1. 选择器a:visited a:after 代表a:after 伪元素,它是另一个a 的后代,这是一个访问链接,这在HTML 中不太有意义。

  2. 选择器a:visited :after 类似于a:visited a:after,除了它代表:after任何a:visited 的后代。

    可以改写为a:visited *:after。请参阅规范中的the universal selector

通过省略空格,您将伪元素直接应用于它之前的选择器表示的元素,在您的例子中是a:visited,而不是它的任何后代。

【讨论】:

  • 虽然我意识到 OP 在他最初的问题中使用了 :after,但 W3C 不建议对伪元素使用双冒号语法:::after
  • @David Thomas:如果您想保持与 IE
  • @Jared Farrish:selector 是一个通用(广义)术语; combinator 指的是表示两个复合选择器之间关系的符号;例如#parent > .child。我有另一个答案here 有一个完整的定义词汇表,虽然我不确定是否应该将它移到 wiki 或其他东西,因为这个问题并不期望整个词汇表。
  • @ShaltNot:同意,我自己从不喜欢这个决定。如果 API 需要对链接的状态撒谎,那很好,但限制样式功能对我来说似乎是在挥手。
  • @BoltClock,我会在您的链接下方放置一个简单的 div,并在访问链接时使链接的字体大小更大。然后我可以通过查询它下面的div的位置来知道你是否访问过那个链接。当然还有更多的诡计方式,但这是大致的想法。
猜你喜欢
  • 2017-01-22
  • 2021-06-10
  • 1970-01-01
  • 2021-09-10
  • 2011-10-27
  • 2015-11-03
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多