Responsive Table

Making tables responsive

by Subigya Panta

HTML

<table id="miyazaki">
<caption>The Films of Hayao Miyazaki</caption>
<thead>
<tr><th>Film<th>Year<th>Honor
<tbody>
<tr>
<td>My Neighbor Totoro
<td>1988
<td>Blue Ribbon Award (Special)
<tr>
<td>Princess Mononoke
<td>1997
<td>Nebula Award (Best Script)
<tr>
<td>Spirited Away
<td>2001
<td>Academy Award (Best Animated Feature)
<tr>
<td>Howl’s Moving Castle
<td>2004
<td>Hollywood Film Festival (Animation OTY)
</table>

CSS

table#miyazaki {
  margin: 0 auto;
  border-collapse: collapse;
  font-family: Agenda-Light, sans-serif;
  font-weight: 100;
  background: #333;
  color: #fff;
  text-rendering: optimizeLegibility;
  border-radius: 5px;
}

table#miyazaki caption {
  font-size: 2rem;
  color: #444;
  margin: 1rem;
  background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/miyazaki.png), url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/miyazaki2.png);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center left, center right;
}

table#miyazaki thead th {
  font-weight: 600;
}

table#miyazaki thead th,
table#miyazaki tbody td {
  padding: .8rem;
  font-size: 1.4rem;
}

table#miyazaki tbody td {
  padding: .8rem;
  font-size: 1.4rem;
  color: #444;
  background: #eee;
}

table#miyazaki tbody tr:not(:last-child) {
  border-top: 1px solid #ddd;
  border-bottom: 1px solid #ddd;
}

@media screen and (max-width: 600px) {
  table#miyazaki caption {
    background-image: none;
  }
  table#miyazaki thead {
    display: none;
  }
  table#miyazaki tbody td {
    display: block;
    padding: .6rem;
  }
  table#miyazaki tbody tr td:first-child {
    background: #666;
    color: #fff;
  }
  table#miyazaki tbody td:before {
    content: attr(data-th);
    font-weight: bold;
    display: inline-block;
    width: 6rem;
  }
}

JavaScript

var headertext = [],
headers = document.querySelectorAll("#miyazaki th"),
tablerows = document.querySelectorAll("#miyazaki th"),
tablebody = document.querySelector("#miyazaki tbody");

for(var i = 0; i < headers.length; i++) {
  var current = headers[i];
  headertext.push(current.textContent.replace(/\r?\n|\r/,""));
} 
for (var i = 0, row; row = tablebody.rows[i]; i++) {
  for (var j = 0, col; col = row.cells[j]; j++) {
    col.setAttribute("data-th", headertext[j]);
  } 
}