由于我的声望不够高,无法发布评论,因此我想提供一个完整的跨浏览器解决方案,结合了@Madeorsk和@Saadat的方法,稍加修改!(截至2020年2月10日,在Chrome、Firefox、Safari、IE和Edge上进行了测试)
table { height: 1px; }
tr { height: 100%; }
td { height: 100%; }
td > div {
height: -webkit-calc(100vh);
height: -moz-calc(100vh);
height: calc(100%);
width: 100%;
background: pink; // This will show that it works!
}
然而,如果你和我一样,想要控制垂直对齐方式,那么我建议使用flexbox:
td > div {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
}
好的,没有人提到这个,所以我想我会发布这个技巧:
.tablecell {
display:table-cell;
}
.tablecell div {
width:100%;
height:100%;
overflow:auto;
}
<td>
<div>
<!-- some optional content filled by vuejs, angular or what you want -->
</div>
</td>
来破解布局。 - Jake我经常遇到类似的问题,总是在 table
元素上使用 table-layout: fixed;
,在内部 div 上使用 height: 100%;
。
padding: 0;
在其父元素中,
最终我发现除了使用jQuery之外,没有任何东西可以在所有浏览器和所有DocTypes / 浏览器渲染模式下工作。所以这就是我想出来的方法。
它甚至考虑了rowspan。
function InitDivHeights() {
var spacing = 10; // <-- Tune this value to match your tr/td spacing and padding.
var rows = $('#MyTable tr');
var heights = [];
for (var i = 0; i < rows.length; i++)
heights[i] = $(rows[i]).height();
for (var i = 0; i < rows.length; i++) {
var row = $(rows[i]);
var cells = $('td', row);
for (var j = 0; j < cells.length; j++) {
var cell = $(cells[j]);
var rowspan = cell.attr('rowspan') || 1;
var newHeight = 0;
for (var k = 0; (k < rowspan && i + k < heights.length); k++)
newHeight += heights[i + k];
$('div', cell).height(newHeight - spacing);
}
}
}
$(document).ready(InitDivHeights);
在IE11(Edge模式),FF42和Chrome44+中进行了测试。未测试嵌套表格。
.block {
height: -webkit-calc(100vh);
height: -moz-calc(100vh);
height: calc(100vh);
width: 100%;
}
你可以这样做:
<td>
<div style="width: 100%; position: relative; float: left;">inner div</div>
</td>
<td style="padding: 0; position: relative;">
<div style="width: 100%; height: 100%; position: absolute; overflow: auto;">
AaaaaaaaaaaaaaaaaaBBBBBBBbbbbbbbCCCCCCCCCccccc<br>
DDDDDDDddddEEEEEEEEdddfffffffffgggggggggggggggggggg
</div>
</td>