Managing Responsive Layouts with the Bulma Flexbox Grid
Learn how to use Bulma's 12-column Flexbox grid to create responsive layouts that automatically adapt from mobile stacks to desktop grids without complex CSS math.
10 Nov 2025, 06:29 UTC

The Struggle with Fluid Column Widths
A common frustration when building responsive dashboards or landing pages is the "shifting column" problem. You want three columns to sit side-by-side on a desktop, but as soon as one column contains a slightly longer string of text or a larger image, the columns lose their symmetry or break the layout entirely. Traditional float-based systems often required rigid width percentages and clear-fixes to prevent this.
The takeaway is that Bulma solves this by using a 12-column Flexbox grid. Instead of calculating pixels, you define the proportion of the container a column should occupy, allowing the browser to handle the math while maintaining alignment across different screen sizes.
Understanding the Column Architecture
Bulma's grid relies on a parent-child relationship. The .columns class acts as the flex container (the wrapper), and the .column class identifies the flex items (the children).
By default, if you place three .column divs inside a .columns container without any additional modifiers, Bulma distributes the space equally. Each column will automatically take up 33.33% of the width. This "automatic sizing" is useful for simple layouts but becomes problematic when you need specific ratios, such as a narrow sidebar and a wide main content area.
Handling Overflow with Multiline Layouts
By default, a .columns container tries to fit all its children on a single line. If you define columns that exceed the 12-unit total (for example, three columns each marked as is-half), the columns will shrink to fit the line, which often breaks the design.
To fix this, you must add the is-multiline modifier to the parent container. This tells the flex wrapper to allow children to wrap to the next line once the 100% width threshold is reached, effectively turning your grid into a flexible gallery or a multi-row form.
Implementation Example: A Responsive Feature Grid
In this scenario, we want a layout that shows a primary feature (two-thirds width) and a secondary detail (one-third width) on desktop, but stacks them vertically on mobile devices.
<!-- Run this in any HTML file linked to the Bulma CSS CDN -->
<div class="columns is-multiline is-vcentered">
<div class="column is-two-thirds">
<div class="box">
<h3 class="title">Primary Feature</h3>
<p>This column takes up 8 of the 12 available grid units on desktop.</p>
</div>
</div>
<div class="column is-one-third">
<div class="box">
<h3 class="title">Secondary Detail</h3>
<p>This column takes up 4 of the 12 units.</p>
</div>
</div>
</div>
Diagnostic Checklist
- Verify Flex Properties: Open Browser Developer Tools (F12) and inspect the
.columnselement. Ensuredisplay: flexis active. - Check Breakpoints: Resize the window. Bulma columns are mobile-first; they should stack vertically by default and only snap into the
is-two-thirds/is-one-thirdratio once the viewport hits the tablet breakpoint. - Vertical Alignment: The
is-vcenteredclass on the parent ensures that if the "Secondary Detail" box is shorter than the "Primary Feature" box, it remains centered vertically rather than stretching or sticking to the top.
Trade-offs and Limitations
While the Flexbox grid is intuitive, it has a significant limitation: Bulma is CSS-only. Unlike frameworks like Bootstrap, Bulma does not provide JavaScript for interactive grid components. If you need a column to collapse or expand based on a user click, you must write your own JavaScript to toggle the Bulma classes.
Additionally, relying solely on automatic column sizing (omitting is-half, etc.) can lead to "jagged" layouts if the content inside the columns varies wildly in length. For professional production environments, explicitly defining column widths using the 12-unit system is the only way to ensure visual consistency.
Practical Verification
To confirm your grid is behaving correctly, apply the is-half class to two columns. If they appear side-by-side on your monitor but stack vertically when you shrink the browser window to a mobile width (typically under 768px), the responsive modifiers are functioning. If they stay side-by-side on mobile, check that you haven't accidentally applied a is-mobile modifier, which forces the horizontal layout regardless of screen size.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.