Bootstrap Buttons

Note: This documentation is for an older version of Bootstrap (v.4). A newer version is available for Bootstrap 5. We recommend migrating to the latest version of our product - Material Design for Bootstrap 5.
Go to docs v.5

You can use Bootstrap’s custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more...


Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.

        <button type="button" class="btn btn-primary">Primary</button>
        <button type="button" class="btn btn-secondary">Secondary</button>
        <button type="button" class="btn btn-success">Success</button>
        <button type="button" class="btn btn-danger">Danger</button>
        <button type="button" class="btn btn-warning">Warning</button>
        <button type="button" class="btn btn-info">Info</button>
        <button type="button" class="btn btn-light">Light</button>
        <button type="button" class="btn btn-dark">Dark</button>
        <button type="button" class="btn btn-link">Link</button>


Basic MDB buttons

MDB includes 7 predefined button styles, each serving its own semantic purpose.

        <!-- Provides extra visual weight and identifies the primary action in a set of buttons -->
        <button type="button" class="btn btn-primary">Primary</button>

        <!-- Default button -->
        <button type="button" class="btn btn-default">Default</button>

        <!-- Secondary button -->
        <button type="button" class="btn btn-secondary">Secondary</button>

        <!-- Indicates a successful or positive action -->
        <button type="button" class="btn btn-success">Success</button>

        <!-- Contextual button for informational alert messages -->
        <button type="button" class="btn btn-info">Info</button>

        <!-- Indicates caution should be taken with this action -->
        <button type="button" class="btn btn-warning">Warning</button>

        <!-- Indicates a dangerous or potentially negative action -->
        <button type="button" class="btn btn-danger">Danger</button>


Additional buttons

        <button type="button" class="btn btn-elegant">Elegant</button>

        <button type="button" class="btn btn-unique">Unique</button>

        <button type="button" class="btn btn-pink">Pink</button>

        <button type="button" class="btn btn-purple">Purple</button>

        <button type="button" class="btn btn-deep-purple">Deep-purple</button>

        <button type="button" class="btn btn-indigo">Indigo</button>

        <!--Light blue-->
        <button type="button" class="btn btn-light-blue">Light blue</button>

        <button type="button" class="btn btn-cyan">Cyan</button>

        <button type="button" class="btn btn-dark-green">Dark-green</button>

        <button type="button" class="btn btn-light-green">Light-green</button>

        <button type="button" class="btn btn-yellow">Yellow</button>

        <button type="button" class="btn btn-amber">Amber</button>

        <button type="button" class="btn btn-deep-orange">Deep-orange</button>

        <button type="button" class="btn btn-brown">Brown</button>

        <button type="button" class="btn btn-blue-grey">Blue-grey</button>

        <button type="button" class="btn btn-mdb-color">MDB</button>


Gradient buttons

Check our documentation about gradients.

        <button class="btn peach-gradient">Peach</button>
        <button class="btn purple-gradient">Purple</button>
        <button class="btn blue-gradient">Blue</button>
        <button class="btn aqua-gradient">Aqua</button>


Outline buttons

In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the .btn-outline-* ones to remove all background images and colors on any button.

          <button type="button" class="btn btn-outline-primary waves-effect">Primary</button>
          <button type="button" class="btn btn-outline-default waves-effect">Default</button>
          <button type="button" class="btn btn-outline-secondary waves-effect">Secondary</button>
          <button type="button" class="btn btn-outline-success waves-effect">Success</button>
          <button type="button" class="btn btn-outline-info waves-effect">Info</button>
          <button type="button" class="btn btn-outline-warning waves-effect">Warning</button>
          <button type="button" class="btn btn-outline-danger waves-effect">Danger</button>


Waves effect with outline buttons

MDB automatically adds a wave effect to each element with the .btn class. However, in outline buttons, it's barely visible due to their lack of background.

That's why to outline buttons we need to add an additional class, .waves-effect, to make the waves darker and more intense.

Rounded buttons MDB Pro component

        <button type="button" class="btn btn-primary btn-rounded">Primary</button>
        <button type="button" class="btn btn-default btn-rounded">Default</button>
        <button type="button" class="btn btn-secondary btn-rounded">Secondary</button>
        <button type="button" class="btn btn-success btn-rounded">Success</button>
        <button type="button" class="btn btn-info btn-rounded">Info</button>
        <button type="button" class="btn btn-warning btn-rounded">Warning</button>
        <button type="button" class="btn btn-danger btn-rounded">Danger</button>


Rounded outline buttons MDB Pro component

        <button type="button" class="btn btn-outline-primary btn-rounded waves-effect">Primary</button>
        <button type="button" class="btn btn-outline-default btn-rounded waves-effect">Default</button>
        <button type="button" class="btn btn-outline-secondary btn-rounded waves-effect">Secondary</button>
        <button type="button" class="btn btn-outline-success btn-rounded waves-effect">Success</button>
        <button type="button" class="btn btn-outline-info btn-rounded waves-effect">Info</button>
        <button type="button" class="btn btn-outline-warning btn-rounded waves-effect">Warning</button>
        <button type="button" class="btn btn-outline-danger btn-rounded waves-effect">Danger</button>


Floating buttons MDB Pro component

        <a class="btn-floating btn-lg btn-default"><i class="fas fa-bolt"></i></a>
        <a class="btn-floating btn-primary"><i class="fas fa-leaf"></i></a>
        <a class="btn-floating btn-sm btn-secondary"><i class="fas fa-star"></i></a>


Fixed buttons MDB Pro component

See the live example of a fixed button in the bottom right corner of this page.

        <div class="fixed-action-btn" style="bottom: 45px; right: 24px;">
          <a class="btn-floating btn-lg red">
            <i class="fas fa-pencil-alt"></i>

          <ul class="list-unstyled">
            <li><a class="btn-floating red"><i class="fas fa-star"></i></a></li>
            <li><a class="btn-floating yellow darken-1"><i class="fas fa-user"></i></a></li>
            <li><a class="btn-floating green"><i class="fas fa-envelope"></i></a></li>
            <li><a class="btn-floating blue"><i class="fas fa-shopping-cart"></i></a></li>


"Back to the top" button MDB Pro component"

A "Back to the top" button is very useful for long pages, especially on mobile devices.

Click the button below to see the live example.

Live example

Usage: To make it work, you have to set the ID #top-section to any element on the top of the page.

        <div class="fixed-action-btn smooth-scroll" style="bottom: 45px; right: 24px;">
          <a href="#top-section" class="btn-floating btn-large red">
            <i class="fas fa-arrow-up"></i>


Flat button MDB Pro component

        <button type="button" class="btn btn-flat btn-lg">Click me</button>


Buttons with icons

Note: To set the desired distance between icon and text, you can use the spacing utilities (for example .ml-1, .mr-2).

        <button class="btn btn-primary"><i class="fas fa-magic mr-1"></i> Left</button>
        <button class="btn btn-default">Right <i class="fas fa-magic ml-1"></i></button>


Button tags

The .btn classes are designed to be used with the <button> element. However, you can also use these classes on <a> elements (though some browsers may apply a slightly different rendering).

When using button classes on <a> elements that are used to trigger in-page functionality (like collapsing content), rather than linking to new pages or sections within the current page, these links should be given a role="button" to appropriately convey their purpose to assistive technologies such as screen readers.


        <a class="btn btn-primary" role="button">Link</a>
        <button class="btn btn-primary" type="submit">Button</button>
        <input class="btn btn-primary" type="button" value="Input">
        <input class="btn btn-primary" type="submit" value="Submit">
        <input class="btn btn-primary" type="reset" value="Reset">



Fancy larger or smaller buttons? Add .btn-lg or .btn-sm for additional sizes.

        <button type="button" class="btn btn-default btn-lg">Large button</button>
        <button type="button" class="btn btn-primary btn-lg">Large button</button>


        <button type="button" class="btn btn-default btn-sm">Small button</button>
        <button type="button" class="btn btn-primary btn-sm">Small button</button>

Create block level buttons—those that span the full width of a parent—by adding the class.btn-block.

        <button type="button" class="btn btn-default btn-lg btn-block">Block level button</button>
        <button type="button" class="btn btn-primary btn-lg btn-block">Block level button</button>

Active state

Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. There’s no need to add a class to <button>s as they use a pseudo-class. However, you can still force the same active appearance with .active (and include the aria-pressed="true" attribute) should you need to replicate the state programmatically.

Primary link Link

        <a class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Primary link</a>
        <a class="btn btn-default btn-lg active" role="button" aria-pressed="true">Link</a>


Disabled state

Make buttons look inactive by adding the disabled boolean attribute to any <button> element.

        <button type="button" class="btn btn-primary btn-lg" disabled>Primary button</button>
        <button type="button" class="btn btn-default btn-lg" disabled>Button</button>


Button plugin

Do more with buttons. You can control button states or create groups of buttons for more components like toolbars.

Toggle states

Add data-toggle="button" to toggle a button’s active state. If you’re pre-toggling a button, you must manually add the .active class and the attribute aria-pressed="true" to the <button>.

        <button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">
          Single toggle

Checkbox and radio buttons

Bootstrap’s .button styles can be applied to other elements, such as <label>s, to provide checkbox or radio style button toggling. You just need to add data-toggle="buttons" to a .btn-group containing those modified buttons to enable toggling in their respective styles.

The checked state for these buttons is only updated via a click event on the button. If you use another method to update the input—e.g., with <input type="reset"> or by manually applying the input’s checked property—you’ll need to toggle .active on the <label> manually.

Note that pre-checked buttons require you to manually add the .active class to the input’s <label>.

        <div class="btn-group btn-group-toggle" data-toggle="buttons">
          <label class="btn btn-primary active">
            <input type="checkbox" checked autocomplete="off"> Checkbox 1 (pre-checked)
          <label class="btn btn-primary">
            <input type="checkbox" autocomplete="off"> Checkbox 2
          <label class="btn btn-primary">
            <input type="checkbox" autocomplete="off"> Checkbox 3

Radio buttons

        <div class="btn-group btn-group-toggle" data-toggle="buttons">
          <label class="btn btn-primary form-check-label active">
            <input class="form-check-input" type="radio" name="options" id="option1" autocomplete="off" checked>
            Radio 1 (Preselected)
          <label class="btn btn-primary form-check-label">
            <input class="form-check-input" type="radio" name="options" id="option2" autocomplete="off"> Radio
          <label class="btn btn-primary form-check-label">
            <input class="form-check-input" type="radio" name="options" id="option3" autocomplete="off"> Radio


Method Description
$().button('toggle') Toggles the push state. Gives the button the appearance that it has been activated.
$().button('dispose') Destroys an element’s button.

Also available for:


Getting started: download & setup


All of the components and features are a part of the MDBootstrap package.

MDBootstrap (Material Design for Bootstrap) is an MIT Licensed framework - free for personal & commercial use.

It combines the esthetic of Material Design and the functionalities of the newest Bootstrap.

Click on the button below to visit the Getting Started Page, where you can download the latest MDBootstrap package.

MDBootstrap Download MDBootstrap About


Using components and features labeled as MDB Pro component requires the MDB Pro package - a powerful UI Kit containing over 10,000 components, dozens of plugins and much more cool features.

Click the button below to learn more about the MDBootstrap Pro package.

MDBootstrap Pro


If you need any additional help, use our "5 min Quick Start" guide or start full Bootstrap tutorial.

5 min Quick Start Full Bootstrap Tutorial

Compilation & Customization

To reduce the weight of MDBootstrap package even more, you can compile your own, custom package containing only those components and features that you need.

If you need additional help with compiling your custom package, please use our Compilation & Customization tutorial.

Compilation & Customization tutorial

Map of dependencies of SCSS files in MDBootstrap:


    '-->' means 'required'

    All free and pro files require files from 'core' catalog

    'none' means 'this component doesn't require anything except core files'

    A file wrapped by `< >` means that this file make the base component prettier but it isn't necessary for the proper working

    All PRO components require 'pro/_variables.scss' file

    |-- core/
    |   |
    |   |-- bootstrap/
    |   |	|-- _functions.scss
    |   |	|-- _variables.scss
    |   |
    |   |-- _colors.scss
    |   |-- _global.scss
    |   |-- _helpers.scss
    |   |-- _masks.scss
    |   |-- _mixins.scss
    |   |-- _typography.scss
    |   |-- _variables.scss
    |   |-- _waves.scss
    |-- free/
    |   |-- _animations-basic.scss --> none
    |   |-- _animations-extended.scss --> _animations-basic.scss
    |   |-- _buttons.scss --> none
    |   |-- _cards.scss --> none <_buttons.scss>
    |   |-- _dropdowns.scss --> none <_buttons.scss>
    |   |-- _input-group.scss --> _forms.scss, _buttons.scss, _dropdowns.scss
    |   |-- _navbars.scss --> none <_buttons.scss, _forms.scss, _input-group.scss>
    |   |-- _pagination.scss --> none
    |   |-- _badges.scss --> none
    |   |-- _modals.scss --> _buttons.scss, _forms.scss (PRO --> _tabs.scss)
    |   |-- _carousels.scss --> <_buttons.scss>
    |   |-- _forms.scss --> none
    |   |-- _msc.scss --> none <_buttons.scss, _forms.scss, _cards.scss>
    |   |-- _footers.scss none <_buttons.scss> (PRO: )
    |   |-- _list-group.scss --> none
    |   |-- _tables.scss --> none (PRO: _material-select.scss, pro/_forms.scss, _checkbox.scss, pro/_buttons.scss, pro/_cards.scss, _pagination.scss, pro/_msc.scss)
    |   |-- _depreciated.scss
    |-- pro/
    |   |
    |   |-- picker/
    |   |   |-- _default.scss --> none
    |   |   |-- _default-time.scss --> _default.scss, free/_forms.scss, free/_buttons.scss, pro/_buttons.scss, free/_cards.scss
    |   |   |-- _default-date.scss --> _default.scss, free/_forms.scss
    |   |
    |   |-- sections/
    |   |   |-- _templates.scss --> _sidenav.scss
    |   |   |-- _social.scss --> free/_cards.scss, free/ _forms.scss, free/_buttons.scss, pro/_buttons.scss,
    |   |   |-- _team.scss --> free/_buttons.scss, pro/_buttons.scss, free/_cards.scss, pro/_cards.scss
    |   |   |-- _testimonials.scss --> free/_carousels.scss, pro/_carousels.scss, free/_buttons.scss, pro/_buttons.scss
    |   |   |-- _magazine.scss --> _badges.scss
    |   |   |-- _pricing.scss --> free/_buttons.scss, pro/_buttons.scss
    |   |   |-- _contacts.scss --> free/_forms.scss, pro/_forms.scss, free/_buttons.scss, pro/_buttons.scss
    |   |
    |   |-- _variables.scss
    |   |-- _buttons.scss --> free/_buttons.scss, pro/_msc.scss, _checkbox.scss, _radio.scss
    |   |-- _social-buttons.scss --> free/_buttons.scss, pro/_buttons.scss
    |   |-- _tabs.scss --> _cards.scss
    |   |-- _cards.scss --> free/_cards.scss <_buttons.scss, _social-buttons.scss>
    |   |-- _dropdowns.scss --> free/_dropdowns.scss, free/_buttons.scss
    |   |-- _navbars.scss --> free/_navbars.scss  (PRO: )
    |   |-- _scrollspy.scss --> none
    |   |-- _lightbox.scss --> none
    |   |-- _chips.scss --> none
    |   |-- _msc.scss --> none
    |   |-- _forms.scss --> none
    |   |-- _radio.scss --> none
    |   |-- _checkbox.scss --> none
    |   |-- _material-select.scss --> none
    |   |-- _switch.scss --> none
    |   |-- _file-input.scss --> free/_forms.scss, free/_buttons.scss
    |   |-- _range.scss --> none
    |   |-- _input-group.scss --> free/_input-group.scss and the same what free input group, _checkbox.scss, _radio.scss
    |   |-- _autocomplete.scss --> free/_forms.scss
    |   |-- _accordion.scss --> pro/_animations.scss, free/_cards.scss
    |   |-- _parallax.scss --> none
    |   |-- _sidenav.scss --> free/_forms.scss, pro/_animations.scss, sections/_templates.scss
    |   |-- _ecommerce.scss --> free/_cards.scss, pro/_cards.scss, free/_buttons.scss, pro/_buttons.scss, pro/_msc.scss
    |   |-- _carousels.scss --> free/_carousels.scss, free/_cards.scss, free/_buttons.scss 
    |   |-- _steppers.scss --> free/_buttons.scss
    |   |-- _blog.scss --> none
    |   |-- _toasts.scss --> free/_buttons.scss
    |   |-- _animations.scss --> none
    |   |-- _charts.scss --> none
    |   |-- _progress.scss --> none
    |   |-- _scrollbar.scss --> none
    |   |-- _skins.scss --> none
    |   |-- _depreciated.scss
    `-- _custom-skin.scss
    `-- _custom-styles.scss
    `-- _custom-variables.scss
    `-- mdb.scss


Map of dependencies of JavaScript modules in MDBootstrap:


    '-->' means 'required'

    All files require jQuery and bootstrap.js

    ├── dist/
    │   ├── buttons.js
    │   ├── cards.js
    │   ├── character-counter.js
    │   ├── chips.js
    │   ├── collapsible.js --> vendor/velocity.js
    │   ├── dropdown.js --> Popper.js, jquery.easing.js
    │   ├── file-input.js
    │   ├── forms-free.js
    │   ├── material-select.js --> dropdown.js
    │   ├── mdb-autocomplete.js
    │   ├── preloading.js
    │   ├── range-input.js --> vendor/velocity.js
    │   ├── scrolling-navbar.js
    │   ├── sidenav.js --> vendor/velocity.js, vendor/hammer.js, vendor/jquery.hammer.js
    │   └── smooth-scroll.js
    ├── _intro-mdb-pro.js
    ├── modules.js
    ├── src/
    │   ├── buttons.js
    │   ├── cards.js
    │   ├── character-counter.js
    │   ├── chips.js
    │   ├── collapsible.js --> vendor/velocity.js
    │   ├── dropdown.js --> Popper.js, jquery.easing.js
    │   ├── file-input.js
    │   ├── forms-free.js
    │   ├── material-select.js --> dropdown.js
    │   ├── mdb-autocomplete.js
    │   ├── preloading.js
    │   ├── range-input.js --> vendor/velocity.js
    │   ├── scrolling-navbar.js
    │   ├── sidenav.js --> vendor/velocity.js, vendor/hammer.js, vendor/jquery.hammer.js
    │   └── smooth-scroll.js
    └── vendor/
        ├── addons/
        │   ├── datatables.js
        │   └── datatables.min.js
        ├── chart.js
        ├── enhanced-modals.js
        ├── hammer.js
        ├── jarallax.js
        ├── jarallax-video.js --> vendor/jarallax.js
        ├── jquery.easing.js
        ├── jquery.easypiechart.js
        ├── jquery.hammer.js --> vendor/hammer.js
        ├── jquery.sticky.js
        ├── lightbox.js
        ├── picker-date.js --> vendor/picker.js
        ├── picker.js
        ├── picker-time.js --> vendor/picker.js
        ├── scrollbar.js
        ├── scrolling-navbar.js
        ├── toastr.js
        ├── velocity.js
        ├── waves.js
        └── wow.js

Integrations with Angular, React or Vue

Apart from the standard Bootstrap integration (using jQuery), MDBootstrap also integrates with Angular, React and Vue.

About MDB Angular About MDB React About MDB Vue

Exclusive resources

MDBootstrap is a platform for web creators and MDB packages are only a part of it.

If you sign up you'll gain free access to other useful tools & resources including:

  • Community developed components & design projects
  • Technical support & community forum
  • CLI interface & free project hosting
  • Helpful articles & news agregators

...and much more!

Don't hesitate and sign up now!

Sign up now