Break a 5-column table into two parts for mobile devices

Viewed 82

I have a 5-column table that is displayed correctly in a desktop browser.

In a mobile browser, it makes the page too wide, and adds a horizontal scrollbar which I don't want.

Is there a media query CSS rule that could help to split this table into 3 columns / 2 columns stacked vertically instead of 5 columns?

Exemple: on mobile devices, insead of:

A  B  C  D  E
aa bb cc dd ee
ff gg hh ii jj

it should be

A  B  C  
aa bb cc 
ff gg hh 

D  E
dd ee
ii jj

<table>
<tbody>
<tr>
<th scope="col"><strong>A</strong></th>
<th scope="col"><strong>B</strong></th>
<th scope="col"><strong>C</strong></th>
<th scope="col"><strong>D</strong></th>
<th scope="col"><strong>E</strong></th>
</tr>
<tr><td>aa</td><td>bb</td><td>cc</td><td>dd</td><td>ee</td></tr>
<tr><td>ff</td><td>gg</td><td>hh</td><td>ii</td><td>jj</td></tr>
<tr><td>ff</td><td>gg</td><td>hh</td><td>ii</td><td>jj</td></tr>
</tbody>
</table>

2 Answers

Usually when I need to do something like this, or I use a horizontal scroll or I destruct the Table like this example that you can control the size of blocks using flexbox or something that you prefer:

@media only screen and (max-width: 800px) {
    
    /* Force table to not be like tables anymore */
    #no-more-tables table, 
    #no-more-tables thead, 
    #no-more-tables tbody, 
    #no-more-tables th, 
    #no-more-tables td, 
    #no-more-tables tr { 
        display: block; 
    }
 
    /* Hide table headers (but not display: none;, for accessibility) */
    #no-more-tables thead tr { 
        position: absolute;
        top: -9999px;
        left: -9999px;
    }
 
    #no-more-tables tr { border: 1px solid #ccc; }
 
    #no-more-tables td { 
        /* Behave  like a "row" */
        border: none;
        border-bottom: 1px solid #eee; 
        position: relative;
        padding-left: 50%; 
        white-space: normal;
        text-align:left;
    }
 
    #no-more-tables 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;
        text-align:left;
        font-weight: bold;
    }
 
    /*
    Label the data
    */
    #no-more-tables td:before { content: attr(data-title); }
}
            
<section id="no-more-tables">
          <h2>No More Tables</h2>
         
          <table class="table-bordered table-striped table-condensed cf">
              <thead class="cf">
                  <tr>
                      <th>Code</th>
                      <th>Company</th>
                      <th class="numeric">Price</th>
                      <th class="numeric">Change</th>
                      <th class="numeric">Change %</th>
                      <th class="numeric">Open</th>
                      <th class="numeric">High</th>
                      <th class="numeric">Low</th>
                      <th class="numeric">Volume</th>
                  </tr>
              </thead>
                <tbody>
                    <tr>
                        <td data-title="Code">AAC</td>
                        <td data-title="Company">AUSTRALIAN AGRICULTURAL COMPANY LIMITED.</td>
                        <td data-title="Price" class="numeric">$1.38</td>
                        <td data-title="Change" class="numeric">-0.01</td>
                        <td data-title="Change %" class="numeric">-0.36%</td>
                        <td data-title="Open" class="numeric">$1.39</td>
                        <td data-title="High" class="numeric">$1.39</td>
                        <td data-title="Low" class="numeric">$1.38</td>
                        <td data-title="Volume" class="numeric">9,395</td>
                    </tr>
                    <tr>
                        <td data-title="Code">AAD</td>
                        <td data-title="Company">ARDENT LEISURE GROUP</td>
                        <td data-title="Price" class="numeric">$1.15</td>
                        <td data-title="Change" class="numeric">  +0.02</td>
                        <td data-title="Change %" class="numeric">1.32%</td>
                        <td data-title="Open" class="numeric">$1.14</td>
                        <td data-title="High" class="numeric">$1.15</td>
                        <td data-title="Low" class="numeric">$1.13</td>
                        <td data-title="Volume" class="numeric">56,431</td>
                    </tr>
                    <tr>
                        <td data-title="Code">AAX</td>
                        <td data-title="Company">AUSENCO LIMITED</td>
                        <td data-title="Price" class="numeric">$4.00</td>
                        <td data-title="Change" class="numeric">-0.04</td>
                        <td data-title="Change %" class="numeric">-0.99%</td>
                        <td data-title="Open" class="numeric">$4.01</td>
                        <td data-title="High" class="numeric">$4.05</td>
                        <td data-title="Low" class="numeric">$4.00</td>
                        <td data-title="Volume" class="numeric">90,641</td>
                    </tr>
                    <tr>
                        <td data-title="Code">ABC</td>
                        <td data-title="Company">ADELAIDE BRIGHTON LIMITED</td>
                        <td data-title="Price" class="numeric">$3.00</td>
                        <td data-title="Change" class="numeric">  +0.06</td>
                        <td data-title="Change %" class="numeric">2.04%</td>
                        <td data-title="Open" class="numeric">$2.98</td>
                        <td data-title="High" class="numeric">$3.00</td>
                        <td data-title="Low" class="numeric">$2.96</td>
                        <td data-title="Volume" class="numeric">862,518</td>
                    </tr>
                    <tr>
                        <td data-title="Code">ABP</td>
                        <td data-title="Company">ABACUS PROPERTY GROUP</td>
                        <td data-title="Price" class="numeric">$1.91</td>
                        <td data-title="Change" class="numeric">0.00</td>
                        <td data-title="Change %" class="numeric">0.00%</td>
                        <td data-title="Open" class="numeric">$1.92</td>
                        <td data-title="High" class="numeric">$1.93</td>
                        <td data-title="Low" class="numeric">$1.90</td>
                        <td data-title="Volume" class="numeric">595,701</td>
                    </tr>
                    <tr>
                        <td data-title="Code">ABY</td>
                        <td data-title="Company">ADITYA BIRLA MINERALS LIMITED</td>
                        <td data-title="Price" class="numeric">$0.77</td>
                        <td data-title="Change" class="numeric">  +0.02</td>
                        <td data-title="Change %" class="numeric">2.00%</td>
                        <td data-title="Open" class="numeric">$0.76</td>
                        <td data-title="High" class="numeric">$0.77</td>
                        <td data-title="Low" class="numeric">$0.76</td>
                        <td data-title="Volume" class="numeric">54,567</td>
                    </tr>
                    <tr>
                        <td data-title="Code">ACR</td>
                        <td data-title="Company">ACRUX LIMITED</td>
                        <td data-title="Price" class="numeric">$3.71</td>
                        <td data-title="Change" class="numeric">  +0.01</td>
                        <td data-title="Change %" class="numeric">0.14%</td>
                        <td data-title="Open" class="numeric">$3.70</td>
                        <td data-title="High" class="numeric">$3.72</td>
                        <td data-title="Low" class="numeric">$3.68</td>
                        <td data-title="Volume" class="numeric">191,373</td>
                    </tr>
                    <tr>
                        <td data-title="Code">ADU</td>
                        <td data-title="Company">ADAMUS RESOURCES LIMITED</td>
                        <td data-title="Price" class="numeric">$0.72</td>
                        <td data-title="Change" class="numeric">0.00</td>
                        <td data-title="Change %" class="numeric">0.00%</td>
                        <td data-title="Open" class="numeric">$0.73</td>
                        <td data-title="High" class="numeric">$0.74</td>
                        <td data-title="Low" class="numeric">$0.72</td>
                        <td data-title="Volume" class="numeric">8,602,291</td>
                    </tr>
                    <tr>
                        <td data-title="Code">AGG</td>
                        <td data-title="Company">ANGLOGOLD ASHANTI LIMITED</td>
                        <td data-title="Price" class="numeric">$7.81</td>
                        <td data-title="Change" class="numeric">-0.22</td>
                        <td data-title="Change %" class="numeric">-2.74%</td>
                        <td data-title="Open" class="numeric">$7.82</td>
                        <td data-title="High" class="numeric">$7.82</td>
                        <td data-title="Low" class="numeric">$7.81</td>
                        <td data-title="Volume" class="numeric">148</td>
                    </tr>
                    <tr>
                        <td data-title="Code">AGK</td>
                        <td data-title="Company">AGL ENERGY LIMITED</td>
                        <td data-title="Price" class="numeric">$13.82</td>
                        <td data-title="Change" class="numeric">  +0.02</td>
                        <td data-title="Change %" class="numeric">0.14%</td>
                        <td data-title="Open" class="numeric">$13.83</td>
                        <td data-title="High" class="numeric">$13.83</td>
                        <td data-title="Low" class="numeric">$13.67</td>
                        <td data-title="Volume" class="numeric">846,403</td>
                    </tr>
                    <tr>
                        <td data-title="Code">AGO</td>
                        <td data-title="Company">ATLAS IRON LIMITED</td>
                        <td data-title="Price" class="numeric">$3.17</td>
                        <td data-title="Change" class="numeric">-0.02</td>
                        <td data-title="Change %" class="numeric">-0.47%</td>
                        <td data-title="Open" class="numeric">$3.11</td>
                        <td data-title="High" class="numeric">$3.22</td>
                        <td data-title="Low" class="numeric">$3.10</td>
                        <td data-title="Volume" class="numeric">5,416,303</td>
                    </tr>
                </tbody>
          </table>
        
      </section>

You can see some options to solve responsive tables on this link: https://elvery.net/demo/responsive-tables/

I hope it's can help you!

It is possible to use word-break property to avoid beery long sentences

.your-class {
  width: 80px;  
  word-break: break-word;
}

An example:

.your-class {
  width: 80px;
  word-break: break-word;
}
<div class="your-class">It is a very long string</div>

Related