css 想给表格隔行设置不同颜色怎么办_nth-child 配合 background-color
技术百科
P粉602998670
发布时间:2026-01-25
浏览: 次 最常用写法是tr:nth-child(odd)和tr:nth-child(even),但需注意它按父容器中所有tr位置计数,thead/tfoot中的tr也参与计数,易导致隔行变色错位;应限定为tbody tr:nth-child(odd)以确保仅作用于数据行。
table tr:nth-child(odd) 和 tr:nth-child(even) 的基本写法
直接用 tr:nth-child(odd) 和 tr:nth-child(even) 是最常用的方式,但要注意:它匹配的是 所有 tr 元素在父容器中的位置顺序,不是“表格数据行”的逻辑序号。如果 thead 或 tfoot 里有 tr,它们

常见错误现象:表头 thead > tr 被算作第 1 行,导致第一行数据变成 nth-child(2),隔行色错位。
- 只对 tbody 内的行生效:
tbody tr:nth-child(odd) - 若无
tbody标签(HTML 允许省略),浏览器会自动补上,但选择器仍需显式写tbody才可靠 - 避免用
tr:nth-of-type()—— 它按标签名统计,但tr在 table 中通常只有一种类型,效果看似一样,实则语义错误且不可控
兼容性与 fallback 方案
:nth-child() 在 IE9+ 支持良好,IE8 及更早版本不支持。如果必须兼容 IE8,不能依赖 CSS 伪类,得靠 JS 或服务端加 class。
纯 CSS fallback 几乎不可行;JS 方案极轻量:
document.querySelectorAll('tbody tr').forEach((tr, i) => {
tr.classList.toggle('odd', i % 2 === 0);
});
然后定义 .odd { background-color: #f5f5f5; }。注意:这个 i 是 tbody 内索引,天然避开 thead 干扰。
background-color 不生效的几个典型原因
即使选择器写对了,颜色也可能没显示——多半是层叠或继承问题。
- tr 本身没有背景,但 td/th 有白色背景,会盖住 tr 的
background-color - 解决办法:给
td, th设background-color: transparent,或直接对td, th应用:nth-child() - table 设置了
border-collapse: collapse时,相邻 cell 边框合并,但背景色仍各自渲染,不影响隔行 - 某些 UI 框架(如 Bootstrap)给
tr:hover设了背景色,会覆盖隔行色,需提高选择器优先级或重置 hover
用 :nth-child(2n+1) 替代 odd 更灵活?
odd 和 2n+1 等价,但后者可微调起始点。比如想从第 2 行开始隔行(即第 2、4、6… 行着色),用 tr:nth-child(2n) 即可。
真正容易被忽略的是:当表格动态增删行时,:nth-child() 会实时重算,无需 JS 干预;但如果你用 JS 手动加 class 控制样式,就必须同步更新 class,否则序号会错乱。
# 浏览器
# css
# js
# class
# html
# 继承
# ssl
# bootstrap
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- php485返回空数组怎么回事_php485数据接
- Win11怎么关闭开机声音_Win11系统启动提示
- c++获取当前时间戳_c++ time函数使用详解
- 短链接还原php提示内存不足_调整PHP内存限制设
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- 如何使用Golang sort排序切片_Golan
- 如何减少Golang内存碎片化_Golang内存分
- 如何在 Go 中高效缓存与分发网络视频流
- Win11怎样彻底卸载自带应用_Win11彻底卸载
- c++协程和线程的区别 c++异步编程模型对比【核
- 如何使用Golang匿名函数_快速定义临时函数逻辑
- MySQL 中使用 IF 和 CASE 实现查询字
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- Windows7如何安装系统镜像_Windows7
- c# 在高并发下使用反射发射(Reflection
- Windows执行文件被SmartScreen拦截
- 如何在Golang中处理二进制数据_Golang
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- 如何在 Go 中正确反序列化 XML 多节点数组(
- Windows服务启动类型恢复方法_错误修改导致的
- Win11怎么关闭右下角弹窗_Win11拦截系统通
- Golang如何遍历目录文件_Golang fil
- C++中的std::shared_from_thi
- Mac的“预览”如何合并多个PDF_Mac文件处理
- php中self::能调用子类重写的方法吗_静态绑
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- php条件判断怎么写_ifelse和switchc
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- Win10怎样卸载TeamViewer_Win10
- Win11无法识别耳机怎么办_解决Win11插耳机
- Win11怎样安装微信开发者工具_Win11安装开
- Windows任务计划服务异常原因_任务调度失败的
- Win10系统怎么查看显卡温度_Win10任务管理
- 如何理解Go指针和内存分配关系_Go Pointe
- Win11怎么设置麦克风权限_允许应用访问Win1
- Python抽象类与接口设计_规范说明【指导】
- 如何在 Go 应用中实现自动错误恢复与进程重启机制
- php报错怎么查看_定位PHP致命错误与警告的方法
- Win11怎么更改文件夹图标_自定义Win11文件
- Win11怎么设置单手模式_Win11触控键盘布局
- 使用类变量定义字符串常量时的类型安全最佳实践
- Win11怎么关闭触控板_Win11笔记本禁用触摸
- 如何在Golang中使用time处理时间_Gola
- 微信JSAPI支付回调PHP怎么接收_处理JSAP
- 如何从 Go 的 map[string]inter
- Win11文件扩展名怎么显示_Win11查看文件后
- 如何在Golang中处理URL参数_Golang
- Win11怎么禁用键盘自带键盘_Win11笔记本禁
- Win10如何卸载自带Edge_Win10彻底卸载

QQ客服