Sticky Headers
No JS, just CSS
by David Kyle
HTML
<div class="content-wrapper">
<div class="wrapper">
<div class="table scroll">
<div class="thead">
<div class="tr">
<div class="th">ID</div>
<div class="th">Name</div>
<div class="th">Birth Date</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John Smith</div>
<div class="td">8/23/76</div>
</div>
<div class="tr">
<div class="td">1</div>
<div class="td">John...
CSS
body {
font-size: small;
font-family: Verdana, Arial, sans-serif;
color: #121212;
background-color: #ffffff;
padding: 0px;
margin: 0px;
display: flex;
align-items: flex-start;
}
.content-wrapper {
z-index: 2;
padding: 0px auto;
max-height: 500px;
}
.wrapper {
margin: 20px auto;
width: 50%;
align-content: center;
background-color: #ffffff;
}
.wrapper .table {
display: table;
border: solid 1px #232323;
border-collapse: collapse;
}
.wrapper .table .thead {
display: table-header-group;
}
.wrapper .thead div.th {
top: 0px;
position: -webkit-sticky;
position: -moz-sticky;
position: -ms-sticky;
position: -o-sticky;
position: sticky;
box-shadow: 1px 1px 0 #000;
z-index: 1;
overflow: auto;
}
.wrapper .thead .th {
background-color: #87b3dd;
border: solid 1px #232323;
display: table-cell;
border-collapse: collapse;
text-align: center;
font-weight: bold;
}
.wrapper .tbody {
display: table-row-group;
z-index: 0;
overflow: scroll;
}
.wrapper .tr {
display: table-row;
}
.wrapper .td {
display: table-cell;
}
.wrapper .thead .th,
.wrapper .tbody .td {
margin: 0px;
padding: 1px 3px;
}
.wrapper .tbody .tr {
background-color: #ffffff;
}
.wrapper .tbody .tr:nth-child(2n-1) {
background-color: #cdcdcd;
}
@media screen and (-ms-high-contrast: active),
(-ms-high-contrast: none) {
/*IE Fixes*/
.scroll .thead .tr:after {
content: '';
overflow-y: scroll;
visibility: hidden;
}
.scroll .thead .th {
flex: 1 auto;
display: block;
}
.scroll .tbody {
display: block;
width: 100%;
overflow-y: auto;
height: auto;
max-height: 200px;
}
.scroll .thead .tr,
.scroll .tbody .tr {
display: flex;
}
.scroll .tbody .tr .td {
flex: 1 auto;
word-wrap: break;
}
}