TL;DR
- 双冒号选择器是伪元素。
- 单冒号选择器是伪选择器。
双冒号 ::before
与单冒号 :before
。哪一个是正确的?
因为它是一个伪元素,所以理论上来说,正确的答案是 ::before
。
类似的 ::first-letter
也是一个伪元素。原因是:
- 它选择了一些没有现有HTML元素的东西。
- 没有
<span>
或类似的元素在你目标元素的第一个字母中包围,因此第一个字母就像页面上添加的新元素。 - 这与选择已经存在的元素的伪选择器不同,例如
:nth-child(2)
等。
有一个论点,也许你在这些情况下应该使用 :before
- 仅支持 IE8 及更低版本:这些版本的 IE 浏览器不支持双冒号。
- 所有现代浏览器都支持两种格式的写法,因为大量网站使用单冒号,浏览器很重视向后兼容性。
- 咬文嚼字:毕竟与相比双冒号少一个字符。
另一方面,::before
永远是最佳实践
- 单冒号伪元素是一个错误。永远不会有单冒号的伪元素。
- 如果你在脑海中直接区分,不妨训练你的手指做正确的事。
- 这已经足够令人困惑,所以让我们按照正确的方式进行操作。
我已经设置了我的 linter 来迫使我使用双重冒号。无论如何我不支持 IE8,以“正确”的方式做事情感觉很好。