CSS " :: " vs " : " -- 伪元素与伪选择器?

CSS " :: " vs " : " -- pseudo-element vs pseudo-selector?

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

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

"Unlike pseudo-elements, pseudo-classes can appear anywhere in selector chain."(引自 link)——我不知道 'selector chain' 是什么,但这似乎也是双冒号方法的另一个限制。如果(在我的理解中)只是一个不太受支持的单冒号版本,为什么我需要使用双冒号?

编辑:它们在功能上似乎不同: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;
}

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

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

最初他们都使用一个冒号,但是CSS3引入了双冒号来分隔两者。