How to use fully responsive Tables in Jekyll using a JustBoil Bulma extension
Published on February 12, 2023 by Marcus Rickert
Jekyll Bulma How-To
2 min READ
CSS libraries such as Bulma or Bootstrap provide excellent support for making tables on web pages more responsive to the available width. However, as a rule there is a “natural” limit to making the table narrower and narrower which is given by the sum width of the longest words of each column. If this still exceeds the width of the device, the only alternative is to convert the table in a stack of cards where each table row is presented by a card as shown in the following example.
This simple table

will automatically be turned into this stack of cards

on mobile devices.
For pages coded in HTML this is achieved in Bulma by using the extension
Responsive Tables, adding wrapper <div> tags to each table and
adding a data-label attribute to each <td> tag as shown the following snippet
<div class="container">
<div class="b-table">
<div class="table-wrapper
has-mobile-cards">
<table class="table">
<thead>
<tr>
<th>head1</th>
<th>head2</th>
</tr>
</thead>
<tbody>
<tr>
<td data-label="head1">
cell1
</td>
<td data-label="head2">
cell2
</td>
</tr>
<tr>
<td data-label="head1">
cell3
</td>
<td data-label="head2">
cell4
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
In case of pages coded in Markdown the issue is a little more complicated. Usually, there is very little influence on how the HTML tags are generated for a table in Markdown syntax. Jekyll uses Kramdown for this purpose which currently does not have support for responsive tables.
In my fork of Kramdown I modified the HTML converter to allow for optional generation of the additional tags.
Clone the repository and build the gem by executing rake dev:gem.
Install the gem by executing gem install kramdown-2.4.0.gem.
In your Jekyll _config.yml file, activate the extension by adding
kramdown:
bulma_responsive_tables: true
at the top level. If everything works, you will find the enhanced HTML files in the output folder unter _site. Verify
that you see the <div></div> wrappers and the data-label attributes.
The following table is coded in Markdown
| head1 | head2
|-------|-------|
| cell1 | cell2
| cell3 | cell4
and should yield the same layout as in the example above, just in this case it’s responsive, so the layout should adapt to the width. Try it out by making your window narrower on your desktop.
| head1 | head2 |
|---|---|
| cell1 | cell2 |
| cell3 | cell4 |
Have fun!