围绕表中特定行的边框?

Kyl*_*nin 119 html css border css-tables

我正在尝试设计一些HTML/CSS,它可以在表格中的特定行周围放置边框.是的,我知道我不是真的应该使用表格进行布局,但我不知道足够的CSS来完全替换它.

无论如何,我有一个包含多行和多列的表,有些与rowspan和colspan合并,我想在表的各个部分周围放一个简单的边框.目前,我正在使用4个单独的CSS类(顶部,底部,左侧,右侧),我分别附加到表<td>的顶部,底部,左侧和右侧的单元格.

.top {
  border-top: thin solid;
  border-color: black;
}

.bottom {
  border-bottom: thin solid;
  border-color: black;
}

.left {
  border-left: thin solid;
  border-color: black;
}

.right {
  border-right: thin solid;
  border-color: black;
}
Run Code Online (Sandbox Code Playgroud)
<html>

<body>

  <table cellspacing="0">
    <tr>
      <td>no border</td>
      <td>no border here either</td>
    </tr>
    <tr>
      <td class="top left">one</td>
      <td class="top right">two</td>
    </tr>
    <tr>
      <td class="bottom left">three</td>
      <td class="bottom right">four</td>
    </tr>
    <tr>
      <td colspan="2">once again no borders</td>
    </tr>
    <tr>
      <td class="top bottom left right" colspan="2">hello</td>
    </tr>
    <tr>
      <td colspan="2">world</td>
    </tr>
  </table>

</html>
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来做我想要的?我尝试将顶部和底部应用于a <tr>但它不起作用.(ps我是CSS的新手,所以我可能错过了一个非常基本的解决方案.)

注意:我需要有多个有边框的部分.基本思想是拥有多个边界集群,每个集群包含多行.

eni*_*ent 111

怎么样tr {outline: thin solid black;}?适用于tr或tbody元素,并且似乎与大多数浏览器兼容,包括IE 8+,但之前没有.

  • 明白了,我也需要它.在你自己的tbody中包含你想要一个边框的行集,上面的css将在它们的集合周围创建一个边框 - 即顶行的顶部边框,底部行的底部边框,左边并在tbody中的所有行上右边界.边界实际上并没有"在"那些行上,它们位于tbody本身的轮廓上,只是试图描述效果. (3认同)

Kyl*_*nin 53

谢谢所有回复的人!我已经尝试了这里提出的所有解决方案,并且我已经在互联网上搜索了更多其他可能的解决方案,我想我找到了一个有前途的解决方案:

tr.top td {
  border-top: thin solid black;
}

tr.bottom td {
  border-bottom: thin solid black;
}

tr.row td:first-child {
  border-left: thin solid black;
}

tr.row td:last-child {
  border-right: thin solid black;
}
Run Code Online (Sandbox Code Playgroud)
<html>

<head>
</head>

<body>

  <table cellspacing="0">
    <tr>
      <td>no border</td>
      <td>no border here either</td>
    </tr>
    <tr class="top row">
      <td>one</td>
      <td>two</td>
    </tr>
    <tr class="bottom row">
      <td>three</td>
      <td>four</td>
    </tr>
    <tr>
      <td colspan="2">once again no borders</td>
    </tr>
    <tr class="top bottom row">
      <td colspan="2">hello</td>
    </tr>
    <tr>
      <td colspan="2">world</td>
    </tr>
  </table>

</body>

</html>
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

而不必到补充的top,bottom,left,和right班级的每一个<td>,都是我所要做的就是添加top row到顶部<tr>,bottom row至底部<tr>,并且row每一个<tr>之间.这个解决方案有什么问题吗?我应该注意哪些跨平台问题?


Sun*_*ise 36

如果您将border-collapse样式设置collapse为父表,您应该能够设置样式tr:(样式是内联的演示)

<table style="border-collapse: collapse;">
  <tr>
    <td>No Border</td>
  </tr>
  <tr style="border:2px solid #f00;">
    <td>Border</td>
  </tr>
  <tr>
    <td>No Border</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

输出:

HTML输出


Sim*_*ast 8

我也只是在玩这个,这对我来说似乎是最好的选择:

<style>
    tr { 
        display: table;            /* this makes borders/margins work */
        border: 1px solid black;
        margin: 5px;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

请注意,这将阻止使用流体/自动列宽,因为单元格将不再与其他行中的对齐,但边框/颜色格式仍然可以正常工作.解决方案是给TR和TD指定一个宽度(px或%).

当然,tr.myClass如果您只想将它​​应用于某些行,您可以创建选择器.display: table然而,显然不适用于IE 6/7,但可能还有其他黑客(hasLayout?)可能适用于那些.:-(

  • 此解决方案不正确:"display:table"将整行放入一个表格单元格中 - 相对于表格的其他行,您将丢失格式.我在Firefox和Chromium中试过这个. (6认同)