Skip to content

Latest commit

 

History

History
37 lines (23 loc) · 1.79 KB

double-colon-before-vs-single-colon-before.md

File metadata and controls

37 lines (23 loc) · 1.79 KB

::before vs :before

注意双冒号 ::before 和 单冒号 :before,哪个是正确的?

从技术上讲,正确答案是 ::before,但这并不意味着你可以随意使用它。

情况是这样:

  • 双冒号选择器是伪元素
  • 单冒号选择其实伪选择器

::before 确实是为元素,所以它应该和双冒号一起使用。

伪元素和伪选择器之间的区别非常令人困惑。幸运的是,::after::before 都相当简单。 它们实际上为页面中添加了一些新元素。

但是类似于 ::first-letter 的也是伪元素。我的推断是,它选中了一些在 HTML 元素中不存在的东西。 目标元素的第一个字母并没有用 <span> 包裹起来,所以 ::first-letter 似乎是你添加到页面上的新元素。 它与伪选择器不同,伪选择器会选择已经存在的东西,例如 :nth-child(2) 等。

::before 是伪元素,而双冒号是正确的使用方式,是吗?

在你使用 :before 之前些论据:

  • IE8 及以下浏览器只支持 :before,不支持 ::before
  • 所有现代浏览器两者都支持,因为大量网站使用 :before,而且浏览器确实重视向后兼容。
  • 少一个字符 :

我也听人们说 CSS linters 要求(或自动)使用单冒号。个人而言,我同意他们这样做。似乎很好。我比较重视一致性。

另一方面,在使用 ::before 之前也有这样的论据:

  • 单冒号伪元素是一个错误。将不会有任何带有单冒号的伪元素。
  • 如果在你的脑海中能够明确区分,那就训练手指去做正确的事情。
  • 已经够让人困惑了,就让我们遵循正确的方式。

我已经把我的 linter 设置为强制使用双冒号。我不再支持 IE8 了,做正确的事情感觉还不错。