【问题标题】:Fit cell width to content使单元格宽度适合内容
【发布时间】:2012-07-01 07:14:53
【问题描述】:

鉴于以下标记,我如何使用 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>

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

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

【问题讨论】:

  • 我不明白你的问题。是否要将最后一列限制为特定宽度?
  • @diEcho 我认为这很清楚。我会添加一两张图片。

标签: html css html-table


【解决方案1】:

我不确定我是否理解你的问题,但我会试一试:

td {
    border: 1px solid #000;
}

tr td:last-child {
    width: 1%;
    white-space: nowrap;
}
<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>

【讨论】:

  • 为什么写&lt;table style="width:100%"&gt;而不是&lt;table width="100%" &gt;
  • @diEcho 我没有写那部分,那是来自示例代码。无论如何,在元素上使用 width 属性是不好的做法。在这个快速示例中,内联 CSS 很好,但如果这是生产级代码,则应将其抽象为一个文件。
  • IMO 更简洁的方法是定义一种名为“nostretch”(或类似名称)的样式,然后在 CSS 中定义 nostretch 以使其具有宽度:1% 和 nowrap。那么最后一个 TD 将具有 'class="nostretch block"'。这样你就可以“nostretch”任何你想要的单元格。
  • 这是一个很好的解决方案,但遗憾的是,在 Bootstrap 3 中,我的按钮组将从以下位置换行:jsfiddle.net/wexdX/326 有什么办法可以抑制它吗?
  • 这仅在内容宽于 width:1% 时才有效 - 对吧?因为如果内容小于 width:1%,则单元格会更大。
【解决方案2】:

设置

max-width:100%;
white-space:nowrap;

会解决你的问题。

【讨论】:

  • 这应该应用于什么元素?
  • 试试 ,
  • 对我不起作用...
【解决方案3】:

对我来说,这是表格及其列的最佳自动调整和自动调整大小(使用 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 宽度。 如果表格内容较大,它将超出屏幕尺寸。

【讨论】:

    【解决方案4】:

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

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

    <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>
    

    前 2 个字段将“共享”剩余页面(注意:如果您向任一 50% 的字段添加更多文本,则将占用更多空间),最后一个字段将持续主导表格。

    如果您愿意让文本换行,您可以移动 white-space:nowrap;到第三个字段的样式
    将是在该字段中开始新行的唯一方法。

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

    希望这会有所帮助!

    【讨论】:

      【解决方案5】:

      根据我能找到的所有规范,将 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+,请参阅文章底部的表格。

      【讨论】:

        【解决方案6】:

        简单:

            <div style='overflow-x:scroll;overflow-y:scroll;width:100%;height:100%'>
        

        【讨论】:

        • 根本看不出这个答案与这个 8 岁的问题有什么关系。我是&lt;div&gt;,问题是关于桌子的。而且您的回答不会使列单元格的宽度缩小到其内容。
        猜你喜欢
        相关资源
        最近更新 更多
        热门标签