设置表格列宽度常量,而不考虑其单元格中的文本量如何?


535

在我的表格中,我将一列中第一个单元格的宽度设置为100px
但是,如果此列中一个单元格中的文本太长,则该列的宽度大于100px。如何禁用此扩展?



2
在我的情况下,没有发生扩展,而是相反:尽管我显式声明了宽度,但宽度却出现了不必要的缩小。荒谬!
Csaba Toth 2014年

唯一正确的解决方案是使用colgroup并带有cols并设置cols宽度。
MightyPork

table-layout:fixed;是解决方案
emfi

Answers:


607

我玩了一段时间,因为我很难弄清楚。

您需要设置像元宽度(无论是工作th还是td工作,我都将其设置)并将设置table-layoutfixed。出于某种原因,如果设置了表格宽度,单元格的宽度似乎也只能保持固定(我认为这很愚蠢,但是whatev)。

同样,设置overflow属性hidden以防止任何多余的文本从表中流出也很有用。

您还应该确保将CSS的所有边界和大小都保留下来。

好的,这就是我所拥有的:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

它在JSFiddle中

这个人有一个类似的问题:表格单元格的宽度-固定宽度,包裹/截断长单词


77
其重要注意到这一点:“那么浏览器就会根据设置在表的第一行中单元格的宽度列宽”,从stackoverflow.com/questions/570154/...
daniloquio

12
当表格宽度不固定时,它确实起作用。jsfiddle.net/lavinski/CGCFW/3您只需要一个动态行来占用剩余空间。
丹尼尔·

2
@DanielLittle或者,您可以将表格宽度设置为1px;用overflow: visible动态大小的表格,只要细胞的大小是固定的,溢出可见它如果表本身的尺寸比实际的细胞更大或更小并不重要。
曼恩,2015年

如果您的td为“ width = 30%;”,该怎么办?
2015年

请添加溢出内容:隐藏的@ RokoC.Buljan
Alex Grande

177

参见:http : //www.html5-tutorials.org/tables/changing-column-width/

在table标记之后,使用col元素。您不需要结束标记。

例如,如果您有三列:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

25
这个!这是HTML5答案,它非常奏效,而无需我跳过愚蠢的篮球。另外,您可以使用<col class =“ someClassName”>代替,以将宽度保留在CSS中,而不用样式信息污染HTML。
约翰·芒施

2
@Sam您可能还有其他一些问题可以替代此问题,例如CSS,内联样式或不正确的doctype等。这肯定有效,这是设置列样式的标准方法。
Sameer Alibhai 2015年

我不确定这是否就是“ HTML5方式”。看来html5中的colgroup / col实际上仅用于标记范围。MDN没有提到在col标记上使用style属性(除了从全局属性继承它),仅提及bgcolor:“ ...在相关的<td>元素上使用CSS属性...”。developer.mozilla.org/zh-CN/docs/Web/HTML/Element/col
史蒂芬·潘泽

5
以表样式为我工作table-layout: fixed; width: 100%;。谢谢!
nrodic

它不是最终的/确定的,但是w3schools也没有提及col对此的使用。它建议将CSS应用于<td>(或<th>)- w3schools.com/tags/att_td_width.asp
Don Cheadle,2016年

128

只需在<div>内部添加标签<td>或在内部<th>定义宽度<div>。这将为您提供帮助。没有其他办法。

例如。

<td><div style="width: 50px" >...............</div></td>

2
为了安全起见,我将此解决方案与还为相同像素宽度指定了最小宽度/最大宽度相结合。终于可以了。我不知道为什么我必须运行所有这些额外的回合才能使其真正固定,可笑...
Csaba Toth 2014年

1
不确定这比style="width: 50px"<td>
Don Cheadle

2
@mmcrae更好,因为它可以工作,<td>但不能设置width 。
Madbreaks

66

如果您需要一个或多个固定宽度的列,而其他列应重新设置大小,请尝试同时将min-width和设置max-width为相同的值。


table-layout: fixed;没有显式设置宽度时,这对我有用。
乔丹·麦克

天哪!其他解决方案都没有奏效或太笨拙!这很好用!也不需要div!
NeilRoy

29

您需要在相应的CSS中编写此代码

table-layout:fixed;

更好的带有div标签的
sorround

当我将其与列组结合使用时,对我有用:<table style =“ table-layout:fixed”> <colgroup> <col style =“ width:50%”> <col style =“ width:50%”> </ colgroup> <tbody> ... </ tbody> </ table>。
Russ Bateman

克里斯· 科耶
cssyphus 2015年

24

我要做的是:

  1. 设置td宽度:

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. 使用CSS设置td宽度:

    <td style="width:200px; height:50px;">
  3. 再次使用CSS将宽度设置为最大和最小:

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

听起来有点重复,但它给了我想要的结果。为了轻松实现此目的,您可能需要将CSS值放在样式表中的类中:

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

然后:

<td class="td_size">

将class属性放置到任何<td>您想要的位置。


这是似乎在所有情况下都没有施加额外的,可能有害的限制的唯一解决方案。
2015年

3

我用这个

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

不要忘记ntch-child(2)(或3、4等)

表td nth-child(n + 1){...}将覆盖除第一列以外的所有内容
Ed Randall

2

如果您不希望使用固定的布局,请为该列指定一个适当大小的类。

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>


2

当小屏幕小于固定宽度时,使可接受的答案响应小屏幕。

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

的CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

JS小提琴

https://jsfiddle.net/w9s3ebzt/



1

KAsun有一个正确的想法。这是正确的代码...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

根据我在这里的回答,也可以使用表头(可以为空)并为每个表头单元格应用相对宽度。表格主体中所有单元格的宽度将与其列标题的宽度一致。例:

的HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

的CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

查看结果

或者,colgroup按照Hyathin的答案中的建议使用。


0

我在想要设置最小宽度的单元格中使用:: after元素,而不管出现的文本如何,如下所示:

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

我不必在表父上设置宽度,也不必使用表布局。


-4

我发现KAsun的答案使用vw而不是px更好,像这样:

<td><div style="width: 10vw" >...............</div></td>

这是我调整列宽所需的唯一样式


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.