在定义单元格宽度方面遇到麻烦(它们以其他宽度渲染)

时间:2013-09-27 19:54:52

标签: html css html-table

我有一个宽度为60%的div和overflow-x设置为滚动。

<div style="width: 60%; overflow-x: scroll">
</div>

在那里,我有一个表格,其中包含1行和该行内的动态单元格数量。

<div style="width: 60%; overflow-x: scroll">

    <table>
        <thead>
            <tr>
                <th style="width: 20px;">
                    <input type="checkbox" />
                </th>
                <th style="width: 300px">Name</th>
                <th style="width: 300px">Email</th>
                @foreach (Group group in groups)
                {
                    <th style="width: 150px">@group.Name</th>
                }
            </tr>
        </thead>
    </table>

</div>

当渲染时,我遇到两个问题

1)表格将宽度调整为div的100%。我想要的是桌子比div宽得多。这就是为什么div具有“overflow-x:scroll”,因此表可以水平滚动。

2)细胞(th)不会以我给他们的宽度呈现

注意:动态创建的th中的“@ group.Name”通常应该小于我给它的150px。

如何解决这两个问题?

3 个答案:

答案 0 :(得分:1)

尝试<th nowrap style="...">强制细胞扩大而不是包裹。

答案 1 :(得分:1)

我可以看到你知道每列的宽度,所以你知道总的表宽度。如果总表宽度为1000px,则添加:

style="width:1000px"

到表标签应该解决问题。我在Chrome中测试了这种方法,效果很好。

答案 2 :(得分:1)

原因是您将宽度设置为所有TDs

当表格由浏览器呈现时,引擎会计算每个TD的宽度以匹配表格宽度。 它会将溢出/缺失像素分配到表格列,挤压或拉伸它们。分布基于列宽(按百分比),较大的列的绝对像素数更大。 如果表中的列没有指定width,则此分布仅包含在它们上,忽略具有显式宽度的列。

当然,如果表是使用width: auto计算的CSS或没有设置宽度的CSS,则列保持其大小和表宽度将是列大小的总和(加上表格边框等)。

您有2种方法可以修复您的表格:

  1. 将表格CSS宽度设置为auto

  2. 至少有一个TD必须没有width - 一个支点列。

  3. 使用其中之一,或两者兼有..