JSFiddle - React, Tailwind, and code Playground
CSS Only Responsive Table
by Jennifer Perrin
HTML
<div class="table-caption">Leads</div>
<table id="table">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Phone Number</th>
<th>Hot Lead?</th>
<th>Okay to Call?</th>
<th>Actions</th>
<th><input type="checkbox" /></th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="First Name">Erik</td>
<td data-label="Last Name">Wiedeman</td>
<td data-label="Email">[email protected]</td>
<td data-label="Phone Number">555-555-5555</td>
<td data-label="Hot Lead?"> <span class="yes">Yes</span> </td>
<td data-label="Call?"> <span class="no">No</span> </td>
<td class="actions"><a href="#">Edit</a> | <a href="#">Delete</a></td>
<td class="checkbox"><input type="checkbox" /></td>
</tr>
<tr>
<td data-label="First Name">Rik</td>
<td data-label="Last Name">Iedeman</td>
<td data-label="Email">[email protected]</td>
<td data-label="Phone Number">555-555-5555</td>
<td data-label="Hot Lead?"> <span class="yes">Yes</span> </td>
<td data-label="Call?"> <span class="no">No</span> </td>
<td class="actions"><a href="#">Edit</a> | <a href="#">Delete</a></td>
<td class="checkbox"><input type="checkbox" /></td>
</tr>
<tr>
<td data-label="First Name">Ik</td>
<td data-label="Last Name">Edeman</td>
<td data-label="Email">[email protected]</td>
<td data-label="Phone Number">555-555-5555</td>
<td data-label="Hot Lead?"> <span class="yes">Yes</span> </td>
<td data-label="Call?"> <span class="no">No</span> </td>
<td class="actions"><a href="#">Edit</a> | <a href="#">Delete</a></td>
<td class="checkbox"><input type="checkbox" /></td>
</tr>
<tr>
<td data-label="First Name">K</td>
<td data-label="Last Name">Deman</td>
<td data-label="Email">[email protected]</td>
<td data-label="Phone Number">555-555-5555</td>
<td data-label="Hot Lead?"> <span class="yes">Yes</span> </td>
<td data-label="Call?"> <span class="no">No</span>...
CSS
/* REMs */
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
html {
color: #333333;
font-size: 62.5%;
}
body {
font: normal 16px Tahoma, Geneva, Helvetica, sans-serif;
margin: 0 auto;
padding: 0;
}
@media only all and (min-width: 760px) {
body {
padding: 20px;
padding: 2rem;
}
}
table {
display: block;
margin: 0;
border: none;
background: #FFF;
font-size: 14px;
font-size: 1.4rem;
}
@media only all and (min-width: 760px) {
table {
display: table;
width: 100%;
border: 1px solid #e5e5e5;
border-top: none;
}
}
tbody {
display: block;
}
@media only all and (min-width: 760px) {
tbody {
display: table-row-group;
}
}
.table-caption {
display: block;
width: 100%;
background: #39A7E7;
color: #FFF;
font-size: 20px;
font-size: 2rem;
text-shadow: 0 1px 0 black, 0 1px 0 black;
text-align: center;
height: 44px;
line-height: 44px;
border: none;
border-bottom: 2px solid #999;
}
@media only all and (min-width: 760px) {
.table-caption {
border: 1px solid #e5e5e5;
border-top: none;
border-bottom: none;
height: 55px;
line-height: 55px;
}
}
tr {
position: relative;
display: block;
border-bottom: 1px solid #ccc;
padding: 8px;
padding: 0.8rem;
}
tr:nth-child(even) {
background: #f5f5f5;
}
@media only all and (min-width: 760px) {
tr {
display: table-row;
}
}
thead tr {
display: none;
}
@media only all and (min-width: 760px) {
thead {
background: #212121;
color: #FFF;
}
thead tr {
display: table-row;
}
thead tr th {
font-weight: normal;
font-size: 15px;
font-size: 1.5rem;
}
}
td {
display: block;
border: none;
position: relative;
text-align: left;
}
td.actions {
position: absolute;
top: 4px;
right: 24px;
}
td.checkbox {
position: absolute;
top: 4px;
right: 4px;
}
@media only all and (min-width: 760px) {
td, th {
display: table-cell;
...