Reputation: 24768
Similar questions has been posted, but this is a new take on the problem.
What I know so far
My problem is the context
Question
https://jsfiddle.net/jw147aqk/1/
You need to resize the window to make the table overflow.
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
.wrap {
background: #eee;
height: 100%;
display: grid;
grid-template-rows: 50px 1fr 50px;
grid-template-areas: "header" "main" "footer";
}
header {
grid-area: header;
background: green;
color: #fff;
}
main {
overflow-y: auto;
}
footer {
grid-area: footer;
background: #ba0000;
color: #fff;
}
table {
width: calc(100% - 3px);
border-collapse: collapse;
}
table th {
background: #000;
color: #fff;
height: 50px;
position: sticky;
}
table td {
background: #fff;
height: 50px;
border: 1px solid #ccc;
}
<div class="wrap">
<header>My header</header>
<main>
<table>
<thead>
<tr>
<th>Head first</th>
<th>Head second</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
</tbody>
</table>
</main>
<footer>Footer</footer>
</div>
Upvotes: 0
Views: 192
Reputation: 681
Give class name to the <th>
that you want to make sticky and use Position:sticky
to that class as shown below:
.stickyThis{
position: -webkit-sticky;
position: sticky;
top: 0;
}
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
.wrap {
background: #eee;
height: 100%;
display: grid;
grid-template-rows: 50px 1fr 50px;
grid-template-areas: "header" "main" "footer";
}
header {
grid-area: header;
background: green;
color: #fff;
}
main {
overflow-y: auto;
}
footer {
grid-area: footer;
background: #ba0000;
color: #fff;
}
table {
width: calc(100% - 3px);
border-collapse: collapse;
}
table th {
background: #000;
color: #fff;
height: 50px;
position: sticky;
}
table td {
background: #fff;
height: 50px;
border: 1px solid #ccc;
}
<div class="wrap">
<header>My header</header>
<main>
<table>
<thead>
<tr>
<th class="stickyThis">Head first</th>
<th class="stickyThis">Head second</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
<tr>
<td>Cell first</td>
<td>Cell second</td>
</tr>
</tbody>
</table>
</main>
<footer>Footer</footer>
</div>
Upvotes: 1
Reputation: 1642
add top: 0;
to the table th
table th {
background: #000;
color: #fff;
height: 50px;
position: sticky;
top: 0;
}
Upvotes: 2