1
thead{
width: calc(100% - 17px);
display:block;
}

tbody{
display:block;
overflow-y: auto;
height:100px;
}

http://jsfiddle.net/mkgBx/

我可以调整thead的宽度以匹配tbody +滚动条的宽度。但是,在不显示滚动条的情况下,tbody 会进一步向右延伸。有什么办法可以修复 tbody 宽度?

4

4 回答 4

2

我认为您不能将 tbodys 宽度设置为忽略滚动条的存在。加价结构的改变是否可以接受?

CSS

table{
    font: 11px arial;
    width: 245px;
}
th, td{
    border:1px solid #000;
}
div {
    height:90px;
    width: 262px; /*table width + 17px */
    overflow-y: auto;    
}

HTML

<table>
    <thead>
        <tr>
            <th style="width:165px">Name</th>
            <th>Country</th>
        </tr>
    </thead>
</table>
<div>
    <table>
        <tbody>
            <tr>
                <td style="width:165px">Mart Poom</td>
                <td>Estonia</td>
            </tr>
            <tr>
                <td>David Loria</td>
                <td>Kazakhstan</td>
            </tr>
            <tr>
                <td>Wojciech Szczęsny</td>
                <td>Poland</td>
            </tr>
            <tr>
                <td>Gianluigi Buffon</td>
                <td>Italy</td>
            </tr>
            <tr>
                <td>Igor Akinfeev</td>
                <td>Russia</td>
            </tr>
        </tbody>
    </table>
</div>

http://jsfiddle.net/nF2NL/1/

这允许 div 提供滚动并且表格保持设置的宽度。

于 2013-11-04T14:36:24.620 回答
0

我不会为您的表明确声明<tbody>and<thead>标记,因为这是不必要的。解决您的问题的一种方法是使行 ( <tr>) 的<th>s 位置:固定。其他人在这里遇到了类似的问题:How to make a tables header static when scrolling

于 2013-11-04T14:32:11.637 回答
0

您需要使用 JavaScript 来处理这个问题。检查滚动条是否出现并相应地调整 tbody 的宽度。

这是与此相关的 JS 代码,其中 t 是 tbody 元素:

if (t.clientHeight == t.scrollHeight)
{
    t.style.width = "224px";
}

我已经修改了您的JSFiddle以向您展示它如何在您的情况下工作。

于 2013-11-04T14:43:09.470 回答
-2

宽度为 100%,它适应表格,不管它是否有滚动。

thead{
    width: 100%;
    display:block;
}
于 2013-11-04T14:20:04.013 回答