This is a responsive table example created by Geoff Yuen. In this example, he uses display:block and data attributes to style the table and make it responsive. To see how it works, just click on the button Run Pen below:
How to create a responsive table
Step 1: Add Html
<h1>RWD List to Table</h1>
<table class="rwd-table">
<tr>
<th>Movie Title</th>
<th>Genre</th>
<th>Year</th>
<th>Gross</th>
</tr>
<tr>
<td data-th="Movie Title">Star Wars</td>
<td data-th="Genre">Adventure, Sci-fi</td>
<td data-th="Year">1977</td>
<td data-th="Gross">$460,935,665</td>
</tr>
<tr>
<td data-th="Movie Title">Howard The Duck</td>
<td data-th="Genre">"Comedy"</td>
<td data-th="Year">1986</td>
<td data-th="Gross">$16,295,774</td>
</tr>
<tr>
<td data-th="Movie Title">American Graffiti</td>
<td data-th="Genre">Comedy, Drama</td>
<td data-th="Year">1973</td>
<td data-th="Gross">$115,000,000</td>
</tr>
</table>
<p>
← Drag window (in editor or full page view) to see the effect. →
</p>
Step 2: Add CSS
@import 'compass/css3';
// More practical CSS...
// using mobile first method
// (IE8,7 requires respond.js polyfill https://github.com/scottjehl/Respond)
$breakpoint-alpha: 480px; // adjust to your needs
.rwd-table {
margin: 1em 0;
min-width: 300px; // adjust to your needs
tr {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
}
th {
display: none;
// for accessibility, use a visually hidden method here instead!
// Thanks, reddit!
}
td {
display: block;
&:first-child {
padding-top: 0.5em;
}
&:last-child {
padding-bottom: 0.5em;
}
&:before {
content: attr(data-th) ': ';
// who knew you could do this? The internet, that's who.
font-weight: bold;
// optional stuff to make it look nicer
width: 6.5em;
// magic number :( adjust according to your own content
display: inline-block;
// end options
@media (min-width: $breakpoint-alpha) {
display: none;
}
}
}
th,
td {
text-align: left;
@media (min-width: $breakpoint-alpha) {
display: table-cell;
padding: 0.25em 0.5em;
&:first-child {
padding-left: 0;
}
&:last-child {
padding-right: 0;
}
}
}
}
// presentational styling
@import 'https://fonts.googleapis.com/css?family=Montserrat:300,400,700';
body {
padding: 0 2em;
font-family: Montserrat, sans-serif;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
color: #444;
background: #eee;
}
h1 {
font-weight: normal;
letter-spacing: -1px;
color: #34495e;
}
.rwd-table {
background: #34495e;
color: #fff;
border-radius: 0.4em;
overflow: hidden;
tr {
border-color: lighten(#34495e, 10%);
}
th,
td {
margin: 0.5em 1em;
@media (min-width: $breakpoint-alpha) {
padding: 1em !important;
}
}
th,
td:before {
color: #dd5;
}
}
// Responsive table method using display:block and data attributes
// Thanks to @leefroese for suggestion about data attributes