jonathanphz
4/7/2015 - 9:10 PM

Sass mixin for making tables responsive

Sass mixin for making tables responsive

@mixin responsive-table($thead-title...) {

		table { 
		  width: 100%; 
		  border-collapse: collapse; 
		}

		@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 { border: 1px solid #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: 6px;
			left: 6px;
			width: 45%; 
			padding-right: 10px; 
			white-space: nowrap;
		}

		@for $i from 1 through length($thead-title) {
		  td:nth-of-type(#{$i}):before {
		    content: nth($thead-title, $i);
		  } 
		}

	}
}


/*Usage example*/
.table-container {

  /*Write thead titles here*/
	@include responsive-table(
		'Name', 
		'Last Name',
		'Username',
		'Age', 
		'Gender',
	 );
}