【问题标题】:Display cell below previous cell在前一个单元格下方显示单元格
【发布时间】:2013-12-21 00:16:12
【问题描述】:

我有一个结构如下:

<table>
    <tr>
        <td>a</td>
        <td>b</td>
        <td>c</td>
    </tr>
    <tr>
        <td>x</td>
        <td>y</td>
        <td>z</td>
    </tr>
</table>

而且,使用 CSS,我希望看到以下结果(没有可见边框):

+---+---+
| a | b |
|   | c |
+---+---+
| x | y |
|   | z |
+---+---+

详细说明我的动机:该表是工作历史的概述,列是期间、职位和雇主。为了便于阅读,我想将雇主置于职位下方。

【问题讨论】:

    标签: html css layout html-table


    【解决方案1】:

    您无法通过使用普通表格布局的 CSS 来做到这一点。表格元素具有特殊的 display 属性(tabletable-row 等),但您可以将它们重置为 block 以使它们像普通盒子一样(就像 div,你知道的):

    table, tbody, tr, td { 
        display: block; 
    }
    

    然后构建你自己的结构,一个带有浮点数的例子:

    tr { 
        overflow: hidden; 
    }
    
    td {
        margin-left: 100px;
    }
    
    td:first-child {
        float: left;
        margin: 0;
        width: 100px;
    }
    

    jsFiddle Demo

    这样您可以保留语义信息,但可以根据您的特殊需要对其进行样式设置。

    【讨论】:

    • 超级..完全做到这一点
    • @krainert 浏览器支持可能不是最快乐的。 Chrome 和 Firefox 的行为应有尽有,但 IE9(当然还有所有旧版本)坚持使用表格布局。无法使用 IE10 或 11 进行测试。
    • 在玩弄了 kapa 的解决方案后,我得出了这个结论:jsfiddle.net/pjhmU/9 由于这种方法看起来更准确和最小,我应该将其作为答案发布而不是接受 kapa 的答案吗?
    • @krainert 随意发布并接受您自己的答案。很高兴我能帮上忙。
    【解决方案2】:

    我认为这是最简单的方法。

    <table>
    <tr>
        <td>a</td>
        <td>b</td>
    </tr>
    <tr>
        <td> </td>
        <td>c</td>
    </tr>
    <tr>
        <td>x</td>
        <td>y</td>
    </tr>
    <tr>
        <td> </td>
        <td>z</td>
    </tr>
    </table>
    

    【讨论】:

    • 不,我想保留语义敏感性,而您的示例(也是我自己的第一个想法)将无法将表捕获为(a, b, c) 元组的列表。
    【解决方案3】:

    这有点 css 巫毒,但它实际上适用于大多数浏览器:

    http://jsfiddle.net/FyLJh/

    一般保留表格样式,只更改你要重新对齐的样式:

    th { vertical-align: top; }
    td { display: block; }
    

    我在这里使用了 th + td 但你当然也可以只用一个类来做这个。

    【讨论】:

      【解决方案4】:

      虽然我同意 Kappa 解决方案,但考虑到您不想将默认的 table 布局更改为 block,这是另一个 demo,它是一个跨 支持 IE 的浏览器 !!

      td {
          margin-left: 100px;
      }
      td:first-child {
          float: left;
          margin: 0;
          width: 100px;
          background: red;
      }
      td:nth-child(2) {
          content:" ";
          float:right;
          width:60%;
          margin-top:-20px;
          text-align:center;
      }
      td:nth-child(3) {
          content:" ";
          float:right;
          width:60%;
          margin-top:10px;
          text-align:center;
      }
      

      注意 : :nth-child() 选择器在所有主流浏览器中都受支持,除了 IE8 和更早版本。所以如果你也想支持旧版本....@987654322 @

      诀窍是将所有childs 替换为class

      【讨论】:

      • +1 不错,虽然浮动仍然会改变表格布局,但至少 IE 可以理解。我只是将所有内容都更改为 block 以使其更加一致和安全。
      【解决方案5】:

      根据 kapa 的回答,我得出了以下可行的解决方案:

      td {
          vertical-align: top;
      }
      td.above, td.above + td {
          display: block;
      }
      

      对于 HTML:

      <tr>
          <td>a</td>
          <td class="above">b</td>
          <td>c</td>
      </tr>
      <tr>
          <td>x</td>
          <td class="above">y</td>
          <td>z</td>
      </tr>
      

      jsfiddle.net/pjhmU/9

      【讨论】:

        【解决方案6】:
        <table border="0">
            <tr>
                <td>a</td>
                <td>b</td>
        </tr>
        <tr>
                <td colspan="2" align="right">c</td>
            </tr>
            <tr>
                <td>x</td>
                <td>y</td>
        </tr>
        <tr>
                <td colspan="2" align="right">z</td>
            </tr>
        </table> 
        

        【讨论】:

        • 你不应该在 html 电子邮件中使用 colspan
        • 为什么不呢?它得到了广泛的支持。你能说出一个不支持colspan的客户端吗?
        • @OneEightLeft..email??问题中提到的任何地方??
        • @OneEightLeft 因为你可能有表格数据? ;)
        • @OneEightLeft "不要使用表格进行布局" != "不要使用表格"
        【解决方案7】:

        请使用这个结构

        <table>
           <tr>
              <td>a</td>
              <td style="width:50px"><span>b</span><span>c</span></td>
           </tr>
           <tr>
              <td>d</td>
              <td style="width:50px"><span>e</span><span>f</span></td>
           </tr>
        </table>
        

        【讨论】:

        • 为了语义清晰,我想保留 (a, b, c) 元组。 (另外,我需要单元格宽度来适应内容。)
        • 您可以设置表格和单元格的相对宽度,也可以设置float:right;clear:both to all span in css,它可以正常工作
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多