Ora

How to customize Bootstrap 5 checkbox?

Published in Bootstrap Checkbox Customization 5 mins read

Customizing Bootstrap 5 checkboxes allows you to seamlessly integrate them with your brand's aesthetic, from adjusting their size and color to completely overhauling their appearance. Bootstrap 5 offers robust tools, primarily through CSS variables and direct CSS overrides, to achieve a tailored look for your interactive elements.

Tailoring Your Bootstrap 5 Checkboxes

Bootstrap 5's checkboxes are built on custom form elements, meaning you'll often override specific CSS rules or leverage Bootstrap's utility classes and CSS variables rather than directly styling the native <input type="checkbox"> element.

1. Customizing Colors with CSS Variables

Bootstrap 5 heavily relies on CSS variables for theming, making it straightforward to change the default blue accent color of checkboxes. You can override these variables globally or for specific elements.

  • Override Primary Color: The primary color used for the checkmark and border when checked is controlled by the --bs-primary CSS variable.

    /* Globally change primary color for Bootstrap components */
    :root {
      --bs-primary: #6f42c1; /* Example: Purple */
    }
    
    /* Or for a specific group of checkboxes */
    .my-custom-checkbox-group {
      --bs-primary: #dc3545; /* Example: Red */
    }
  • Direct Checkbox Color: More specifically, the checked state background and border colors are derived from --bs-form-check-input-checked-bg-color and --bs-form-check-input-checked-border-color.

    .form-check-input:checked {
      background-color: #28a745; /* Green checkmark background */
      border-color: #28a745;     /* Green border when checked */
    }

2. Customizing Checkbox Size

To change the visual size of a Bootstrap checkbox without distorting its appearance, you can effectively use the scale CSS transform property. This property scales the element up or down from its origin.

  • Using the scale Property: Apply transform: scale() to the .form-check-input element to adjust its size.

    /* Make checkboxes 1.5 times larger */
    .form-check-input {
      transform: scale(1.5);
      margin-top: 0.5rem; /* Adjust alignment if text is beside it */
      vertical-align: middle; /* Helps with text alignment */
    }
    
    /* Make checkboxes slightly smaller */
    .form-check-input.form-check-sm {
      transform: scale(0.8);
      margin-top: 0.1rem;
    }
    • Insight: When using scale, it's often necessary to also adjust margin or vertical-align properties to ensure proper visual alignment with accompanying labels or text, as scaling changes the element's visual size but not its allocated layout space.

3. Customizing Background and Border

You can directly override the default background-color and border properties of the .form-check-input element.

  • Unchecked State:
    .form-check-input {
      background-color: #f0f0f0; /* Light grey background when unchecked */
      border: 2px solid #ccc;    /* Custom border for unchecked */
      border-radius: 4px;        /* Slightly rounded corners */
    }
  • Checked State:
    .form-check-input:checked {
      background-color: #007bff; /* Blue background when checked */
      border-color: #007bff;     /* Blue border when checked */
    }

4. Customizing the Checkmark Icon

Bootstrap 5 uses an SVG as a background-image for the checkmark. To change it, you can replace this SVG with your own or modify its color.

  • Changing Checkmark Color: The checkmark color is typically white and can be difficult to change directly without regenerating the SVG. However, if you're using background-color on the checked state, ensure sufficient contrast.

  • Using a Custom SVG: You can replace the default checkmark with a custom SVG or even an icon font.

    .form-check-input:checked {
      background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e");
      /* Replace with your custom SVG data URI */
      /* Make sure the stroke color in the SVG is correct */
    }
    
    /* Example with a custom checkmark using an icon font (e.g., Font Awesome) */
    /* This approach might require hiding the default SVG and adding a pseudo-element */
    .form-check-input[type="checkbox"] {
      -webkit-appearance: none; /* Hide native checkbox */
      -moz-appearance: none;
      appearance: none;
      /* ... other styles for border, background, size ... */
    }
    .form-check-input[type="checkbox"]:checked::before {
      content: "\f00c"; /* Font Awesome check icon */
      font-family: "Font Awesome 5 Free";
      font-weight: 900;
      color: white; /* Or your preferred color */
      display: block;
      text-align: center;
      line-height: 1; /* Adjust as needed */
      transform: scale(0.8); /* Adjust icon size */
    }
    • Note: Using icon fonts requires including the icon font library in your project.

5. Customizing Focus States

The outline and box-shadow properties control the visual feedback when a checkbox is focused.

  • Remove/Change Focus Outline:
    .form-check-input:focus {
      outline: 0;
      box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); /* Default Bootstrap blue focus */
      /* Or your custom focus color */
      box-shadow: 0 0 0 0.25rem rgba(40, 167, 69, 0.25); /* Green focus */
    }

6. Adjusting Layout and Alignment

Bootstrap's .form-check and .form-check-input elements come with built-in styling for spacing.

  • Inline Checkboxes: Use .form-check-inline on the .form-check parent to place checkboxes side-by-side.
    <div class="form-check form-check-inline">
      <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
      <label class="form-check-label" for="inlineCheckbox1">1</label>
    </div>
    <div class="form-check form-check-inline">
      <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
      <label class="form-check-label" for="inlineCheckbox2">2</label>
    </div>
  • Stacked Checkboxes: The default behavior without .form-check-inline creates stacked checkboxes.

7. Advanced Customization with Sass

For more extensive and maintainable customization, especially if you're building a custom theme, compiling Bootstrap from its Sass source files is the recommended approach. This allows you to:

  • Override Sass Variables: Modify variables like $form-check-input-checked-bg, $form-check-input-checked-border-color, $form-check-input-focus-box-shadow, etc., before compiling Bootstrap.
  • Create Custom Components: Extend Bootstrap's checkbox styles with your own Sass mixins and rules.

Here's a quick overview of common customization properties:

Customization Aspect CSS Property to Modify Target Selector Description
Color (checked state) background-color, border-color .form-check-input:checked Changes the background and border color when checked.
Size transform: scale(value) .form-check-input Scales the checkbox up or down without distortion.
Unchecked Appearance background-color, border, border-radius .form-check-input Styles the checkbox when it's not checked.
Checkmark Icon background-image (with SVG data URI), color (if custom icon) .form-check-input:checked Replaces or modifies the SVG checkmark.
Focus State box-shadow, outline .form-check-input:focus Alters the visual feedback when the checkbox is focused.
Label Text Color color .form-check-label Changes the color of the text associated with the checkbox.

By leveraging these techniques, you can ensure your Bootstrap 5 checkboxes are perfectly aligned with your design system and user experience goals.