如何向表行<tr>添加边距

sam*_*old 167 css

我有一个包含许多行的表.其中一些行是class="highlight"并且表示需要以不同方式设置样式并突出显示的行.我要做的是在这些行之前和之后添加一些额外的间距,使它们看起来与其他行稍微分开.

我以为我可以完成这件事,margin-top:10px;margin-bottom:10px;但它不起作用.任何人都知道如何完成这项工作,或者是否可以完成?这是HTML,我已经在tbody中设置了第2个tr到类突出显示.

<table>
<thead>
  <tr>
     <th>Header 1</th>
     <th>Header 2</th>
  </tr>
</thead>
<tbody>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr class="highlight">
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
  <tr>
     <td>Value1</td>
     <td>Value2</td>
  </tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

小智 144

表行不能有边距值.你能增加填充吗?那会有用.否则,您可以在行<tr class="spacer"></tr>之前和之后插入class="highlighted".

  • 除了指定`display:block`之外,向`<tr>`添加任何类型的填充都不会移动任何东西,此时`<tr>`的宽度基于内容.尽管如此,添加你建议的spacer"<tr>`并设置`height`也能很好地工作. (22认同)
  • 更确切地说,自[CSS 2.1](http://www.w3.org/TR/CSS21/box.html#propdef-margin)起,&lt;tr&gt;就不能具有边距值,但是直到[CSS 2](http ://www.w3.org/TR/1998/REC-CSS2-19980512/box.html#margin-properties)。我从未发现更改背后的原因。 (2认同)
  • 是的,不幸的是 `tr` 不能有边距值,就像史蒂夫写的那样。我为每个 `td` 设置了保证金值,就像这个替代品。:( 在我看来,`padding` 不是解决方案,特别是如果行是不同的颜色(背景)并且你需要一些,比如说,空的(白色)空间。 (2认同)

Mar*_*ark 117

border-spacing物业将适用于这种特殊情况.

table {
  border-collapse:separate; 
  border-spacing: 0 1em;
}
Run Code Online (Sandbox Code Playgroud)

参考.

  • @PardeepJain 类似 box-shadow 的盒子阴影:0px 0px 0px 1px black;会达到同样的效果 (2认同)

Mr *_*ter 57

<tr>不能自己设计样式,但你可以将<td>s设置为"高亮" <tr>sa样式,就像这样

tr.highlight td {padding-top: 10px; padding-bottom:10px}
Run Code Online (Sandbox Code Playgroud)

  • 如果`td`` background-color`与`tr`相同,这只会在视觉上有效. (7认同)

Meh*_*ner 23

行高可能是可能的解决方案

tr
{
    line-height:30px;
}
Run Code Online (Sandbox Code Playgroud)

  • 除非在任何一个孩子<td>中有多行,否则每一行都会"更高".在这种情况下,为<td>填充设置样式的答案. (2认同)

Jrd*_*Jrd 21

我知道这有点老了,但我只是按照同样的方式开始工作.你不能这样做吗?

tr.highlight {
    border-top: 10px solid;
    border-bottom: 10px solid;
    border-color: transparent;
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 谢谢,但必须移动TD元素的属性才能使它工作:tr.highlight td {border-top:10px solid; border-bottom:10px solid; border-color:transparent; } (3认同)
  • 如果你真的想要一个边框,它将无法正常工作. (3认同)

Ant*_*ier 15

首先,不要试图为a <tr>或a 设置边距,<td>因为它在现代渲染中不起作用.

  • 解决方案1

虽然保证金不起作用,但填充确实有效:

td{
    padding-bottom: 10px;
    padding-top: 10px;
}
Run Code Online (Sandbox Code Playgroud)

警告:这也会将边框推离元素,如果边框可见,则可能需要使用解决方案2.

  • 解决方案2

要保持边框靠近元素并模仿边距,请<tr>在每个卷轴表之间放置另一个,<tr>如下所示:

<tr style="height: 20px;"> <!-- Mimic the margin -->
</tr>
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 11

这不会是完全完美的,虽然我很高兴地发现,你可以控制的水平和垂直边框间距 分别:

table
{
 border-collapse: separate;
 border-spacing: 0 8px;
}
Run Code Online (Sandbox Code Playgroud)


meo*_*meo 7

因为margin被忽略tr,我通常使用一种解决方法,通过设置透明border-bottomborder-top设置background-clip属性,padding-box以便background-color不在边框下绘制.

table {
   border-collapse: collapse; /* [1] */
}

th, td {
  border-bottom: 5px solid transparent; /* [2] */
  background-color: gold; /* [3] */
  background-clip: padding-box; /* [4] */
}
Run Code Online (Sandbox Code Playgroud)
  1. 确保单元格共享一个公共边框,但完全是可选的.解决方案没有它.
  2. 5px值表示您要实现的保证金
  3. 设置background-color行/单元格
  4. 确保background没有涂在下面border

在这里看一个演示:http://codepen.io/meodai/pen/MJMVNR?editors = 1100

background-clip所有现代浏览器都支持.(和IE9 +)

或者你可以使用border-spacing.但这不适用于border-collapse设置collapse.

  • 断开链接(404)到代码笔. (2认同)

小智 6

您可能会尝试使用 CSS 转换来缩进整个 tr:

tr.indent {
   -webkit-transform: translate(20px,0);
   -moz-transform: translate(20px,0);
}
Run Code Online (Sandbox Code Playgroud)

我认为这是一个有效的解决方案。在我的 OSX 上的 Firefox 16、Chrome 23 和 Safari 6 中似乎运行良好。


Ale*_*lex 5

模仿行上空白的一种方法是使用伪选择器在上增加一些间距td

.highlight td::before, .highlight td::after
{
  content:"";
  height:10px;
  display:block;
}
Run Code Online (Sandbox Code Playgroud)

这样,标记为Highlight类的所有内容都将上下分开。

https://jsfiddle.net/d0zmsrfs/