在页面开发中,我们经常会遇到需要给父级Section元素设置奇偶交替样式的需求,比如列表区块交替背景色、卡片区域交替边距等,用CSS原生选择器就能轻松实现,不需要额外添加类名或者JS逻辑。

核心实现原理
要实现Section元素的奇偶样式,核心是使用CSS的nth-of-type结构伪类选择器,这个选择器会根据元素在父容器中的同类型排列顺序进行匹配,我们可以用even匹配偶数位置元素,用odd匹配奇数位置元素。
需要注意的是,nth-of-type只会匹配同类型的元素,也就是只会统计父容器下所有Section标签的位置,不会把其他标签算进去,这一点比nth-child更精准,不容易出现匹配错误的问题。
基础实现示例
假设我们有一个容器div,里面包含多个Section子元素,需要给奇数位置的Section设置浅灰色背景,偶数位置的设置白色背景,代码如下:
/* 父容器样式 */
.section-container {
padding: 20px;
}
/* 奇数位置Section样式 */
.section-container section:nth-of-type(odd) {
background-color: #f5f5f5;
padding: 16px;
margin-bottom: 12px;
border-radius: 4px;
}
/* 偶数位置Section样式 */
.section-container section:nth-of-type(even) {
background-color: #ffffff;
padding: 16px;
margin-bottom: 12px;
border-radius: 4px;
border: 1px solid #e8e8e8;
}对应的HTML结构如下:
<div class="section-container">
<section>
<h3>第一个Section(奇数位)</h3>
<p>这是奇数位置的区块内容</p>
</section>
<section>
<h3>第二个Section(偶数位)</h3>
<p>这是偶数位置的区块内容</p>
</section>
<section>
<h3>第三个Section(奇数位)</h3>
<p>这是奇数位置的区块内容</p>
</section>
<div>其他非Section元素</div>
<section>
<h3>第四个Section(偶数位)</h3>
<p>这是偶数位置的区块内容,前面的div不会影响Section的位置计数</p>
</section>
</div>常见注意事项
- 如果父容器下除了Section还有其他同类型元素,比如还有
article标签,不会影响Section的奇偶计数,因为nth-of-type只统计同类型元素。 - 如果需要兼容非常老旧的浏览器,比如IE8及以下,
nth-of-type是不支持的,这种情况可以改用JS给奇偶位置的Section添加不同的类名来实现。 - 除了
even和odd,还可以用公式比如nth-of-type(2n)表示偶数位,nth-of-type(2n+1)表示奇数位,用法和even、odd效果一致。
扩展场景:嵌套Section的奇偶样式
如果是嵌套的Section结构,需要给父级Section设置奇偶样式,只需要把选择器的父容器指向对应的上层元素即可,比如下面的例子给外层容器的直接子Section设置奇偶样式:
/* 只匹配外层容器下的直接子Section,忽略嵌套的内层Section */
.outer-container > section:nth-of-type(odd) {
border-left: 4px solid #1890ff;
}
.outer-container > section:nth-of-type(even) {
border-left: 4px solid #52c41a;
}这样即使Section内部还有嵌套的Section,也不会影响外层父级Section的奇偶样式匹配,逻辑会更清晰。
CSSnth-of-typeSection样式逻辑奇偶选择器修改时间:2026-05-29 17:22:01