带有表格布局的表格:固定;以及如何使一列更宽
Posted
技术标签:
【中文标题】带有表格布局的表格:固定;以及如何使一列更宽【英文标题】: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
宽。
【问题讨论】:
【参考方案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列,太窄了。 明白了。您可以通过将内容放在跨越四个th
s 的td
中来解决此问题,如下所示:<div style="width:80px;">Richard Knop</div>
将width
设置为所有单个td
s 的总和。见这里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
不起作用,如果有可用的表格标题:<table><caption>...</caption><tbody>....</tbody></table>
只需使用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)以上是关于带有表格布局的表格:固定;以及如何使一列更宽的主要内容,如果未能解决你的问题,请参考以下文章