How to create Responsive Data Tables

Hi friends, here I tell you how to create Responsive Data Tables. Most of the people face problems with the table when they use table data on their webpage at mobile views.

Mostly data table are not shown as responsive according to the device. Here we add some CSS and modified HTML code to solve this problem.

The small-screen responsive stuff comes in currently. We’ve already puzzled out our minimum table breadth is regarding 760px thus we’ll start our media question to require result once the narrower than that. Also, we’ll target iPads as they’re right therein zone.

The biggest modification is that we tend to ar attending to force the table to not behave sort of a table by setting each table-related part to be block-level. Then by keeping the equid marking, we tend to originally additional, it’s quite like every table row becomes a table in itself, however solely as wide because of the screen. No a lot of horizontal scrolling! Then for every “cell”, we’ll use CSS generated content (: before) to use the label, thus we all know what every little bit of knowledge means that.

And so, desktops get the regular table expertise, mobile (or otherwise little screens) get a reformatted and easier to explore table:

HTML Code:

        <th>First Name</th>
        <th>Last Name</th>
        <th>Job Title</th>
        <td>Chief Sandwich Eater</td>
        <td>Crimefighter Sorta</td>

CSS Code:


Generic Styling, for Desktops/Laptops 
table { 
  width: 100%; 
  border-collapse: collapse; 
/* Zebra striping */
tr:nth-of-type(odd) { 
  background: #eee; 
th { 
  background: #333; 
  color: white; 
  font-weight: bold; 
td, th { 
  padding: 6px; 
  border: 1px solid #ccc; 
  text-align: left; 

Max width before this PARTICULAR table gets nasty
This query will take effect for any screen smaller than 760px
and also iPads specifically.
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;
    Label the data
    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: "Porn Name"; }
    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"; }



Leave a Reply