nth 元素选择
当我们要一组 class 同名,或者连续的一组元素的其中 一个 ,或者某种规律的元素 添加 单独样式的时候,不妨看看这类的元素选择器。
1. 官方定义
nth-child(n) 选择器匹配属于其父元素的第 N 个子元素; nth-last-child(n) 选择器匹配属于其元素的第 N 个子元素的每个元素,从最后 一个 子元素开始计数; nth-of-type(n) 选择器匹配属于父元素的 特定类型 的第 N 个子元素的每个元素。
2. 解释
nth-child(n) 、 nth-last-child(n) 、 nth-of-type(n) 都是用来匹配父元素内部子元素的。不过也有些区别:
nth-child 按照个数来算;
nth-of-type 按照类型来计算;
nth-last-child(n) 从最后 一个 子元素往前开始计算。
3. 语法
.item :nth-child(2n+1) {
}
.item :nth-of-type(n) {
}
.item :nth-last-child(2n) {
}
n 从 开始计数的正整数。
4. 兼容性
IE Edge Firefox Chrome Safari Opera ios android all all all all all all all all
5. 实例
选择 demo 内第 3 个子元素背景为红色。
使用 nth-child 。
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-child(3) {
background : red ;
}
效果 图:
第三个背景变红 效果 图
<!DOCTYPE html>
< html lang = " en " >
< head >
< Meta charset = " UTF-8 " >
< Meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Document </ title >
< style >
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-child(3) {
background : red ;
}
</ style >
</ head >
< body >
< div class = " demo " >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
</ body >
</ html >
使用 nth-last-child 。
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-last-child(2) {
background : red ;
}
效果 图
第三个背景变红 效果 图
<!DOCTYPE html>
< html lang = " en " >
< head >
< Meta charset = " UTF-8 " >
< Meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Document </ title >
< style >
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-last-child(2) {
background : red ;
}
</ style >
</ head >
< body >
< div class = " demo " >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
</ body >
</ html >
使用 nth-of-type 。
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(3) {
background : red ;
}
效果 图
第三个背景变红 效果 图
<!DOCTYPE html>
< html lang = " en " >
< head >
< Meta charset = " UTF-8 " >
< Meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Document </ title >
< style >
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(3) {
background : red ;
}
</ style >
</ head >
< body >
< div class = " demo " >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
</ body >
</ html >
6. 经验 分享
在实例中我们看到 nth-of-type 和 nth-child 同样都使用的是 (3), 那么它们的不同是什么呢?下面这个例子我们一起看下:
< div class = " demo " >
< p class = " item " > 我是 p 标签 </ p >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
< div class = " demo " >
< p class = " item-2 " > 我是 p 标签 </ p >
< div class = " item-2 " > 1 </ div >
< div class = " item-2 " > 2 </ div >
< div class = " item-2 " > 3 </ div >
< div class = " item-2 " > 4 </ div >
</ div >
.demo {
float : left ;
}
.item , .item-2 {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(3) {
background : red ;
}
.item-2 :nth-child(3) {
background : red ;
}
效果 图
`nth-of-type` 和 `nth-child` 效果 图
通过 效果 图我们就清楚的明白他们的差异了。
简述实例展现 效果 ,通过实例分析他们两个的区别
<!DOCTYPE html>
< html lang = " en " >
< head >
< Meta charset = " UTF-8 " >
< Meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Document </ title >
< style >
.demo {
float : left ;
}
.item , .item-2 {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(3) {
background : red ;
}
.item-2 :nth-child(3) {
background : red ;
}
</ style >
</ head >
< body >
< div class = " demo " >
< p class = " item " > 我是 p 标签 </ p >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
< div class = " demo " >
< p class = " item-2 " > 我是 p 标签 </ p >
< div class = " item-2 " > 1 </ div >
< div class = " item-2 " > 2 </ div >
< div class = " item-2 " > 3 </ div >
< div class = " item-2 " > 4 </ div >
</ div >
</ body >
</ html >
下面是让所有偶数的背景变红。
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(2n) {
background : red ;
}
效果 图:
偶数的背景变红 效果 图
<!DOCTYPE html>
< html lang = " en " >
< head >
< Meta charset = " UTF-8 " >
< Meta name = " viewport " content = " width=device-width, initial-scale=1.0 " >
< title > Document </ title >
< style >
.item {
width : px ;
height : px ;
text-align : center ;
line-height : px ;
border : px solid #ccc ;
background : #f2f2f2 ;
}
.item :nth-of-type(2n) {
background : red ;
}
</ style >
</ head >
< body >
< div class = " demo " >
< div class = " item " > 1 </ div >
< div class = " item " > 2 </ div >
< div class = " item " > 3 </ div >
< div class = " item " > 4 </ div >
</ div >
</ body >
</ html >
使用 nth-of-type(3n+1) 起作用,而 nth-of-type(1+3n) 不起作用,所以 n 一定要放在最前面。
calc 计算属性 ? ?before && after 位置