Bulma Customization

Bulma is highly customizable through Sass variables. You can easily change colors, fonts, spacing, and more to match your brand identity.

Setting Up Custom Variables

Create a custom Sass file to override default variables:

// custom.scss
// 1. Import Bulma utilities first
@import "bulma/sass/utilities/initial-variables";
@import "bulma/sass/utilities/functions";

// 2. Define your custom variables
$primary: #ff3860;
$success: #23d160;
$warning: #ffdd57;
$danger: #ff3860;
$dark: #363636;

// Custom colors
$custom-colors: (
  "twitter": (#1da1f2, #0d8bd9),
  "github": (#333, #222)
);

// Typography
$family-sans-serif: "Inter", "Segoe UI", Roboto, sans-serif;
$family-monospace: "Fira Code", monospace;

// Spacing
$gap: 32px;
$tablet: 768px;
$desktop: 1024px;

// 3. Import the rest of Bulma
@import "bulma/sass/utilities/derived-variables";
@import "bulma/sass/utilities/mixins";
@import "bulma/sass/utilities/controls";

// 4. Merge custom colors
$colors: mergeColorMaps($colors, $custom-colors);

// 5. Import the rest of Bulma
@import "bulma";

Color Customization

Bulma provides a comprehensive color system:

Primary Colors

// Change primary colors
$primary: #00d1b2;
$info: #3273dc;
$success: #23d160;
$warning: #ffdd57;
$danger: #ff3860;
$light: #f5f5f5;
$dark: #363636;

Custom Color Palette

// Add custom colors
$custom-colors: (
  "purple": ($purple, $purple-dark),
  "orange": ($orange, $orange-dark),
  "twitter": (#1da1f2, #0d8bd9),
  "github": (#333, #222),
  "linkedin": (#0077b5, #00629c)
);

// Merge with existing colors
$colors: mergeColorMaps($colors, $custom-colors);

Typography Customization

// Font families
$family-sans-serif: "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
$family-monospace: "Fira Code", "Consolas", "Monaco", monospace;

// Font sizes
$size-1: 3rem;    // h1
$size-2: 2.5rem;  // h2
$size-3: 2rem;    // h3
$size-4: 1.5rem;  // h4
$size-5: 1.25rem; // h5
$size-6: 1rem;    // h6
$size-7: 0.75rem; // small

// Font weights
$weight-light: 300;
$weight-normal: 400;
$weight-medium: 500;
$weight-semibold: 600;
$weight-bold: 700;

Spacing and Sizing

// Responsive breakpoints
$gap: 32px;
$tablet: 768px;
$desktop: 1024px;
$widescreen: 1216px;
$fullhd: 1408px;

// Container max widths
$container-offset: 32px;
$container-max-width: $fullhd;

// Spacing scale
$spacing-shortcuts: ("margin": "m", "padding": "p");
$spacing-directions: ("top": "t", "right": "r", "bottom": "b", "left": "l");
$spacing-horizontal: "x";
$spacing-vertical: "y";
$spacing-values: ("0": 0, "1": 0.25rem, "2": 0.5rem, "3": 0.75rem, "4": 1rem, "5": 1.5rem, "6": 3rem);

Component Customization

Buttons

// Button customization
$button-color: $white;
$button-background-color: $primary;
$button-border-color: $primary;
$button-hover-color: $white;
$button-hover-border-color: $primary-dark;
$button-focus-color: $white;
$button-active-color: $white;

// Button sizes
$button-padding-vertical: 0.5em;
$button-padding-horizontal: 1em;

Navbar

// Navbar customization
$navbar-height: 4rem;
$navbar-item-color: $text;
$navbar-item-hover-color: $primary;
$navbar-item-hover-background-color: $white-bis;
$navbar-dropdown-arrow: $primary;

Cards

// Card customization
$card-color: $text;
$card-background-color: $white;
$card-shadow: 0 2px 3px rgba($black, 0.1), 0 0 0 1px rgba($black, 0.1);
$card-header-shadow: 0 1px 2px rgba($black, 0.1);
$card-footer-border-top: 1px solid $border;

Creating a Dark Theme

// Dark theme variables
$dark-bg: #1a1a1a;
$dark-text: #e0e0e0;
$dark-border: #333;

$scheme-main: $dark-bg;
$scheme-main-bis: #242424;
$scheme-main-ter: #2d2d2d;
$background: $dark-bg;
$border: $dark-border;
$text: $dark-text;
$text-strong: #ffffff;

// Import Bulma after custom variables
@import "bulma";

Utility Classes Customization

// Custom utility classes
$radius: 0.5rem;
$radius-small: 0.25rem;
$radius-medium: 0.75rem;
$radius-large: 1rem;

// Shadows
$shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
$shadow-medium: 0 4px 8px rgba(0, 0, 0, 0.12);
$shadow-large: 0 8px 16px rgba(0, 0, 0, 0.15);

Complete Customization Example

// _custom-variables.scss
@import "bulma/sass/utilities/initial-variables";
@import "bulma/sass/utilities/functions";

// Brand colors
$primary: #667eea;
$primary-dark: #5a6fd8;
$secondary: #764ba2;

// Custom colors
$custom-colors: (
  "gradient": (linear-gradient(135deg, $primary 0%, $secondary 100%), $primary-dark),
  "discord": (#7289da, #5b73c4)
);

// Typography
$family-sans-serif: "Poppins", sans-serif;
$body-size: 16px;

// Layout
$gap: 24px;
$radius: 8px;

// Components
$navbar-height: 5rem;
$button-padding-vertical: 0.75em;
$button-padding-horizontal: 1.5em;

@import "bulma/sass/utilities/derived-variables";
$colors: mergeColorMaps($colors, $custom-colors);
@import "bulma";

Best Practices

  • Create a separate file for custom variables
  • Use meaningful variable names
  • Maintain color contrast for accessibility
  • Test your theme on multiple devices
  • Document your custom variables
Pro Tip: Use CSS variables alongside Sass for runtime theme switching capabilities.

Up next: Bulma Columns - Flexible Grid System