I have a simple 3-part layout (header/sidebar/content) using css grid. Inside my content, I have a table.
I want the table to fill the remaining space in the div.content
and have a tbody
with its own scrollbar.
Every combination of overflow-y: scroll;
and position: relative
with various
widths/heights results in either the div.content
getting the scrollbar, or the <table>
overflowing (see example - also on jsbin).
How can I make this tables <tbody>
receive the scrollbar, and have the table itself bounded by the content div without overflowing?
html, body {
margin: 0;
height: 100%;
}
main {
display: grid;
grid-template-areas: 'header header' 'sidebar content';
grid-template-rows: 100px 1fr;
grid-template-columns: 200px 1fr;
width: 100%;
height: 100%;
}
header {
background-color: #CCC;
grid-area: header;
padding: 20px;
}
aside {
background-color: #EEE;
grid-area: sidebar;
padding: 10px;
}
aside img {
width: 100%;
mix-blend-mode: darken;
}
div.content {
position: relative;
display: flex;
flex-direction: column;
grid-area: content;
min-height: 0;
min-width: 0;
padding: 10px;
max-height: 100%;
border-bottom: 2px solid black;
overflow-y: scroll;
}
table {
margin: 10px;
width: 100%;
}
thead {
text-align: left;
}
tbody {
height: 100%;
overflow-y: scroll;
}
.code {
font: 12px Courier;
color: blue;
}
<main>
<header>
<h2>Really rad app title</h2>
</header>
<aside>
<img src="https://thumb7.shutterstock.com/display_pic_with_logo/436114/423846025/stock-vector-example-stamp-423846025.jpg" />
<span>Some Contextual Informations and other such sidebar-y things<span>
</aside>
<div class="content">
<h3>Some Stuffs</h3>
<div>
Why does this <span class="code"><tbody></span> ignore my <span class="code">overflow-y: scroll;</span>?
<br /><br />
I want <span class="code">div.content</span> to act as a portal/window, with everything around it remaining fixed; but I want the table to stop before the bottom of this window and have a scrollable body (instead of scrolling this text offscreen).
</div>
<table>
<thead><tr><th>One</th><th>Two</th><th>Three</th></tr></thead>
<tbody>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Some content</td><td>Some Content</td><td>Some Content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
<tr><td>Too much content</td><td>Too much content</td><td>Too much content</td></tr>
</tbody>
</table>
</div>
</main>