使单元格宽度适合内容


265

给定以下标记,我该如何使用CSS强制一个单元格(列中的所有单元格)适应其中内容的宽度,而不是拉伸(这是默认行为)?

<style type="text/css">
td.block
{
border: 1px solid black;
}
</style>
<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

编辑:我知道我可以对宽度进行硬编码,但是我不愿意这样做,因为该列中的内容是动态的。

看下面的图像,第一张图像是标记生成的图像。第二张图片是我想要的。

在此处输入图片说明


我不明白你的问题。是否要将最后一列限制为特定宽度?
MetalFrog 2012年

8
@diEcho我认为这很清楚。我将添加一两张图片。
曼斯菲尔德

Answers:


449

我不确定是否能理解您的问题,但我会采取行动。JSfiddle的例子

HTML:

<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

CSS:

td{
    border:1px solid #000;
}

tr td:last-child{
    width:1%;
    white-space:nowrap;
}

3
你为什么写<table style="width:100%">而不是写的<table width="100%" >
diEcho 2012年

17
@diEcho我没有写那部分,那是来自示例代码。无论如何,在元素上使用width属性是一种不好的做法。在此快速示例中,内联CSS很好,但是如果这是生产级代码,则应将其抽象到文件中。
MetalFrog 2012年

45
执行此IMO的一种更干净的方法是定义一个名为“ nostretch”(或类似名称)的样式,然后只需在CSS中将nostretch定义为width:1%和nowrap。然后,最后一个TD将具有“ class =“ nostretch block””。这样,您可以“ nostretch”所需的任何单元格。
Tim Holt

3
这是一个很好的解决方案,但可悲的是,在Bootstrap 3中,我的按钮组将由此包装:jsfiddle.net/wexdX/326有什么想法可以抑制它吗?
Martin Braun 2014年

5
这仅在内容比宽度宽1%时才有效-对吗?因为如果含量较小,则宽度:1%,则单元将较大。
亚当


8

对我来说,这是表及其列的最佳自动调整和自动调整大小(仅当您不能使用css!important ...时)

.myclass table {
    table-layout: auto !important;
}

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th {
    width: auto !important;
}

不要为表格或表格列指定CSS宽度。如果表格内容较大,它将超出屏幕尺寸。


3

根据我发现的所有规范,将CSS宽度设置为元素的1%或100%与父元素有关。尽管在撰写本文时,Blink Rendering Engine(Chrome)和Gecko(Firefox)似乎可以很好地处理1%或100%(缩小列或缩小列以填充可用空间),但是并不能根据所有CSS规范进行保证我可以找到正确渲染它的方法。

一种选择是用CSS4 flex div替换表格:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

在新的浏览器(即IE11 +)中有效,请参见本文底部的表格。


1

有很多方法可以做到这一点!

如果我错了,请纠正我,但问题是在寻找这种结果。

<table style="white-space:nowrap;width:100%;">
<tr>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:auto">this should be the content width</td>
</tr>
</table>

前两个字段将“共享”剩余的页面(注意:如果您向50%的字段添加更多文本,将占用更多空间),最后一个字段将始终占据表格的位置。

如果您愿意让文本换行,则可以移动空白:nowrap;。将第3个字段的样式
更改为在该字段中开始新行的唯一方法。

或者,您可以在最后一个字段上设置长度,即。width:150px,并在前2个字段中保留百分比。

希望这可以帮助!


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.