How to Make Responsive Tables and Images?

When a table contains many columns, we need a y-axis scroll bar for users to see all the information in the table. Or, when an image contains a lot of information that we want to display for users to see, we a y-axis scroll bar. The responsive image is often used when we want to use a long math formula.

In both cases, we can create a responsive table or image with a y-axis scroll bar.

Here is how I do it:

  1. Wrap a table or image in a div tag and set its width to 100% and overflow to scroll.
  2. Set the targe table or image to a width that can comfortably display all information.
  3. If doing the above is not working, the y-axis scroll bar does not show up, try add a max-width with the same width with "width", because some website themes or CSS frameworks set max-width to 100% to all images.

Responsive Design

The responsive functionalilty is achieved by seting the width for a table or an image to a fixed size (not a percentage) so that a y-axis scroll bar shows up when a user view the table or  the image with a device of a relatively small screen, while the scroll bar is not present otherwise.

Responsive Table

XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ
12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345
67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890

Responsive Image


Sample code

<div style="overflow: scroll; width: 100%;">
<table style="width: 200%;">
  <tbody><tr>
    <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
  </tr>
  <tr>
    <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
      <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
      <td>12345</td>
    <td>12345</td>
    <td>12345</td>
  </tr>
  <tr>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
  </tr>
</tbody></table>
</div>

<div style="overflow: scroll; width: 100%;">
<img height="66" src="https://blogger.googleusercontent.com/img/a/AVvXsEiRecakAxMGMLGgQIdH8UeNjQbUrCSfpqWi2wdjkcJCNPk07wKdGvxoPR_7mUfi9RjPgr05paoXAjOW2C9l3_9aVBDmpmjCGVdfObFoNsxmEbU-UWWASsD2ONzkdZQ-FXxF-fc4CTJSbsfRaWc3OoVlw2lHt_fRzPibQl0YW_stU5UNIoDIrsSw4_lL=s320" width="150%" />
</div>

Now If you want to maka a table that with bigger screen, there is no scroll, and there is one if sreen sizes are small as being responsive to screen size, you can set the table or image width with pixels not a percentage with min-width CSS property.

Adjust browser or use different devices to see effect.
XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ XXXXX YYYYY ZZZZZ
12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345 12345
67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890 67890

Responsive Image

<div style="overflow: scroll;">
<table style="min-width: 700px;">
  <tbody><tr>
    <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
     <th>XXXXX</th>
    <th>YYYYY</th>
    <th>ZZZZZ</th>
  </tr>
  <tr>
    <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
      <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
     <td>12345</td>
    <td>12345</td>
    <td>12345</td>
      <td>12345</td>
    <td>12345</td>
    <td>12345</td>
  </tr>
  <tr>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
     <td>67890</td>
    <td>67890</td>
    <td>67890</td>
  </tr>
</tbody></table>
</div>

<div style="overflow: scroll;">
  <div style="min-width: 700px;">
	<img src="https://blogger.googleusercontent.com/img/a/AVvXsEiRecakAxMGMLGgQIdH8UeNjQbUrCSfpqWi2wdjkcJCNPk07wKdGvxoPR_7mUfi9RjPgr05paoXAjOW2C9l3_9aVBDmpmjCGVdfObFoNsxmEbU-UWWASsD2ONzkdZQ-FXxF-fc4CTJSbsfRaWc3OoVlw2lHt_fRzPibQl0YW_stU5UNIoDIrsSw4_lL=s320" style="width: 1400px;" />
	</div>
</div>

Comments

Popular posts from this blog

How to Make A Reusable Image Slideshow HTML Component With Vanilla JavaScript

HTML Tags and Inline CSS that Work In Plotly.js Title

How to Type Spaces In HTML Input And Display In the Browser