固定表格单元格宽度

Jim*_*mbo 165 html css layout html-table

很多人仍然使用表格来布局控件,数据等.这个例子就是流行的jqGrid.但是,有一些神奇的事情我似乎无法理解(它的桌子大声喊叫,可能有多少魔法?)

如何设置表的列宽并让它像jqGrid一样服从!?如果我试图复制它,即使我设置了每个<td style='width: 20px'>,一旦其中一个单元格的内容大于20px,单元格就会扩展!

任何想法或见解?

hun*_*ter 244

你可以尝试使用的<col>标签管理表造型的所有行,但你将需要设置table-layout:fixed的样式<table>或表CSS类设置overflow样式为单元

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

这就是你的CSS

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }
Run Code Online (Sandbox Code Playgroud)

  • col不能在html5中工作,设置单个td的宽度而不是内联css或css类 (14认同)
  • 除非您明确为所需表格应用宽度,否则接受的答案不起作用.无论您使用单位还是百分比,都能完美运作.想想我会指出这一点,因为@ totymedli的答案没有得到任何投票,我不希望用户忽略它.然而,除非你的目标是什么,否则没有必要使用断言建议. (10认同)

tot*_*dli 92

现在在HTML5/CSS3中我们有更好的解决方案.在我看来,这个纯粹的CSS解决方案是推荐的:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
Run Code Online (Sandbox Code Playgroud)
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

width即使在haunter的解决方案中,您也需要设置表格.否则它不起作用.
另外一个vsync建议的新CSS3功能是:word-break:break-all;.这会将没有空格的单词分成多行.只需像这样修改代码:

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}
Run Code Online (Sandbox Code Playgroud)

最后结果

呈现表格


ajr*_*eal 13

table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}
Run Code Online (Sandbox Code Playgroud)

  • 你确定你可以在td元素上使用`table-layout`吗? (9认同)

Tar*_*rik 10

我有一个长桌td单元格,这迫使桌子到浏览器的边缘,看起来很难看.我只是希望该列只是固定大小,并在达到指定宽度时打破单词.所以这对我很有用:

<td><div style='width: 150px;'>Text to break here</div></td>
Run Code Online (Sandbox Code Playgroud)

您不需要为table,tr元素指定任何类型的样式.你也可以使用overflow:hidden; 正如其他答案所暗示的那样,它会导致多余的文本消失.

  • 或者您可以在需要时使用max-width而不是width.这样,除非达到宽度限制,否则不会破坏文本.如果文本小于指定的宽度,表格单元格将没有空格.<td> <div style ='max-width:150px;'>要在此处打破的文字</ div> </ td> (2认同)

Ram*_*nov 6

对于全屏宽度表:

  • 表格宽度必须为 100%

  • 如果需要 N 列,则 TH 必须为 N+1

3 列的示例:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
table.fixed td {
      overflow: hidden;
    }
Run Code Online (Sandbox Code Playgroud)
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>
Run Code Online (Sandbox Code Playgroud)