【发布时间】:2017-05-16 05:55:19
【问题描述】:
以下简单的 sn-p 会生成一个占用可用屏幕空间的网页,顶部是页眉,底部是页脚,主要内容占用尽可能多的空间(带点边框以便于查看):
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
body {
display: flex;
flex-flow: column;
}
h1, small {
flex: 0 1 auto;
}
div {
flex: 1 1 auto;
border: 1px dotted;
}
<!doctype html>
<html>
<body>
<h1>Some Header</h1>
<div>Some Text</div>
<small>Some Footer</small>
</body>
</html>
如果我修改 CSS 和 HTML 以使用 table 代替 div,它不会扩展表格以占用可用空间:
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
body {
display: flex;
flex-flow: column;
}
h1, small {
flex: 0 1 auto;
}
table {
flex: 1 1 auto;
border: 1px dotted;
}
<!doctype html>
<html>
<body>
<h1>Some Header</h1>
<table><tr><td>Some Content</td></tr></table>
<small>Some Footer</small>
</body>
</html>
为什么第一个版本(div)可以工作,而第二个版本(table)不行?有没有办法修复第二个示例,使表格扩展并占用所有可用空间(不引入滚动条)?
一些注意事项:我的表格将有一行标题(均等宽)和几行(均等宽/高)。我知道可以使用一堆 divs 和更多 CSS 重新创建一个表格,但是沿着这条路线走下去感觉就像把婴儿和洗澡水一起扔掉(此外,我不会问这个问题并了解是否我只是绕过它)。此外,我在这里无法使用 JavaScript(而且看起来有点矫枉过正)。
我知道的 CSS/HTML 足以让自己陷入困境,但还不足以让自己摆脱困境......
编辑: aavrug 建议将 display: flex 用于 table 使得表格可以正确扩展以填充该区域,但是当我向表格添加多行/列时,它们不会更长的平均分布。我想保留table的单元格均匀分布。
【问题讨论】:
-
因为表格有一个默认样式
display: table;,只需用display: flex;覆盖它就可以了。 -
嗯,这样做会导致我的表格单元格分布不均匀。
-
我想您还必须将表格行设置为
display:flex,因为<td>元素是 flex 父级的子级的子级。 -
@Cornstalks 那是因为您将其覆盖为不呈现为表格。只需在其中放置一个
<div>并在其上使用 flex。 -
@Dodekeract 这又回到了同样的问题 - 你如何让 flex'd div 内的表格成为 div 的 100% 高度?
标签: html css flexbox css-tables