【问题标题】:CSS " :: " vs " : " -- pseudo-element vs pseudo-selector? [duplicate]CSS " :: " vs " : " -- 伪元素 vs 伪选择器? [复制]
【发布时间】:2015-06-27 13:37:05
【问题描述】:

我正在研究 CSS 和排版,并遇到了这个有趣的伪选择器概念。我使用过单冒号伪选择器,但不熟悉伪选择器的双冒号版本。 I understand 双冒号被称为伪元素而不是伪选择器 - 但为什么呢?又有什么区别呢?

我也知道单冒号得到更多支持,那么在什么情况下会使用双冒号伪元素呢?是否存在需要双冒号而单冒号无法完成工作的用例?那可能是什么情况?

“与伪元素不同,伪类可以出现在选择器链中的任何位置。” (来自链接的引用) - 我不知道“选择器链”是什么,但这似乎也是双冒号方法的另一个限制。如果它(在我的理解中)只是受支持较少的单冒号版本,为什么我需要使用双冒号?

编辑:它们在功能上似乎不一样:fiddle

<div><p>First Line</p></div>
<div><p>Second Line</p></div>

css

div:nth-child(1) > p { 
    color: green;
}

div::nth-child(2) > p { 
    color: blue;
}

【问题讨论】:

  • As MDN states: “有时你会看到双冒号 (::) 而不是一个 (:)。这是 CSS3 的一部分,也是一种区分伪类和伪元素的尝试. 大多数浏览器都支持这两个值。”
  • 根据developer.mozilla.org/en/docs/Web/CSS/:nth-childnth-child 是一个伪类选择器,所以你应该使用单冒号,而不是双冒号(因为它不是伪元素选择器)。
  • 当文档称它们为伪类时,你为什么称它们为伪选择器?
  • @Mr Lister:我怀疑他们对这个词的使用正是这个问题出现的原因。

标签: html css css-selectors


【解决方案1】:

伪类 (:) 允许您设置元素的不同状态的样式,例如当您将鼠标悬停在它上面时,当它被禁用时,当它是其父级的第一个子级时,等等。

伪元素 (::) 允许您为元素的不同部分设置样式,例如首行、首字母、前后插入内容等

原来都是用单冒号,但是 CSS3 引入了双冒号来分隔两者。

【讨论】:

  • 单冒号伪插入内容没有问题。
  • 所以虽然我不能以同样的方式使用::::: 会失败,例如::hover),但我可以在任何情况下使用:?跨度>
  • 在他们引入新的伪元素之前,是的,在大多数情况下,单个冒号应该可以正常工作。
  • @BoltClock 你是对的。符合 CSS3 规范的伪类 :selector,(即 :hover:nth-child(2))和伪元素::selector(即 ::after::first-line)它们都被视为 selector (或部分)。无论如何,作者的这个问题意味着他完全误解了 ::: selectors 的含义。
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2012-02-15
相关资源
最近更新 更多