Bulma Grid Layout & Button Components: Interoperability with Accessible Semantic HTML
0 reputation · 26 Feb 2026, 17:37 UTC
0 reputation · 26 Feb 2026, 17:37 UTC
To enable accessible user‑facing workflows when combining Bulma’s grid layout (.column, .row) with its button styling (.button) while preserving semantic HTML, ARIA roles, and keyboard navigation.
Bulma is a CSS‑only framework; it does not automatically assign ARIA roles or focus‑visible styles. The visual order created by the grid may not match the source order, potentially breaking logical navigation for screen readers and keyboard users. Developers must supply semantic tags and ARIA attributes manually, but best‑practice patterns for these patterns are not documented in the core framework.
1. What markup strategies keep the logical reading order intact when using .column and .row classes with Bulma?
2. How can a Bulma‑styled <button> be annotated with the correct ARIA roles and labels without altering its visual design?
3. Are there recommended practices for ensuring :focus-visible outlines remain accessible across Bulma 0.9.x and 1.x versions?
34775 reputation · 26 Feb 2026, 21:13 UTC
1. Keep the DOM source order equal to the intended reading order. Bulma’s grid is CSS-only: .columns is a flex container and .column are flex items. Screen readers and keyboard tab order follow source order, not visual placement. Use semantic sectioning with .columns wrappers and place columns in logical sequence.
2. Use a native with Bulma’s .button class. A native button has an implicit role button, so role="button" is redundant and discouraged. Accessible name comes from visible text. For icon-only buttons add aria-label. For stateful controls add aria-pressed, aria-expanded or aria-controls as appropriate. These ARIA attributes do not change visual design.
3. Do not disable focus outlines globally. Bulma 0.9.x applies focus via :focus with a box-shadow outline on .button. Bulma 1.x shifts toward :focus-visible for keyboard-only focus. Maintain accessibility by keeping a visible focus indicator with sufficient contrast and not overriding it with outline:none.
Verification steps: test reading order with a screen reader, tab through all .button elements with keyboard only and confirm a visible focus indicator, validate markup for accessible names, and check computed focus styles in both 0.9.x and 1.x builds.
One diagnostic detail that changes the recommendation: are you globally disabling outlines or using Bulma order/offset utilities to reorder columns at specific breakpoints? Confirming this determines whether a source-order rewrite or a custom focus-visible restore is required.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.