如何让最右边的列填充剩余空间?

Posted

技术标签:

【中文标题】如何让最右边的列填充剩余空间?【英文标题】:How do I get the rightmost column to fill the remaining space? 【发布时间】:2013-04-14 19:16:09 【问题描述】:

假设我有一个只有三个小列的表。将一张又窄又高的桌子贴在屏幕左侧 (example) 看起来很不整洁且不平衡,所以我希望桌子能覆盖页面的宽度。但是,当我将表格宽度设置为 100% 时,所有列也会被拉伸,所以现在我的数据在屏幕上散布得很薄,看起来也很不整齐 (example)。

我正在寻找一种解决方案,其中所有列的大小与表为width: auto 时的大小相同,但最后一列填充了屏幕上的剩余空间。这就是 Spotify 所做的,例如:

无论如何,“用户”列将覆盖剩余的宽度。有没有一种相对简单的方法可以通过 html 表格和 CSS 实现这一点?

【问题讨论】:

【参考方案1】:

如果这是你的意思:

然后我可以使用具有以下 css 的标准 html 表结构来实现:

table 
  width:auto;

td 
  white-space:nowrap;

td:last-child 
  width:100%;

--编辑:work with your jsfiddle

【讨论】:

在我的场景中,最后一列是多行列。在这种情况下,此 css 无法按预期运行。这是示例代码***.com/a/50098150/874366【参考方案2】:

我找到了一个简单的解决方案:

table td:last-child 
    width: 100%;

结果:

body 
    font: 12px "Sans serif";


table 
    width: 100%;

    background-color: #222222;
    color: white;
    border-collapse: collapse;


table th 
    padding: 10px;
    text-align: left;


table td 
    padding: 2px 10px;


table td:last-child 
    width: 100%;


table td:nth-child(odd), table th:nth-child(odd) 
    background-color: rgba(255, 255, 255, 0.05);


table tr:nth-child(even) 
    background-color: rgba(255, 255, 255, 0.05);


table tr:last-child td 
    padding-bottom: 10px;
<table>
    <tr>
        <th>Product</th>
        <th>Cardinality</th>
        <th>Price per item</th>
    </tr>
    <tr>
        <td>Apple</td>
        <td>5</td>
        <td>$2</td>
    </tr>
    <tr>
        <td>Pear</td>
        <td>3</td>
        <td>$3</td>
    </tr>
    <tr>
        <td>Sausage</td>
        <td>10</td>
        <td>$0.5</td>
    </tr>
    <tr>
        <td>Pineapple</td>
        <td>2</td>
        <td>$8</td>
    </tr>
    <tr>
        <td>Tomato</td>
        <td>5</td>
        <td>$1</td>
    </tr>
    <tr>
        <td>Lightsaber</td>
        <td>2</td>
        <td>$99 999</td>
    </tr>
</table>

这在我当前的情况下似乎有效,但在其他情况下看起来可能会导致不必要的副作用。如果我偶然发现,我会编辑这个答案。

可能的副作用

多字表格单元格将被包装成多行以使列尽可能窄。一种解决方案是在表格单元格上使用white-space: nowrap,但这会阻碍包含大量文本的单元格在应换行时进行换行。

【讨论】:

尝试用2个长单词填充一个产品,单词会折叠到下一行,你需要一个空格:nowrap;对每个 td,检查我的答案 感谢空白:nowrap 提示...这就是我要找的! 如果前面的列之一只包含一张图片,那么即使设置了 nowrap,图片也会缩小到很小的尺寸。

以上是关于如何让最右边的列填充剩余空间?的主要内容,如果未能解决你的问题,请参考以下文章

Flex 具有一个固定宽度的列和一个必须填充剩余空间的流体列[重复]

如何使用 View 使布局填充剩余空间?

如何使 flexbox 元素填充剩余空间并滚动?

如何使文本框扩展以填充网格单元的剩余空间?

如何使小部件填充列中的剩余空间

如何获得 ListView GridViewColumn 来填充网格中的剩余空间?