如何获取HTML表中的<td>以适应内容,并让特定的<td>填写其余部分

use*_*898 45 html css html-table width

这是一个假设的例子:

table, thead, tbody, tr { width: 100%; }
    table { table-layout: fixed }
    table > thead > tr > th { width: auto; }
Run Code Online (Sandbox Code Playgroud)
<table>
      <thead>
        <tr>
          <th>Column A</th>
          <th>Column B</th>
          <th>Column C</th>
          <th class="absorbing-column">Column D</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Data A.1 lorem</td>
          <td>Data B.1 ip</td>
          <td>Data C.1 sum l</td>
          <td>Data D.1</td>
        </tr>
        <tr>
          <td>Data A.2 ipsum</td>
          <td>Data B.2 lorem</td>
          <td>Data C.2 some data</td>
          <td>Data D.2 a long line of text that is long</td>
        </tr>
        <tr>
          <td>Data A.3</td>
          <td>Data B.3</td>
          <td>Data C.3</td>
          <td>Data D.3</td>
        </tr>
      </tbody>
    </table>
Run Code Online (Sandbox Code Playgroud)

我希望每个列的宽度都适合其内容大小,并将剩下的空间留给一列使用"absorb-column"类,以便它看起来像这样:

| HTML                                                                   | 100%
| body                                                                   | 100%
| table                                                                  | 100%
|------------------------------------------------------------------------|
| Column A | Column B       | Column C | Column D                        |
|------------------------------------------------------------------------|
| Column A | Column B lorem | Column C | Column D                        |
| Column A | Column B       | Column C | Column D                        |
| Column A | Column B       | Column C | Column D                        |
|------------------------------------------------------------------------|
Run Code Online (Sandbox Code Playgroud)

你看,由于第一行中有额外的数据,B列比其余的要大一些,但是D列总是占用剩余的空间.

我玩了最大宽度,最小宽度,自动等,并且无法弄清楚如何使这项工作.

换句话说,我希望所有列都采用他们需要的宽度而不是更多,然后我希望D列用尽100%宽度表内的所有剩余空间.

gfu*_*lam 62

定义.absorbing-column的宽度

设置table-layoutauto并定义极限宽度.absorbing-column.

这里我设置了widthto,100%因为它确保此列将占用允许的最大空间量,而没有定义宽度的列将减少以适应其内容而不再进一步.

这是表格行为的一个奇怪的好处之一.该table-layout: auto算法在数学上是宽容的.

您甚至可以选择min-width在所有td元素上定义以防止它们变得太窄并且表格表现良好.

table {
    table-layout: auto;
    border-collapse: collapse;
    width: 100%;
}
table td {
    border: 1px solid #ccc;
}
table .absorbing-column {
    width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<table>
  <thead>
    <tr>
      <th>Column A</th>
      <th>Column B</th>
      <th>Column C</th>
      <th class="absorbing-column">Column D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data A.1 lorem</td>
      <td>Data B.1 ip</td>
      <td>Data C.1 sum l</td>
      <td>Data D.1</td>
    </tr>
    <tr>
      <td>Data A.2 ipsum</td>
      <td>Data B.2 lorem</td>
      <td>Data C.2 some data</td>
      <td>Data D.2 a long line of text that is long</td>
    </tr>
    <tr>
      <td>Data A.3</td>
      <td>Data B.3</td>
      <td>Data C.3</td>
      <td>Data D.3</td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)


Vit*_*des 28

演示 - http://jsfiddle.net/victor_007/ywevz8ra/

添加边框以获得更好的视图(测试)

有关white-space的更多信息

table{
    width:100%;
}
table td{
    white-space: nowrap;  /** added **/
}
table td:last-child{
    width:100%;
}
Run Code Online (Sandbox Code Playgroud)

    table {
      width: 100%;
    }
    table td {
      white-space: nowrap;
    }
    table td:last-child {
      width: 100%;
    }
Run Code Online (Sandbox Code Playgroud)
<table border="1">
  <thead>
    <tr>
      <th>Column A</th>
      <th>Column B</th>
      <th>Column C</th>
      <th class="absorbing-column">Column D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Data A.1 lorem</td>
      <td>Data B.1 ip</td>
      <td>Data C.1 sum l</td>
      <td>Data D.1</td>
    </tr>
    <tr>
      <td>Data A.2 ipsum</td>
      <td>Data B.2 lorem</td>
      <td>Data C.2 some data</td>
      <td>Data D.2 a long line of text that is long</td>
    </tr>
    <tr>
      <td>Data A.3</td>
      <td>Data B.3</td>
      <td>Data C.3</td>
      <td>Data D.3</td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

  • 如果文本比单元格宽,它将使表格比其容器宽 (2认同)