::用于表示伪类,例如 :hover、:focus、:nth-child() 等。:::用于表示伪元素,例如 ::before、::after、::first-line、::first-letter 等。::before 和 :before 的区别在早期的 CSS 规范中,伪类和伪元素都是使用单冒号 : 语法。为了解决这个问题,并清晰地区分伪类和伪元素,从 CSS3 开始,规范建议使用双冒号 :: 来表示伪元素,以便区分伪类和伪元素。然而,为了向后兼容,浏览器仍然支持使用单冒号表示伪元素。
使用单冒号表示伪元素(旧语法):
/* 旧语法 */
element:before {
content: "Before content";
}
element:after {
content: "After content";
}
使用双冒号表示伪元素(新语法):
/* 新语法 */
element::before {
content: "Before content";
}
element::after {
content: "After content";
}
:hover)、表单元素聚焦状态(:focus)、第一个子元素(:first-child)等。::before 和 ::after 用于在元素内容之前或之后插入内容,::first-line 选择元素的第一行,::first-letter 选择元素的第一个字母等。虽然现代浏览器都支持双冒号 :: 表示伪元素,但在某些老旧的浏览器中,可能还需要兼容性处理。因此,在实际开发中,你可能会看到同时使用单冒号和双冒号的写法以保证兼容性:
/* 兼容性写法 */
element:before,
element::before {
content: "Before content";
}
element:after,
element::after {
content: "After content";
}
总的来说,现代 CSS 开发中推荐使用双冒号 :: 来表示伪元素,这是规范化的做法。