Select

Bootstrap Select

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

Bootstrap Material Select is a form control that, after a click displays a collapsable list of multiple values which can be used in forms, menus or surveys.

MDB provides you a variety of options and variations.


Default select

Custom select menus need only a custom class, .custom-select to trigger the custom styles. Custom styles are limited to the select’s initial appearance and cannot modify the option's due to browser limitations.

        
            
            <select class="browser-default custom-select">
              <option selected>Open this select menu</option>
              <option value="1">One</option>
              <option value="2">Two</option>
              <option value="3">Three</option>
            </select>
          
        
    

Material select MDB Pro component

Material Select requires an initialization. You have to add the .materialSelect() js code to the select element.

        
            

            <select class="mdb-select md-form">
              <option value="" disabled selected>Choose your option</option>
              <option value="1">Option 1</option>
              <option value="2">Option 2</option>
              <option value="3">Option 3</option>
            </select>

          
        
    
        
            
            // Material Select Initialization
            $(document).ready(function() {
              $('.mdb-select').materialSelect();
            });
          
        
    

You may also choose from small and large custom selects to match our similarly sized text inputs.

        
            
        <select class="browser-default custom-select custom-select-lg mb-3">
          <option selected>Open this select menu</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>
        </select>

        <select class="custom-select custom-select-sm">
          <option selected>Open this select menu</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>
        </select>
      
        
    

The multiple attribute is also supported:

        
            

        <select class="custom-select" multiple>
          <option selected>Open this select menu</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>
        </select>

      
        
    

As is the size attribute:

        
            

        <select class="custom-select" size="3">
          <option selected>Open this select menu</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>
        </select>

      
        
    

Overwriting a standard select

MDB overwrites a standard select to replace it with our Material Select. That's why before you can use it, you have to initialize Material Select by placing the following code in your project.

In addition, you will need a separate call for any dynamically generated select elements your page generates.

Initialization:

        
            
        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
      
        
    

Color variations MDB Pro component

You can use different colors for this element within the selection.

        
            

        <!--Blue select-->
        <select class="mdb-select md-form colorful-select dropdown-primary">
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
          <option value="4">Option 4</option>
          <option value="5">Option 5</option>
        </select>
        <label class="mdb-main-label">Blue select</label>
        <!--/Blue select-->

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

In order to change a select color use one of the following classes:

1. .dropdown-primary

2. .dropdown-danger

3. .dropdown-default

4. .dropdown-secondary

5. .dropdown-success

6. .dropdown-info

7. .dropdown-warning

8. .dropdown-ins

9. .dropdown-dark


Select with a search box MDB Pro component

        
            

        <select class="mdb-select md-form" searchable="Search here..">
          <option value="" disabled selected>Choose your country</option>
          <option value="1">USA</option>
          <option value="2">Germany</option>
          <option value="3">France</option>
          <option value="3">Poland</option>
          <option value="3">Japan</option>
        </select>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Select with a label and search box MDB Pro component

        
            

        <select class="mdb-select md-form" searchable="Search here..">
          <option value="" disabled selected>Choose your country</option>
          <option value="1">USA</option>
          <option value="2">Germany</option>
          <option value="3">France</option>
          <option value="3">Poland</option>
          <option value="3">Japan</option>
        </select>
        <label class="mdb-main-label">Label example</label>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Select with a secondary text MDB Pro component

        
            

          <select class="mdb-select md-form" searchable="Search here..">
            <option value="" disabled selected>Choose your car</option>
            <option value="2" data-secondary-text="Production year: 2012">Volkswagen Passat</option>
            <option value="3" data-secondary-text="Production year: 2017">Subaru Legacy</option>
            <option value="3" data-secondary-text="Production year: 2015">Hyundai Elantra</option>
            <option value="3" data-secondary-text="Production year: 2019">Honda Civic</option>
            <option value="3" data-secondary-text="Production year: 2016">Audi A6</option>
          </select>
  
        
        
    
        
            
  
          // Material Select Initialization
          $(document).ready(function() {
            $('.mdb-select').materialSelect();
          });
          
        
        
    

Multiple select MDB Pro component

        
            

        <select class="mdb-select md-form" multiple>
          <option value="" disabled selected>Choose your option</option>
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
        </select>
        <label class="mdb-main-label">Example label</label>
        <button class="btn-save btn btn-primary btn-sm">Save</button>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Multiselect variations

More multiselect examples and variations can be found in the Multiselect documentation


Options groups MDB Pro component

        
            

        <select class="mdb-select md-form">
          <optgroup label="team 1">
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
          </optgroup>
          <optgroup label="team 2">
            <option value="3">Option 3</option>
            <option value="4">Option 4</option>
          </optgroup>
        </select>
        <label class="mdb-main-label">Example label</label>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Select with icons MDB Pro component

        
            

        <select class="mdb-select md-form">
          <option value="" disabled selected>Choose your option</option>
          <option value="" data-icon="https://mdbootstrap.com/img/Photos/Avatars/avatar-1.webp" class="rounded-circle">
            example
            1</option>
          <option value="" data-icon="https://mdbootstrap.com/img/Photos/Avatars/avatar-2.webp" class="rounded-circle">
            example
            2</option>
          <option value="" data-icon="https://mdbootstrap.com/img/Photos/Avatars/avatar-3.webp" class="rounded-circle">
            example
            1</option>
        </select>
        <label class="mdb-main-label">Example label</label>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Disabled select MDB Pro component

By adding a disabled attribute to the select (or a particular option), you can make it unselectable.

        
            

        <!-- Disabled select-->
        <select class="mdb-select md-form" disabled>
          <option value="" disabled selected>Choose your option</option>
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
        </select>
        <label class="disabled mdb-main-label">Example label</label>

        <!--Disabled option-->
        <select class="mdb-select md-form">
          <option value="" disabled selected>Choose your option</option>
          <option value="1" disabled>Disabled option</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
        </select>
        <label class="mdb-main-label">Example label</label>

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
        });
        
      
        
    

Outline select MDB Pro component

Note warning: For now, an outline styling works correct only for Material Select (not Multiselect) with primary dropdown menu and with skins colors.

        
            

        <div class="row">
          <div class="col-md-6 select-outline">

            <select class="mdb-select md-form md-outline colorful-select dropdown-primary">
              <option value="" disabled selected>Choose your option</option>
              <option value="1">Option 1</option>
              <option value="2">Option 2</option>
              <option value="3">Option 3</option>
            </select>
            <label>Example label</label>

          </div>
        </div>

      
        
    
        
            

        .md-outline.select-wrapper+label {
          top: .5em !important;
          z-index: 2 !important;
        }

      
        
    
        
            

        // Material Select Initialization
        $(document).ready(function() {
          $('.mdb-select').materialSelect();
          $('.select-wrapper.md-form.md-outline input.select-dropdown').bind('focus blur', function () {
            $(this).closest('.select-outline').find('label').toggleClass('active');
            $(this).closest('.select-outline').find('.caret').toggleClass('active');
          });
        });

      
        
    

Updating/destroying Material Select MDB Pro component

To update the items inside the existing Material Select you can destroy it with the function below and then initialize it again.

        
            

        // Material Select Destroy
        $('.mdb-select').materialSelect({
          destroy: true
        });

      
        
    

Adding new options MDB Pro component

By adding an editable="true" attribute to the select, you can easily extend the options list.

        
            

        <select class="mdb-select md-form" editable="true" searchable="Search and add here...">
          <option value="" disabled selected>Choose your option</option>
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
          <option value="3">Option 3</option>
        </select>
        <label class="mdb-main-label">Example label</label>

      
        
    
        
            

        $(document).ready(function() {

          // Material Select
            $('.mdb-select').materialSelect({
          });
        })

      
        
    

Validation MDB Pro component

        
            

        <form class="needs-validation" novalidate>
          <select class="mdb-select validate md-form" searchable="Search here..">
            <option value="" disabled selected>Choose your country</option>
            <option value="1">USA</option>
            <option value="2">Germany</option>
            <option value="3">France</option>
            <option value="4">Poland</option>
            <option value="5">Japan</option>
          </select>
          <button class="btn btn-default btn-sm">Submit</button>
        </form>

      
        
    
        
            
        $(document).ready(function() {
          $('.mdb-select.validate').materialSelect({
            validate: true,
            labels: {
              validFeedback: 'Correct choice',
              invalidFeedback: 'Wrong choice'
            }
          });
          function validateSelect(e) {
            e.preventDefault();
            $('.needs-validation').addClass('was-validated');
            if ($('.needs-validation select').val() === null) {
              $('.needs-validation').find('.valid-feedback').hide();
              $('.needs-validation').find('.invalid-feedback').show();
              $('.needs-validation').find('.select-dropdown').val('').prop('placeholder', 'No countries selected')
            } else {
              $('.needs-validation').find('.valid-feedback').show();
              $('.needs-validation').find('.invalid-feedback').hide();
            }
          }
          $('.needs-validation select').on('change', e => validateSelect(e))
          $('.needs-validation').on('submit', e => validateSelect(e))
        });
      
        
    

Select options and attributes MDB Pro component

There is a plenty of options to customize the Material Select. All of them are described below. Important thing to note is that data attributes have higher priority than JS options passed to the .materialSelect() call. It means that if you will have data-placeholder="Please select a country" and JS option { placeholder: 'Choose country' }, then the value of data-placeholder will be displayed as it has higher priority. The exception is the id attribute which has higher priority than data-select-id as described below.

Data attribute Option name Type Default Description
- destroy boolean false If set to true destroys the Material Select wrapper
data-secondary-text secondaryText string false Additional text displayed inside an option
data-validate validate boolean false If set to true the select control will be validated when put into form element
data-select-id selectId string null If provided, this ID will be used instead of a random UUID to make Material Select elements unique. Note: if id attribute is provided, it has the highest priority
data-default-material-input defaultMaterialInput boolean false If set to true the select control will look like default Bootstrap select
data-fas-classes fasClasses string empty Space-separated list of FAS classes to add on the <i> element in the options list. Note: works only if data-fas attribute is provided with chosen FAS class value
data-far-classes farClasses string empty Space-separated list of FAR classes to add on the <i> element in the options list. Note: works only if data-far attribute is provided with chosen FAR class value
data-fab-classes fabClasses string empty Space-separated list of FAB classes to add on the <i> element in the options list. Note: works only if data-fab attribute is provided with chosen FAB class value
data-copy-classes-option copyClassesOption boolean false If set to true all classes added to the native <select> control will be copied to each option in the Material Select dropdown
data-label-select-all labels.selectAll string Select all The text which is displayed as option which selects all other options in the Multiselect
data-label-options-selected labels.optionsSelected string options selected The text which is displayed on the Multiselect when there are more than 5 (default) options selected, e.g. 7 options selected
data-label-valid-feedback labels.validFeedback string Ok The text which is displayed below the Material Select when the validate option is enabled and the select is valid
data-label-invalid-feedback labels.invalidFeedback string Incorrect value The text which is displayed below the Material Select when the validate option is enabled and the select is invalid
data-label-no-search-results labels.noSearchResults string No results The text which is displayed in the Searchable Select when there are no results
data-label-keyboard-active-class keyboardActiveClass string heavy-rain-gradient The class which is added to the options selected by the arrow keys (using keyboard)
data-placeholder placeholder string null The placeholder text which is displayed on the select if no value selected yet
data-visible-options visibleOptions number 5 The maximum number of options which are visible in the Material Select dropdown without scrolling. If set to -1, the limit is off
data-max-selected-options maxSelectedOptions number 5 The maximum number of comma-separated list of options displayed on the Multiselect. If a user selects more options than that value, the X options selected text will be displayed instead. If set to -1, the limit is off