Skip to main content
This guide will walk you through creating your first component with Bulma. You’ll learn the basic class naming conventions and how to use modifiers to customize components.

Prerequisites

Before starting, make sure you have Bulma installed. If not, see the Installation guide. For this quickstart, we’ll use the CDN for simplicity:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">

Understanding Bulma’s class system

Bulma uses intuitive, semantic class names that follow clear patterns:

Base classes

Components use simple, single-word names:
<button class="button">Button</button>
<div class="card">Card</div>
<nav class="navbar">Navbar</nav>

Modifier classes with is-*

Use is-* modifiers to change the state, style, or size of an element:
  • Colors: is-primary, is-success, is-danger, is-warning, is-info
  • Sizes: is-small, is-normal, is-medium, is-large
  • States: is-active, is-loading, is-disabled, is-hovered, is-focused
  • Styles: is-outlined, is-rounded, is-light, is-inverted
<button class="button is-primary is-large">Large Primary Button</button>

Helper classes with has-*

Use has-* helpers for utilities like text color, background, or text alignment:
  • Text colors: has-text-primary, has-text-white, has-text-danger
  • Backgrounds: has-background-primary, has-background-light
  • Text alignment: has-text-centered, has-text-right, has-text-left
<p class="has-text-centered has-text-primary">Centered primary text</p>
Modifier classes are always prefixed with is- or has- by default. This makes them easy to identify and prevents naming conflicts.

Build your first component

Let’s create a user profile card step by step.
1

Create the HTML structure

Start with a basic HTML file:
profile-card.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bulma Profile Card</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
</head>
<body>
  <section class="section">
    <div class="container">
      <!-- Card will go here -->
    </div>
  </section>
</body>
</html>
2

Add the card component

Bulma’s card component uses a structured hierarchy:
<div class="card">
  <div class="card-image">
    <figure class="image is-4by3">
      <img src="https://bulma.io/assets/images/placeholders/1280x960.png" alt="Placeholder image">
    </figure>
  </div>
  <div class="card-content">
    <!-- Content will go here -->
  </div>
</div>
The card structure:
  • .card - Main container
  • .card-image - Image wrapper
  • .card-content - Main content area
3

Add content with media object

Use Bulma’s media object for the profile section:
<div class="card-content">
  <div class="media">
    <div class="media-left">
      <figure class="image is-48x48">
        <img class="is-rounded" src="https://bulma.io/assets/images/placeholders/96x96.png" alt="Profile picture">
      </figure>
    </div>
    <div class="media-content">
      <p class="title is-4">Jane Doe</p>
      <p class="subtitle is-6">@janedoe</p>
    </div>
  </div>
  
  <div class="content">
    Web developer and designer. I love creating beautiful, functional websites.
    <br>
    <time datetime="2024-1-1">Joined January 2024</time>
  </div>
</div>
4

Add a card footer with actions

Add interactive buttons in the footer:
<footer class="card-footer">
  <a href="#" class="card-footer-item">Follow</a>
  <a href="#" class="card-footer-item">Message</a>
  <a href="#" class="card-footer-item">Share</a>
</footer>
5

Enhance with modifiers

Add color and size modifiers to make it stand out:
<div class="card">
  <div class="card-image">
    <figure class="image is-4by3">
      <img src="https://bulma.io/assets/images/placeholders/1280x960.png" alt="Placeholder image">
    </figure>
  </div>
  <div class="card-content">
    <div class="media">
      <div class="media-left">
        <figure class="image is-48x48">
          <img class="is-rounded" src="https://bulma.io/assets/images/placeholders/96x96.png" alt="Profile picture">
        </figure>
      </div>
      <div class="media-content">
        <p class="title is-4">Jane Doe</p>
        <p class="subtitle is-6 has-text-grey">@janedoe</p>
      </div>
    </div>
    
    <div class="content">
      Web developer and designer. I love creating beautiful, functional websites.
      <br>
      <time datetime="2024-1-1" class="has-text-grey-light">Joined January 2024</time>
    </div>
  </div>
  <footer class="card-footer">
    <a href="#" class="card-footer-item has-text-primary">Follow</a>
    <a href="#" class="card-footer-item">Message</a>
    <a href="#" class="card-footer-item">Share</a>
  </footer>
</div>

Complete example

Here’s the complete profile card with centering and responsive container:
complete-profile-card.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Bulma Profile Card</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
</head>
<body>
  <section class="section">
    <div class="container">
      <div class="columns is-centered">
        <div class="column is-half">
          <div class="card">
            <div class="card-image">
              <figure class="image is-4by3">
                <img src="https://bulma.io/assets/images/placeholders/1280x960.png" alt="Placeholder image">
              </figure>
            </div>
            <div class="card-content">
              <div class="media">
                <div class="media-left">
                  <figure class="image is-48x48">
                    <img class="is-rounded" src="https://bulma.io/assets/images/placeholders/96x96.png" alt="Profile picture">
                  </figure>
                </div>
                <div class="media-content">
                  <p class="title is-4">Jane Doe</p>
                  <p class="subtitle is-6 has-text-grey">@janedoe</p>
                </div>
              </div>
              
              <div class="content">
                Web developer and designer. I love creating beautiful, functional websites.
                <br>
                <time datetime="2024-1-1" class="has-text-grey-light">Joined January 2024</time>
              </div>
            </div>
            <footer class="card-footer">
              <a href="#" class="card-footer-item has-text-primary">Follow</a>
              <a href="#" class="card-footer-item">Message</a>
              <a href="#" class="card-footer-item">Share</a>
            </footer>
          </div>
        </div>
      </div>
    </div>
  </section>
</body>
</html>

Exploring modifiers

Let’s experiment with different modifiers to see how they transform components.

Button variations

<button class="button is-primary">Primary</button>
<button class="button is-link">Link</button>
<button class="button is-info">Info</button>
<button class="button is-success">Success</button>
<button class="button is-warning">Warning</button>
<button class="button is-danger">Danger</button>

Combining modifiers

You can combine multiple modifiers on a single element:
<button class="button is-primary is-large is-rounded is-fullwidth">
  Large Rounded Primary Button
</button>
This creates a:
  • Primary colored button (is-primary)
  • Large size (is-large)
  • Rounded corners (is-rounded)
  • Full width (is-fullwidth)

Responsive design

Bulma is mobile-first and responsive by default. Use responsive modifiers to control visibility and layout:
<div class="columns">
  <div class="column is-half-desktop is-full-mobile">
    <!-- Half width on desktop, full width on mobile -->
  </div>
</div>

<!-- Hide on mobile, show on tablet and above -->
<div class="is-hidden-mobile">
  This text is hidden on mobile devices
</div>
Breakpoint suffixes:
  • -mobile (up to 768px)
  • -tablet (769px and above)
  • -desktop (1024px and above)
  • -widescreen (1216px and above)
  • -fullhd (1408px and above)

Common patterns

Here are some frequently used patterns:

Notification messages

<div class="notification is-success">
  <button class="delete"></button>
  Your account has been created successfully!
</div>

Hero section

<section class="hero is-primary is-medium">
  <div class="hero-body">
    <p class="title">Welcome to My Site</p>
    <p class="subtitle">A beautiful landing page with Bulma</p>
  </div>
</section>

Button group

<div class="buttons">
  <button class="button is-success">Save</button>
  <button class="button is-danger">Delete</button>
  <button class="button">Cancel</button>
</div>

What you’ve learned

Base class names are simple and semantic (button, card, navbar)
Modifiers use is-* prefix for states and styles
Helpers use has-* prefix for utility classes
Multiple modifiers can be combined on one element
Bulma is mobile-first and responsive by default

Next steps

Customization

Learn how to customize colors, spacing, and themes

Components

Explore all available Bulma components
The best way to learn Bulma is by building. Try modifying the examples above or creating your own components using the official Bulma documentation.

Build docs developers (and LLMs) love