Created
July 18, 2018 13:15
-
-
Save ahhmarr/d48a6ac0e4c1dd7e116b95a76fe9deaa to your computer and use it in GitHub Desktop.
responsive table with accordion
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta http-equiv="X-UA-Compatible" content="ie=edge"> | |
<title>Document</title> | |
<style> | |
/* | |
Max width before this PARTICULAR table gets nasty. This query will take effect for any screen smaller than 760px and also iPads specifically. | |
*/ | |
@media only screen and (max-width: 760px), | |
(min-device-width: 768px) and (max-device-width: 1024px) { | |
/* Force table to not be like tables anymore */ | |
table, | |
thead, | |
tbody, | |
th, | |
td, | |
tr { | |
display: block; | |
} | |
/* Hide table headers (but not display: none;, for accessibility) */ | |
thead tr { | |
position: absolute; | |
top: -9999px; | |
left: -9999px; | |
} | |
tr { | |
margin: 0 0 1rem 0; | |
} | |
tr:nth-child(odd) { | |
background: #ccc; | |
} | |
td { | |
/* Behave like a "row" */ | |
border: none; | |
border-bottom: 1px solid #eee; | |
position: relative; | |
padding-left: 50%; | |
} | |
td:before { | |
/* Now like a table header */ | |
position: absolute; | |
/* Top/left values mimic padding */ | |
top: 0; | |
left: 6px; | |
width: 45%; | |
padding-right: 10px; | |
white-space: nowrap; | |
} | |
/* | |
Label the data | |
You could also use a data-* attribute and content for this. That way "bloats" the HTML, this way means you need to keep HTML and CSS in sync. Lea Verou has a clever way to handle with text-shadow. | |
*/ | |
td:nth-of-type(1):before { | |
content: "First Name"; | |
} | |
td:nth-of-type(2):before { | |
content: "Last Name"; | |
} | |
td:nth-of-type(3):before { | |
content: "Job Title"; | |
} | |
td:nth-of-type(4):before { | |
content: "Favorite Color"; | |
} | |
td:nth-of-type(5):before { | |
content: "Wars of Trek?"; | |
} | |
td:nth-of-type(6):before { | |
content: "Secret Alias"; | |
} | |
td:nth-of-type(7):before { | |
content: "Date of Birth"; | |
} | |
td:nth-of-type(8):before { | |
content: "Dream Vacation City"; | |
} | |
td:nth-of-type(9):before { | |
content: "GPA"; | |
} | |
td:nth-of-type(10):before { | |
content: "Arbitrary Data"; | |
} | |
} | |
@media only screen and (max-width: 760px) { | |
tr td:not(:first-child) { | |
display: none; | |
} | |
td:nth-of-type(1):before { | |
content: " + First Name"; | |
} | |
.plus::before { | |
content: '+ First Name' !important; | |
} | |
.minus::before { | |
content: '- First Name' !important; | |
} | |
} | |
</style> | |
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" | |
crossorigin="anonymous"></script> | |
<script> | |
$(function () { | |
let visible = false | |
$('tr').click(function (e) { | |
var th = $(this); | |
if (visible) { | |
th.find('td:not(:first-child)').hide() | |
th.find('td:first-child').removeClass('minus') | |
th.find('td:first-child').addClass('plus') | |
} | |
else { | |
th.find('td:not(:first-child)').show() | |
th.find('td:first-child').removeClass('plus') | |
th.find('td:first-child').addClass('minus') | |
} | |
visible = !visible; | |
}) | |
}) | |
</script> | |
</head> | |
<body> | |
<table role="table"> | |
<thead role="rowgroup"> | |
<tr role="row"> | |
<th role="columnheader">First Name</th> | |
<th role="columnheader">Last Name</th> | |
<th role="columnheader">Job Title</th> | |
<th role="columnheader">Favorite Color</th> | |
<th role="columnheader">Wars or Trek?</th> | |
<th role="columnheader">Secret Alias</th> | |
<th role="columnheader">Date of Birth</th> | |
<th role="columnheader">Dream Vacation City</th> | |
<th role="columnheader">GPA</th> | |
<th role="columnheader">Arbitrary Data</th> | |
</tr> | |
</thead> | |
<tbody role="rowgroup"> | |
<tr role="row"> | |
<td role="cell"> | |
James | |
</td> | |
<td role="cell">Matman</td> | |
<td role="cell">Chief Sandwich Eater</td> | |
<td role="cell">Lettuce Green</td> | |
<td role="cell">Trek</td> | |
<td role="cell">Digby Green</td> | |
<td role="cell">January 13, 1979</td> | |
<td role="cell">Gotham City</td> | |
<td role="cell">3.1</td> | |
<td role="cell">RBX-12</td> | |
</tr> | |
<tr role="row"> | |
<td role="cell"> | |
The | |
</td> | |
<td role="cell">Tick</td> | |
<td role="cell">Crimefighter Sorta</td> | |
<td role="cell">Blue</td> | |
<td role="cell">Wars</td> | |
<td role="cell">John Smith</td> | |
<td role="cell">July 19, 1968</td> | |
<td role="cell">Athens</td> | |
<td role="cell">N/A</td> | |
<td role="cell">Edlund, Ben (July 1996).</td> | |
</tr> | |
<tr role="row"> | |
<td role="cell"> | |
Jokey | |
</td> | |
<td role="cell">Smurf</td> | |
<td role="cell">Giving Exploding Presents</td> | |
<td role="cell">Smurflow</td> | |
<td role="cell">Smurf</td> | |
<td role="cell">Smurflane Smurfmutt</td> | |
<td role="cell">Smurfuary Smurfteenth, 1945</td> | |
<td role="cell">New Smurf City</td> | |
<td role="cell">4.Smurf</td> | |
<td role="cell">One</td> | |
</tr> | |
<tr role="row"> | |
<td role="cell"> | |
Cindy | |
</td> | |
<td role="cell">Beyler</td> | |
<td role="cell">Sales Representative</td> | |
<td role="cell">Red</td> | |
<td role="cell">Wars</td> | |
<td role="cell">Lori Quivey</td> | |
<td role="cell">July 5, 1956</td> | |
<td role="cell">Paris</td> | |
<td role="cell">3.4</td> | |
<td role="cell">3451</td> | |
</tr> | |
<tr role="row"> | |
<td role="cell"> | |
Captain | |
</td> | |
<td role="cell">Cool</td> | |
<td role="cell">Tree Crusher</td> | |
<td role="cell">Blue</td> | |
<td role="cell">Wars</td> | |
<td role="cell">Steve 42nd</td> | |
<td role="cell">December 13, 1982</td> | |
<td role="cell">Las Vegas</td> | |
<td role="cell">1.9</td> | |
<td role="cell">Under the couch</td> | |
</tr> | |
</tbody> | |
</table> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment