【问题标题】:Table with table-layout: fixed; and how to make one column wider带有表格布局的表格:固定;以及如何使一列更宽
【发布时间】:2011-09-09 09:13:39
【问题描述】:

所以我有一张这种风格的桌子:

table-layout: fixed;

这使得所有列的宽度相同。我想让一列(第一列)更宽,然后其余列以相等的宽度占据表格的剩余宽度。

如何实现?

table {
  border-collapse: collapse;
  width: 100%;
  border: 1px solid black;
  background: #ddd;
  table-layout: fixed;
}

table th, table td {
  border: 1px solid #000;
}

table td.wideRow, table th.wideRow {
  width: 300px;
}
<table class="CalendarReservationsBodyTable">
  <thead>
    <tr>
      <th colspan="97">Rezervovane auta</th>
    </tr>
    <tr>
      <th class="corner wideRow">Auto</th>
      <th class="odd" colspan="4">0</th>
      <th class="" colspan="4">1</th>
      <th class="odd" colspan="4">2</th>
      <th class="" colspan="4">3</th>
      <th class="odd" colspan="4">4</th>
      <th class="" colspan="4">5</th>
      <th class="odd" colspan="4">6</th>
      <th class="" colspan="4">7</th>
      <th class="odd" colspan="4">8</th>
      <th class="" colspan="4">9</th>
      <th class="odd" colspan="4">10</th>
      <th class="" colspan="4">11</th>
      <th class="odd" colspan="4">12</th>
      <th class="" colspan="4">13</th>
      <th class="odd" colspan="4">14</th>
      <th class="" colspan="4">15</th>
      <th class="odd" colspan="4">16</th>
      <th class="" colspan="4">17</th>
      <th class="odd" colspan="4">18</th>
      <th class="" colspan="4">19</th>
      <th class="odd" colspan="4">20</th>
      <th class="" colspan="4">21</th>
      <th class="odd" colspan="4">22</th>
      <th class="" colspan="4">23</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="alignRight wideRow">KE-260 FC - Octavia combi</td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td colspan="16" class="highlighted borderLeft" title="Richard Knop">
        Richard Knop
      </td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td colspan="14" class="highlighted" title="Richard Knop">
        Richard Knop
      </td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
      <td class=" borderLeft"></td>
      <td class="odd"></td>
      <td class=""></td>
      <td class="odd"></td>
    </tr>
  </tbody>
</table>

jsfiddle:http://jsfiddle.net/6p9K3/

注意第一列,我希望它是300px 宽。

【问题讨论】:

    标签: html css xhtml


    【解决方案1】:

    您是否正在创建一个非常大的表(数百行和数百列)?如果是这样,table-layout: fixed; 是个好主意,因为浏览器只需要读取第一行即可计算和渲染整个table,因此加载速度更快。

    但如果没有,我建议转储 table-layout: fixed; 并更改您的 css 如下:

    table th, table td{
    border: 1px solid #000;
    width:20px;  //or something similar   
    }
    
    table td.wideRow, table th.wideRow{
    width: 300px;
    }
    

    http://jsfiddle.net/6p9K3/1/

    【讨论】:

    • 这不能正常工作。看8、9、10、11列,太窄了。
    • 明白了。您可以通过将内容放在跨越四个ths 的td 中来解决此问题,如下所示:&lt;div style="width:80px;"&gt;Richard Knop&lt;/div&gt;width 设置为所有单个tds 的总和。见这里jsfiddle.net/6p9K3/2
    【解决方案2】:

    你可以做的是这样的(伪代码):

    <container table>
      <tr>
        <td>
          <"300px" table>
        <td>
          <fixed layout table>
    

    基本上,将表拆分为两个表,然后将其包含在另一个表中。

    【讨论】:

    • 嵌套表是最好的表
    • 我知道这是伪代码,但作为像 Pug.js 这样的 HTML 框架,这将是非常棒的!
    【解决方案3】:

    你可以只给第一个单元格(因此是列)一个宽度,其余的默认为auto

    table {
      table-layout: fixed;
      border-collapse: collapse;
      width: 100%;
    }
    td {
      border: 1px solid #000;
      width: 150px;
    }
    td+td {
      width: auto;
    }
    <table>
      <tr>
        <td>150px</td>
        <td>equal</td>
        <td>equal</td>
      </tr>
    </table>

    或者获取列宽的“正确方法”可能是使用col element 本身

    table {
      table-layout: fixed;
      border-collapse: collapse;
      width: 100%;
    }
    td {
      border: 1px solid #000;
    }
    .wide {
      width: 150px;
    }
    <table>
      <col span="1" class="wide">
        <tr>
          <td>150px</td>
          <td>equal</td>
          <td>equal</td>
        </tr>
    </table>

    【讨论】:

    • 是的似乎 - 当然 col 技术无论如何都可以:**see updated fiddle - 然后使用 colspan 方法,您也可以根据需要设置其他列宽
    • 如果你有一个thead,宽度应该设置在它的th
    • 不起作用,如果有可用的表格标题:&lt;table&gt;&lt;caption&gt;...&lt;/caption&gt;&lt;tbody&gt;....&lt;/tbody&gt;&lt;/table&gt;
    • 只需使用td:first-of-type { width: 150px; }。不需要两个选择器。还要记住,table-layout: fixed 的表格的第一行决定了宽度。
    • @ZachSaucier 在这里提出了一个非常重要的观点,很容易被忽视。您可以通过设置 table-layout: fixed 到该特定行来指定浏览器开始查看宽度的行。我看到的其他地方都只说“它开始查看第一个单元格”。
    【解决方案4】:

    table-layout:fixed重要的是列宽由表格的第一行决定。

    所以

    如果你的表结构如下(标准表结构)

    <table>
      <thead>
          <tr>
              <th> First column </th>
              <th> Second column </th>
              <th> Third column </th>        
          </tr>
      </thead>
    
       <tbody>
          <tr>
              <td> First column </td>
              <td> Second column </td>
              <td> Third column </td>        
          </tr>
      </tbody>
    

    如果你想给第二列一个宽度,那么

    <style> 
        table{
            table-layout:fixed;
            width: 100%;
        }
    
        table tr th:nth-child(2){
           width: 60%;
         }
    
    </style>
    

    请注意我们的样式是 th 而不是 td。

    【讨论】:

    • 伟大的小费表 tr th:nth-child(4)
    猜你喜欢
    • 2011-06-27
    • 2018-08-19
    • 2018-01-25
    • 2012-03-26
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多