CSS 嵌套的第 nth-child() 行为很奇怪

标签 css css-selectors

我正在尝试创建一个简单的 3x3 网格(使用 <table> ),所有单元格都具有 1px边界。如果我简单地使用 CSS 来提供所有 <td>元素 a 1px border 然后内部边框将堆叠并创建 2px边界所以我对待每个<td>不同的。我已经成功地做到了这一点并使用了 nth child 减少CSS。但是,我的问题是为什么使用更少 CSS 选择器的某种逻辑方法不起作用。

这是我的 HTML

<!DOCTYPE html>
<html>
<head>
    <title>3x3 grid</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<table>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
</table>
</body>
</html>

这是有效的 CSS:

td{
    border: 1px #000;
    width:30px;
    height: 30px;
    text-align: center;
    border-style: solid;
}
tr:nth-child(2) td{
    border-top: 0px;
}
tr:nth-child(3) td{
    border-top: 0px
}
td:nth-child(1){
    border-right: 0px;
}
td:nth-child(3){
    border-left: 0px;
}
table{
    border-spacing: 0px;
    border-collapse: separate;
}

这是使用少一个选择器的 CSS,应该可以工作,但不知何故所有上部单元格最终都没有顶部边框。

td{
    border: 1px #000;
    border-top: 0px;
    width:30px;
    height: 30px;
    text-align: center;
    border-style: solid;
}
tr:nth-child(1) td{
    border-top: 1px;
}
td:nth-child(1){
    border-right: 0px;
}
td:nth-child(3){
    border-left: 0px;
}
table{
    border-spacing: 0px;
    border-collapse: separate;
}

我用 Safari 和 Firefox 测试了它。也请告诉我是否有更好的方法。

最佳答案

td 上没有顶部边框的原因是因为您没有声明border-styleborder-color...

tr:nth-child(1) td{
    border-top: 1px;
}

应该是……

tr:nth-child(1) td{
    border-top: 1px solid #000;
}

你可以通过使用 border-collapse: collapse

来大大简化这个过程

td{
    border: 1px #000;
    width:30px;
    height: 30px;
    text-align: center;
    border-style: solid;
}

table{
    border-collapse: collapse;
}
<table>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
    <tr>
        <td>1</td>
        <td>1</td>
        <td>1</td>
    </tr>
</table>

关于CSS 嵌套的第 nth-child() 行为很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32906731/

相关文章:

javascript - 光滑的 slider 边距问题 lazyYT

html - 边框图像让我发疯

html - 在绝对定位的 div 中对齐元素

javascript - 如何知道 materialize css modal 是否打开

css - 在下面的代码中,伪类 nth-of-type 和 nth-child 的行为并不像我预期的那样

javascript - sencha touch 中具有类和属性的元素的 css 选择器是什么

css - Less 选择器中的&符号是什么意思?

html - 在第 nth-child() 中创建更高的延迟?

javascript - CSS 没有格式化 ActionLinks

jquery - 使用 jQuery 删除每四个可见元素的右边距?