Building Responsive Layouts with the Bulma Flexbox Grid
Learn how to implement responsive layouts using Bulma's 12-column Flexbox grid, including breakpoint modifiers, gutter control, and nesting strategies.
10 Apr 2026, 21:30 UTC

The Challenge of Fluid Layouts
Creating a layout that remains usable across mobile, tablet, and desktop viewports often leads to bloated CSS files and complex media queries. The primary goal is to ensure that content stacks vertically on small screens but distributes horizontally on larger displays without manually calculating percentage widths for every element.
The takeaway is that Bulma uses a 12-column Flexbox system. By combining the .columns container with specific .column modifiers, you can control exactly when a layout shifts from a stack to a grid based on predefined breakpoints.
Prerequisites
- Bulma CSS framework (Version 1.0+ recommended for consistent CSS custom property behavior).
- A basic HTML5 document structure.
- A browser with Developer Tools for viewport emulation.
Implementing the Grid Structure
The Bulma grid relies on a parent-child relationship. The .columns class creates the flex container, and the .column class defines the individual items. By default, .column elements share the available space equally.
1. Basic Equal-Width Columns
To create a simple row where items split the space evenly, wrap .column elements inside a .columns div.
<div class="columns">
<div class="column">Content A</div>
<div class="column">Content B</div>
<div class="column">Content C</div>
</div>
2. Controlling Widths with Breakpoints
Bulma uses a mobile-first approach. To specify how many columns an element should occupy at different screen sizes, use modifiers like is-half, is-one-third, or is-one-quarter combined with breakpoint prefixes (e.g., is-desktop, is-tablet).
Example: A Sidebar Layout
In this scenario, we want a main content area and a sidebar. On mobile, they should stack. On desktop, the main content should take up 8/12 of the width and the sidebar 4/12.
<div class="columns">
<div class="column is-eight-columns-desktop">
<h3>Main Content</h3>
<p>This area expands on larger screens.</p>
</div>
<div class="column is-four-columns-desktop">
<h3>Sidebar</h3>
<p>This stays narrow on desktop.</p>
</div>
</div>
Managing Spacing and Nesting
Gutter Control: By default, Bulma provides horizontal spacing between columns. If you need vertical spacing when columns wrap to a new line, add the is-variable class to the .columns container. You can further refine this with is-0 (no gap) or is-1 through is-8 to adjust the gap size.
Nested Grids: To create complex layouts, place a new .columns container inside an existing .column. This allows you to create a sub-grid that operates independently of the outer layout while still adhering to the 12-column logic.
Verification and Diagnostics
To ensure the grid is behaving as expected, perform the following checks:
- Viewport Test: Open your page in a browser, open Developer Tools (F12), and toggle the Device Toolbar. Switch between "iPhone SE" and "Desktop" views. The columns should snap from vertical stacking to horizontal distribution at the breakpoint threshold.
- CSS Inspection: Inspect a
.columnelement. On mobile, you should seeflex-basis: 0%andflex-grow: 1. On desktop, theflex-basisshould change to a percentage (e.g., 66.66% foris-eight-columns). - Gutter Check: Inspect the
.columnscontainer to verify thegapormarginproperties are applied when usingis-variable.
Limitations and Considerations
- Container Constraints: The grid system works best when placed inside a
.containerclass to prevent the layout from stretching to the extreme edges of ultra-wide monitors. - Flexbox Order: While Bulma handles width, it does not natively provide a simple class for reordering columns (e.g., moving the sidebar to the left on mobile) without custom CSS
orderproperties.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.