【问题标题】:HTML table remove padding between specific columnsHTML表格删除特定列之间的填充
【发布时间】:2012-07-20 01:33:50
【问题描述】:

我有一张有点像这样的桌子:

/---+---+---+---+---+---\
| A | B | C | D | E | F |
\---+---+---+---+---+---/

我想让 A 和 B 在视觉上看起来在同一个单元格中,但实际上不是在同一个单元格中。

为此,我需要将 A 和 B 之间的边框和内边距设为 0px。

但是,设置 TD 填充(或边距!)对我不起作用。那么,关于我做错了什么有什么想法吗?

【问题讨论】:

  • @GeorgesOatesLarsen 如果您只想要某一行,请指定,我将更新我的代码以向您展示如何操作。否则,如果您确实想要前两列,请接受我的回答,因为它应该适合您:-)
  • 哦不!没关系,非常感谢,你提供的东西应该像魅力一样,我只是在研究你使用的东西,以便我能理解并自己测试它嘿嘿

标签: html css html-table padding


【解决方案1】:

使用 CSS 这很容易,特别是如果您希望第一列和第二列始终合并,如下所示。

:nth-child(2) 选择此 css 中每一行的第二个 td :first-child选择这个css中每一行的第一个td,也可以写成:nth-child(1)

代码:

table
{
border-collapse:collapse;   
}

td
{
padding:4px;
border:1px solid black;   
}

tr td:first-child
{
padding-right:0;
margin-right:0;
border-right:0;
}

tr td:nth-child(n)
{
padding-left:0;
margin-left:0;
border-left:0;   
}

示例页面:

http://jsfiddle.net/h6DWg/1/

编辑

OP 请求保持边框不折叠,保持边框不折叠的新示例位于http://jsfiddle.net/h6DWg/10/

【讨论】:

  • 我现在只是在测试,但我对w3schools.com/cssref/pr_tab_border-collapse.asp 做了一些研究,我在表格中的每个 td 上都有双边框,这允许背景颜色通过(这就是为什么我想要一些他们看起来折叠 - 遮挡背景)。我必须进行测试以确定,但如果我理解正确,这将从我的表格中删除所有双边框:(有没有办法设置边框折叠以折叠每行的前两个元素?
  • @GeorgesOatesLarsen 回答您的问题。边框折叠仅适用于表格或内联表格。至于实现双边框的目标,您可以尝试在您的桌子上使用border:4px double black;,如下所示:jsfiddle.net/h6DWg/3 虽然它不会让背景颜色通过。
  • @GeorgesOatesLarsen 做你所说的你可能最好在每个单元格中添加一个 div 并将你的单元格内容放入 div 中,给 div 你想要的背景颜色并给它和单元格边框。
  • 啊,谢谢!您的答案应该被标记为正确答案。我真的没有问一个容易回答的问题!我会将其标记为正确并从我的问题中删除第二个问题,因为我的形式很糟糕
  • @GeorgesOatesLarsen 模拟未折叠的表格样式很难做到,特别是如果您想将两列合并为一列。请问为什么需要两个细胞才能看起来像一个?
【解决方案2】:

我有一个不同的解决方案,虽然比之前建议的稍微复杂一些,但我相信它会给您在如何应用该解决方案方面提供更大的灵活性。

首先,它确实需要一些 css 代码,如下所示:

td:not([colspan='2']) {
  /*your styling here*/
}
td[colspan='2'] {
  display: table-row;
}
td[colspan='2'] > div {
  display: table-cell;
  width: 50%;
  /*same styling here*/
}

最后是html:

<table>
  <tbody>
    <tr>
      <td colspan='2'>
        <div id="cell-a"></div>
        <div id="cell-b"></div>
      </td>
      <td id="cell-c"></td>
      <!--and so on-->

基本上,css 模仿表格的内置显示以优化表格行样式。这将允许 css 完成所有工作,此外,将允许您将 colspan='2' 放在任何地方,以便在需要的地方将两个单元格加倍。我已经在本地进行了测试以确保它有效。

编辑: 刚刚在 td[colspan='2'] > div 下添加了 width: 50% 以便在表格结构中将它们适当地隔开。

【讨论】:

  • 不要粗鲁,但这是不好的样式处理,应尽量避免内联样式,表格和表格设置(如 colspan)也应避免。如果有人坚持使用表格,最好的帮助他们的方法是不要建议那些很快就会过时的旧方法(比如内联样式/表格设置)。您已经可以在 div 上显示:table,您可以仅使用 div 构建整个表格系统,无需 td、table、tr 等。
  • @Event_Horizo​​n 在表格与 div 的主题上我同意您的看法,但是 George 已经在使用表格,并要求使用表格来解决问题。但是,我礼貌地不同意您对内联样式的倾向,我相信在某些情况下,例如 George 刚刚提供的那种,当您在特定地点需要某种解决方案时,这是完全可以接受的。
  • 对,但是如果他想要将多个文件中的几列合并到一列中会发生什么,他将不得不编辑每个文件并更改它们,我建议他的方式只需要编辑更容易的 CSS 文件。总的来说,我认为在 CSS 中使用样式总是比内联更好。
  • @Event_Horizo​​n:说到这一点,人们可以轻松地将样式移动到样式表中。直到它会被重复,这真的重要吗?
  • 很好的解决方案!这是针对我一直在修改的主题(不是从头开始创建)结果他们无论如何都使用 colspan=2 inline,所以不用担心! (而且它只是在一个地方,表格是 PHP 生成的)我从来不知道你甚至可以做到这一点,非常感谢!但是,如果需要,我可以看到自己使用 Event_Horizo​​n 选择元素的方法,然后使用 CSS 设置 ColSpan,但保持其他所有内容相同