我有需要显示宽表的网站。上面是标题,应该与整页一样宽(在这种情况下,与表格一样宽)。然而,它只有视口(屏幕大小)宽,因此在显示时它看起来没问题,但是一旦用户滚动到侧面,他就会看到标题没有它应该的那么宽。如何在没有硬编码值的情况下将此标题拉伸到整页宽度?
简单示例:
HTML:
<div></div>
<table>
<tr>
<td>V</td>
<td>e</td>
<td>r</td>
<td>y</td>
<td></td>
<td>w</td>
<td>i</td>
<td>d</td>
<td>e</td>
<td></td>
<td>t</td>
<td>a</td>
<td>b</td>
<td>l</td>
<td>e</td>
</tr>
</table>
CSS:
div {background-color: red;height:20px;width:100%;}
td {width: 100px;min-width:100px;}
Jsfiddle:http://jsfiddle.net/JXG5c/3/
答案 0 :(得分:8)
修复实际上非常简单;将表格和标题包装在inline-block
div
中。这样,包装div
占用了所需的空间,而不仅仅是视口的空间。然后,您可以为孩子div
使用100%宽度,这是您的标题。所以,你的新标记应该是这样的:
<div id="parent">
<div id="child"></div>
<table>
<tr><td>V</td><td>e</td><td>r</td><td>y</td><td></td><td>l</td><td>o</td> <td>n</td <td>g</td><td></td><td>t</td><td>a</td><td>b</td><td>l</td><td>e</td></tr>
</table>
</div>
你的新CSS应该是这样的:
td {width: 100px;min-width:100px;}
#parent {display:inline-block;}
#child {background-color: red;height:20px;width:100%;}
所以真正需要做的就是父必须包装标题和表格,你需要将它设置为inline-block
,而Voila,你有一个完整大小的标题。此外,请注意标题将不会“固定”,它将滚动页面,如果我正确解释您的问题,
是你想要发生的事情。
这是你的小提琴:http://jsfiddle.net/JXG5c/24/
更新:为什么这适用于inline-block
但不适用block
?
Block
会自动占用父级的所有空间。标题的父级是视口/正文,它自动为屏幕大小的100%。
然而,使用inline-block
会使div占用尽可能多的空间。把它想象成<span>
元素;它占用了必要的空间,不多也不少。但是,div
与inline
的效果不佳,因此W3C的用户inline-block
会将inline
行为授予任何block
元素。通过使用内联块,父div自动适合子项的大小,即子表和标题。因此,标题的父级与表的大小相同,并且通过将标题设置为父级的宽度的100%,问题得以解决。 :)
答案 1 :(得分:4)
你有没有想过只是将标题定位?
<强> JSFiddle 强>
body {
padding-top: 20px;
}
div {
background-color: red;
height:20px;
width: 100%;
position: fixed;
top: 0;
}
td {
width: 100px;
min-width:100px;
}
<强>更新强> 如果您想保留标题的垂直滚动,请使用此jQuery代码段:
$(window).scroll(function(){
$('div').css('top',-$(window).scrollTop());
});
<强>更新强>
这是另一个,甚至更简单的方法,但我可以想象上面对你更好,至少如果你不能编辑表的输出。
答案 2 :(得分:0)
试试这个我觉得它应该有效http://jsfiddle.net/JXG5c/15/
body {padding-top: 20px;}
div {background-color: red;height:20px;width: 100%;position: fixed;top: 0;}
td {width: 100px; min-width:100px;}