Bulma’s Column System: A No‑JS, Mobile‑First Grid for Clean Layouts
Bulma’s 12‑column flexbox grid lets you build mobile‑first layouts without JavaScript. Learn how to use modifier classes, customize gutters, and understand trade‑offs in this concise guide.
23 Jul 2025, 01:23 UTC

Problem: Quick, Responsive Layouts Without Extra Code
When building a site that must look good on phones, tablets, and desktops, developers often wrestle with CSS media queries, JavaScript helpers, or heavy frameworks that bundle a lot of unused code. The core need is a lightweight, declarative way to declare column widths that automatically adapt as the viewport changes.
Thesis: Bulma’s 12‑Column Flexbox Grid Solves This With Zero JavaScript
Bulma’s .columns and .column classes form a 12‑column flexbox grid that:
- Stacks automatically on mobile (≤ 768 px) without media queries.
- Lets you fine‑tune widths at each breakpoint using modifiers like
.is-half,.is-one-third, or.is-full. - Supports nested columns, so a sidebar‑content pair can collapse into one column on small screens.
- Is fully customizable via CSS variables, so you can tweak gutters, breakpoints, or even extend the grid beyond 12 columns if needed.
- Leverages native flexbox performance and accessibility, avoiding polyfills or extra JS.
Section 1: Building a Sidebar‑Content Layout
Below is a minimal example that demonstrates a two‑column layout on desktop and a single‑column stack on mobile. The code is ready to drop into an HTML file that loads Bulma from a CDN.
Bulma Sidebar Demo
Sidebar content
Main article content goes here.
**What’s happening?**
.columnscreates a flex container.- Each
.columnis a flex item that grows to fill the available width. - The
.is-full-mobilemodifier forces the column to span 12 columns (full width) when the viewport is below thetabletbreakpoint (768 px). Above that,.is-one-quarter-desktopand.is-three-quarters-desktopset the widths to 3/12 and 9/12 respectively. - Because the grid is flexbox‑based, the columns automatically wrap when the container width is too small, causing the sidebar to stack above the main content on mobile.
Section 2: Customizing the Grid via CSS Variables
Bulma exposes several CSS variables that let you tweak the grid without touching its source files:
| Variable | Default | Typical Use Case |
|---|---|---|
--bulma-grid-gutter | 1.5rem | Reduce spacing for dense UI components. |
--bulma-grid-columns | 12 | Increase columns for fine‑grained layouts (e.g., 16). Requires recompiling Bulma if you go beyond 12. |
--bulma-grid-breakpoints | var(--bulma-breakpoint-mobile), var(--bulma-breakpoint-tablet), var(--bulma-breakpoint-desktop) | Shift when each breakpoint activates. |
To change the gutter, add a style block as shown in the example. The browser will recalc the flexbox properties on load, and you’ll see the layout adjust immediately.
Section 3: Trade‑Offs and Limitations
- 12‑Column Ceiling: Bulma’s core grid caps at 12 columns. If you need more granular splits (e.g., 5‑column layout), you must extend the CSS or adopt a different grid system.
- Default Gutter Size: The 1.5rem gutter is generous for many designs but can feel excessive in compact interfaces. Adjusting
--bulma-grid-gutteris quick, but it affects all columns across the site. - Accessibility of Nested Columns: When nesting
.columnsinside a.column, ensure that the inner flex container does not inadvertently collapse content. Use.is-multilinesparingly to prevent unintended wrapping.
Actionable Checklist
- Include Bulma’s CSS in your project:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css">. - Wrap your layout in a
.columnscontainer. - Assign
.columnclasses with breakpoint modifiers (e.g.,.is-half-desktop is-full-mobile). - Optionally tweak
--bulma-grid-gutterin a
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.