为所有行放置边框间距需要第一个和最后一个,使用nth-child

时间:2016-02-17 04:26:11

标签: html css css-selectors html-table border-spacing

我正在尝试使用nth-child为除第一行和最后一行之外的所有行设置边框间距,但由于某种原因它不起作用。我做错了什么?

table {
border: 1px solid black;
width: 98%;
margin: 0 auto;
border-collapse: separate;
border-spacing: 10px 50px;
}
td {
border: 1px solid black;
}
tr:nth-child(1) td:nth-child(1) {
border-spacing : 0px 0px; 
}
tr:nth-child(1) td:nth-child(2) {
border-spacing : 0px 0px; 
}
tr:nth-child(3) td:nth-child(1) {
border-spacing : 0px 0px; 
}
tr:nth-child(3) td:nth-child(2) {
border-spacing : 0px 0px; 
}
<table>
<tr><td> row1 col1 </td><td> row1 col2 </td></tr>
<tr><td> row2 col1 </td><td> row2 col2 </td></tr>
<tr><td> row3 col1 </td><td> row3 col2 </td></tr>
<tr><td> row4 col1 </td><td> row4 col2 </td></tr>
<tr><td> row5 col1 </td><td> row5 col2 </td></tr>
</table>

2 个答案:

答案 0 :(得分:1)

检查下面的代码并且您可以将border-spacing效果应用于表格而不是td or tr,您只能直接使用td填充,然后使用:first-child and :last-child删除填充第一个和最后一个td or tr

table {
border: 1px solid black;
width: 98%;
margin: 0 auto;
border-collapse: separate;
border-spacing: 10px 50px;
}

td {
border: 1px solid black;
padding: 50px 10px;
}

tr:first-child td,tr:last-child td {
  padding: 5px; 
}
<table>
<tr><td> row1 col1 </td><td> row1 col2 </td></tr>
<tr><td> row2 col1 </td><td> row2 col2 </td></tr>
<tr><td> row3 col1 </td><td> row3 col2 </td></tr>
<tr><td> row4 col1 </td><td> row4 col2 </td></tr>
<tr><td> row5 col1 </td><td> row5 col2 </td></tr>
</table>

答案 1 :(得分:0)

如果我理解正确,那么border-spacing不是你所追求的,但效果应该可以用填充来实现。像下面这样的东西可以给你一种你似乎想要的可变间距:

td {
  padding: 50px 10px;
}
tr:first-child td,
tr:last-child td {
  padding: 0; 
}

由于您说要定位第一行和最后一行,:first-child:last-child:nth-child更适合任务,这对于更复杂的选择更为合适模式(例如,每三个孩子等)。

我怀疑为了清晰起见添加了边框,但是如果你需要它们,你可以做一些事情,比如将div包裹起来=每个td的内容有填充并给出1px边框td div(选择div中的任何td

但是如果填充物在间距方面达到了你想要的位置,那么其余部分就可以很容易地被砍掉。

相关问题