Responsive Table

Auto adjust the table on mobile devices or when screen is thin to show in a nice format


ONE TWO THREE
1 2 3
11 22 33
111 222 333

View


<style>
    .stack-on-sm {
        width: 100%;
    }

    @media (max-width: 640px) {
        .stack-on-sm thead { display: none; }

        .stack-on-sm,
        .stack-on-sm tbody,
        .stack-on-sm tr,
        .stack-on-sm td {
            display: block; width: 100%;
        }

        .stack-on-sm tr { margin: 0 0 0.75rem; }

        .stack-on-sm td {
            position: relative;
            padding-left: 9rem; /* space for the label */
            text-align: left;
        }

        .stack-on-sm td::before {
            content: attr(data-label);
            position: absolute;
            left: 0; top: 0; bottom: 0;
            width: 8.5rem;          /* label column width */
            padding: 0.5rem 0.75rem;
            font-weight: 600;
            display: flex; align-items: center;
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
        }
    }

</style>

<table class="table stack-on-sm">
    <thead>
    <tr>
        <th>
            ONE
        </th>
        <th>
            TWO
        </th>
        <th>
            THREE
        </th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td data-label="ONE">
            1
        </td>
        <td data-label="TWO">
            2
        </td>
        <td data-label="THREE">
            3
        </td>
    </tr>
    <tr>
        <td data-label="ONE">
            11
        </td>
        <td data-label="TWO">
            22
        </td>
        <td data-label="THREE">
            33
        </td>
    </tr>
    <tr>
        <td data-label="ONE">
            111
        </td>
        <td data-label="TWO">
            222
        </td>
        <td data-label="THREE">
            333
        </td>
    </tr>
    </tbody>
</table>