伪类,更多的定义的是状态。常见的伪类有 :link、:visited、 :hover、 :active、 :not、:first-child、:last-child、:required、:valid、:invalid等等。
伪元素,不存在于DOM树中的虚拟元素,它可以像正常的html元素一样定义css,但无法使用JavaScript获取。常见伪元素有 ::after、::before、::first-letter、::first-line等等。(只能用来表示块级元素)
CSS3明确规定了,伪类用一个冒号(:)来表示,而伪元素则用两个冒号(::)来表示。但目前因为兼容性的问题,它们的写法可以是一致的,都用一个冒号(:)就可以了,所以非常容易混淆。
<style type="text/css">
p:nth-child(2){//只需关注第几个,p的父元素下面的第二个元素
color:red;
}
p:nth-of-type(2){//不仅要关注第几个,还得关注一下标签的类型,p的父元素下面的第二个p元素
color:yellow;
}
</style>
<body>
<h1>这是标题</h1>
<p>第一个段落。</p>
<p>第二个段落。</p>
<p>第三个段落。</p>
<p>第四个段落。</p>
<p>第五个段落。</p>
</body>