:nth-child
和:nth-of-type
的基本使用方法;个人理解,这两个伪类都是函数式的,都有一个参数,语法格式如下:
:nth-child(n)
:nth-of-type(n)
可以看到它们都有一个参数 n ,它的值有以下三种可能:
代码:
<!-- CSS -->
<style>
body {
padding: 60px;
}
div {
width: 300px;
}
div p,
div div {
margin: 10px 0;
padding: 6px 2px;
line-height: 20px;
background-color: #f8f8f8;
text-indent: 1em;
}
.invalid {
text-decoration: line-through;
}
.list-1st p:nth-child(odd) {
color: blue;
}
.list-1st p:nth-child(even) {
color: red;
}
</style>
<!-- HTML -->
<h4 class="hello-world">p:nth-child 示例</h4>
<div class="list-1st">
<p>1. 奇数行 - P标签</p>
<div class="invalid">2. 偶数行 - DIV标签</div>
<p>3. 奇数行 - P标签</p>
<p>4. 偶数行 - P标签</p>
<div class="invalid">5. 奇数行 - DIV标签</div>
<p>6. 偶数行 - P标签</p>
<p>7. 奇数行 - P标签</p>
<p>8. 偶数行 - P标签</p>
<div class="invalid">9. 奇数行 - DIV标签</div>
<div class="invalid">10. 偶数行 - DIV标签</div>
</div>
结果:
总结(以 p:nth-child(odd)
为例说明):
p:nth-child(odd)
样式匹配规则是,首先必须匹配 odd 奇数行元素,其次匹配到的 odd 奇数行的元素类型还必须是 p 标签,必须同时满足这两个条件样式才生效。代码:
<!-- CSS -->
<style>
body {
padding: 60px;
}
div {
width: 300px;
}
div p,
div div {
margin: 10px 0;
padding: 6px 2px;
line-height: 20px;
background-color: #f8f8f8;
text-indent: 1em;
}
.invalid {
text-decoration: line-through;
}
.list-2nd div {
background-color: aquamarine;
}
.list-2nd p:nth-of-type(odd) {
color: blue;
}
.list-2nd div:nth-of-type(odd) {
color: red;
}
</style>
<!-- HTML -->
<h4 class="hello-world">p:nth-of-type 示例</h4>
<div class="list-2nd">
<p>1. P标签 - 奇数行</p>
<div>2. DIV标签 - 奇数行</div>
<p class="invalid">3. P标签 - 偶数行</p>
<p>4. P标签 - 奇数行</p>
<div>5. DIV标签 - 偶数行</div>
<p class="invalid">6. P标签 - 偶数行</p>
<p>7. P标签 - 奇数行</p>
<p class="invalid">8. P标签 - 偶数行</p>
<div>9. DIV 标签 - 奇数行</div>
<p>10. P标签 - 奇数行</p>
</div>
结果:
总结(以 p:nth-of-type(odd)
为例说明):
p:nth-of-type(odd)
样式匹配规则是,首先必须匹配元素类型为 p 标签,然后根据匹配到的结果(也就是 div.list-2nd
的所有元素类型为 p 标签的子元素),再从这个结果元素列表中匹配满足 odd 奇数行的子元素,样式才生效。div.list-2nd
中所有子元素中 p 标签,然后从这些 p 标签中查找到奇数行元素,给它们设置样式。:nth-child(n)
与 :nth-of-type(n)
的区别element:nth-child(n)
是先根据 n 匹配规则,在此基础上匹配 element;element:nth-of-type(n)
是先匹配 element,然后从匹配的结果中根据 n 匹配。