The table cell height cannot be restricted but a nested element can, as others have answered in this question and the duplicate How to set maximum height for table-cell?
However, the previous answers don't address the inferred question of how the nested element height can be responsive to fill the available space while the table height remains a percentage of the screen.
Per the question description and given code, the table height should be 50% of the viewport, not the parent element. Therefore, the height value should be declared with a viewport length unit, such as 50vh
or 50vb
. (1vh
is 1% of the viewport height. vb
is the logical unit for the viewport block.)
table {
height: 50vb;
}
The nested container #content
should have height: 100%
and overflow: auto
so that it fills all and only the available space in the table cell without visible overflow.
(Edit: I discovered that Firefox won't allow a percentage height with overflow. See next section for calculation.)
#content {
height: 100%;
overflow: auto;
}
However, a percentage cannot be used for the content height if overflow is to be hidden. (Maybe somebody can explain why.) The value can calculate the height of the table minus the height of the other rows (borders and spacing on the table cell should be subtracted as well.)
#content {
height: calc(50vb - 42px);
overflow: hidden;
}
This snippet demonstrates a responsive table for scrollable overflow and hidden overflow.
table {
width: 50%;
height: 50vb;
border-spacing: 0;
}
td {
padding: 0;
border: 1px solid;
}
.headfoot {
height: 20px;
}
#content {
height: 100%;
overflow: auto;
}
table:nth-of-type(2) #content {
height: calc(50vb - 42px);
overflow: hidden;
}
table:nth-of-type(2) {
margin-block-start: 4em;
}
<table>
<tr class="headfoot"><td>header</td></tr>
<tr>
<td>
<div id="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. In arcu cursus euismod quis viverra nibh cras pulvinar mattis. Dignissim sodales ut eu sem integer vitae justo eget magna. Quam vulputate dignissim suspendisse in est ante in nibh mauris. Tortor aliquam nulla facilisi cras. Dolor sit amet consectetur adipiscing elit ut. Sed libero enim sed faucibus turpis in eu. Duis convallis convallis tellus id interdum. Nunc congue nisi vitae suscipit. Integer enim neque volutpat ac tincidunt vitae semper. Metus dictum at tempor commodo ullamcorper. Dictum sit amet justo donec enim diam vulputate ut. Bibendum enim facilisis gravida neque convallis a.</p>
<p>Tristique et egestas quis ipsum suspendisse ultrices gravida dictum. Tristique risus nec feugiat in fermentum. Iaculis at erat pellentesque adipiscing commodo elit. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Consequat interdum varius sit amet mattis vulputate enim nulla aliquet. Mattis molestie a iaculis at erat pellentesque. Massa enim nec dui nunc mattis. Sit amet dictum sit amet justo donec enim diam. Et netus et malesuada fames ac turpis egestas maecenas. Pretium aenean pharetra magna ac. Sit amet nisl purus in mollis. Euismod lacinia at quis risus sed vulputate odio ut enim. Non enim praesent elementum facilisis leo vel fringilla est. Ac ut consequat semper viverra nam. Egestas fringilla phasellus faucibus scelerisque.</p>
<p>Egestas purus viverra accumsan in nisl nisi. Nulla malesuada pellentesque elit eget. Quis auctor elit sed vulputate mi sit. Elit sed vulputate mi sit. Duis at consectetur lorem donec massa. Ipsum dolor sit amet consectetur. Lacus vel facilisis volutpat est velit egestas dui id. Purus in mollis nunc sed id semper risus in. Scelerisque felis imperdiet proin fermentum leo vel orci. Fringilla est ullamcorper eget nulla facilisi etiam dignissim. Pulvinar proin gravida hendrerit lectus a.</p>
</div>
</td>
</tr>
<tr class="headfoot"><td>footer</td></tr>
</table>
<table>
<tr class="headfoot"><td>header</td></tr>
<tr>
<td>
<div id="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. In arcu cursus euismod quis viverra nibh cras pulvinar mattis. Dignissim sodales ut eu sem integer vitae justo eget magna. Quam vulputate dignissim suspendisse in est ante in nibh mauris. Tortor aliquam nulla facilisi cras. Dolor sit amet consectetur adipiscing elit ut. Sed libero enim sed faucibus turpis in eu. Duis convallis convallis tellus id interdum. Nunc congue nisi vitae suscipit. Integer enim neque volutpat ac tincidunt vitae semper. Metus dictum at tempor commodo ullamcorper. Dictum sit amet justo donec enim diam vulputate ut. Bibendum enim facilisis gravida neque convallis a.</p>
<p>Tristique et egestas quis ipsum suspendisse ultrices gravida dictum. Tristique risus nec feugiat in fermentum. Iaculis at erat pellentesque adipiscing commodo elit. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Consequat interdum varius sit amet mattis vulputate enim nulla aliquet. Mattis molestie a iaculis at erat pellentesque. Massa enim nec dui nunc mattis. Sit amet dictum sit amet justo donec enim diam. Et netus et malesuada fames ac turpis egestas maecenas. Pretium aenean pharetra magna ac. Sit amet nisl purus in mollis. Euismod lacinia at quis risus sed vulputate odio ut enim. Non enim praesent elementum facilisis leo vel fringilla est. Ac ut consequat semper viverra nam. Egestas fringilla phasellus faucibus scelerisque.</p>
<p>Egestas purus viverra accumsan in nisl nisi. Nulla malesuada pellentesque elit eget. Quis auctor elit sed vulputate mi sit. Elit sed vulputate mi sit. Duis at consectetur lorem donec massa. Ipsum dolor sit amet consectetur. Lacus vel facilisis volutpat est velit egestas dui id. Purus in mollis nunc sed id semper risus in. Scelerisque felis imperdiet proin fermentum leo vel orci. Fringilla est ullamcorper eget nulla facilisi etiam dignissim. Pulvinar proin gravida hendrerit lectus a.</p>
</div>
</td>
</tr>
<tr class="headfoot"><td>footer</td></tr>
</table>