You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅使用CSS实现点击表格单元格切换整行多元素背景样式咨询

实现方案

核心逻辑

  • 用隐藏的checkbox作为状态开关,不需要JS即可记录点击切换状态
  • 首单元格内容用label绑定checkbox,点击首单元格即可切换选中状态
  • 通过CSS的:checked伪类配合:has()选择器,匹配当前选中行下的所有td,按位置匹配配色规则即可

完整代码

HTML代码

<table>
    <tr>
        <td>
            <input type="checkbox" id="row1" hidden>
            <label for="row1">1</label>
        </td>
        <td>A</td>
        <td>B</td>
        <td>C</td>
        <td>D</td>
        <td>E</td>
    </tr>
    <tr>
        <td>
            <input type="checkbox" id="row2" hidden>
            <label for="row2">2</label>
        </td>
        <td>F</td>
        <td>G</td>
        <td>H</td>
        <td>I</td>
        <td>J</td>
    </tr>
    <!-- 剩余10行直接按上述格式新增,修改checkbox的id和label的for属性即可 -->
</table>
    
<label>
    <input type="checkbox" hidden>
    <div>click to change (div)</div>
</label>

CSS代码

html {
    text-align: center;
}
table {
    width: 100%;
}
td {
    border: 1px black solid;
}
/* 首单元格label撑满整个单元格,点击单元格任意位置都能触发切换 */
td:first-child label {
    display: block;
    width: 100%;
    cursor: pointer;
}
/* 行选中后的配色规则 */
tr:has(input:checked) td:nth-child(2) {
    background-color: red;
}
tr:has(input:checked) td:nth-child(3) {
    background-color: yellow;
}
tr:has(input:checked) td:nth-child(4) {
    background-color: red;
}
tr:has(input:checked) td:nth-child(5),
tr:has(input:checked) td:nth-child(6) {
    background-color: lime;
}
/* 后续35个单元格的配色直接按上述格式新增nth-child规则即可 */
div {
    background-color: lightgray;
    height: 200px;
}
input:checked + div { background-color: cyan;}

扩展说明

如果后续每行有35个单元格,只需要在CSS中补充对应tr:has(input:checked) td:nth-child(N)的配色规则即可,每行的HTML结构不需要额外修改,新增12行也只需要复制行结构,修改checkbox的唯一id和对应label的for属性即可,不需要写额外逻辑。

内容的提问来源于stack exchange,提问作者Rbon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:09