Rate these docs

Masonry

Bootstrap masonry

Bootstrap masonry is a grid layout based on columns. Unlike other grid layouts, it doesn’t have fixed height rows. Basically, Masonry layout optimizes the use of space inside the web page by reducing any unnecessary gaps. Without this type of layout, certain restrictions are required to maintain the structure of layout.

Note: You find the SCSS code for the masonry layout in your package in the scss/addons/_directives.scss file. To use this code, please uncomment this line: // @import "addons/directives"; in the mdb.scss file in the package.


Basic layout

Display of half page intro.


        <div class="masonry-with-columns" id="masonry-with-columns">
          <div style="order: 0;">
            1
          </div>
          <div style="order: 1;">
            2
          </div>
          <div style="order: 2;">
            3
          </div>
          <div style="order: 0;">
            4
          </div>
          <div style="order: 1;">
            5
          </div>
          <div style="order: 2;">
            6
          </div>
          <div style="order: 0;">
            7
          </div>
          <div style="order: 1;">
            8
          </div>
          <div style="order: 2;">
            9
          </div>
          <div style="order: 0;">
            10
          </div>
          <div style="order: 1;">
            11
          </div>
          <div style="order: 2;">
            12
          </div>
          <div style="order: 0;">
            13
          </div>
          <div style="order: 1;">
            14
          </div>
          <div style="order: 2;">
            15
          </div>
        </div>

      

          // Within style tags in your html file
          body {
            margin: 0;
            padding: 1rem;
          }
          // SCSS
          // Masonry layout vertical
          .masonry-with-columns {
            display: flex;
            flex-direction: column;
            flex-wrap: wrap;
            max-height: 1000px;
            div {
              flex: 1 0 auto;
              background: #00997B;
              color: white;
              margin: 0 1rem 1rem 0;
              text-align: center;
              font-weight: 900;
              font-size: 2rem;
            } 
            @for $i from 1 through 36 { 
              div:nth-child(#{$i}) {
                $h: (random(400) + 100) + px;
                height: $h;
                line-height: $h;
              }
            }
          }

      


        const numCols = 3;
        const colHeights = Array(numCols).fill(0);
        const container = document.getElementById('masonry-with-columns');
        Array.from(container.children).forEach((child, i) => {
          const order = i % numCols;
          child.style.order = order;
          colHeights[order] += parseFloat(child.clientHeight);
        })
        container.style.height = Math.max(...colHeights) + 'px';

      

Horizontal option

Display of half page intro.


        <div class="masonry-with-columns-2" id="masonry-with-columns-2">
          <div>
            1
          </div>
          <div>
            2
          </div>
          <div>
            3
          </div>
          <div>
            4
          </div>
          <div>
            5
          </div>
          <div>
            6
          </div>
          <div>
            7
          </div>
          <div>
            8
          </div>
          <div>
            9
          </div>
          <div>
            10
          </div>
          <div>
            11
          </div>
          <div>
            12
          </div>
          <div>
            13
          </div>
          <div>
            14
          </div>
          <div>
            15
          </div>
        </div>

      

          // Within style tags in your html file
          body {
            margin: 0;
            padding: 1rem;
          }
          // SCSS
          // Masonry layout horizontal
          .masonry-with-columns-2 {
            display: flex;
            flex-wrap: wrap;
            div {
              height: 150px;
              line-height: 150px;
              background: #9B1B30;
              color: white;
              margin: 0 1rem 1rem 0;
              text-align: center;
              font-weight: 900;
              font-size: 2rem;
              flex: 1 0 auto;
            } 
            @for $i from 1 through 36 { 
              div:nth-child(#{$i}) {
                $h: (random(400) + 70) + px;
                width: $h;
              }
            }
          }

      

Flexbox option

Display of half page intro.


          <div class="masonry-with-flex">
            <div>
              1
            </div>
            <div>
              2
            </div>
            <div>
              3
            </div>
            <div>
              4
            </div>
            <div>
              5
            </div>
            <div>
              6
            </div>
            <div>
              7
            </div>
            <div>
              8
            </div>
            <div>
              9
            </div>
            <div>
              10
            </div>
            <div>
              11
            </div>
            <div>
              12
            </div>
            <div>
              13
            </div>
            <div>
              14
            </div>
            <div>
              15
            </div>
          </div>

      

          // Within style tags in your html file
          body {
            margin: 0;
            padding: 1rem;
          }
          // SCSS
          // Masonry layout flex
          .masonry-with-flex {
            display: flex;
            flex-direction: column;
            flex-wrap: wrap;
            max-height: 1000px;
            div {
              width: auto;
              background: #975A58;
              color: white;
              margin: 0 1rem 1rem 0;
              text-align: center;
              font-weight: 900;
              font-size: 2rem;
            } 
            @for $i from 1 through 36 { 
              div:nth-child(#{$i}) {
                $h: (random(400) + 100) + px;
                height: $h;
                line-height: $h;
              }
            }
          }

      

Note: We can help you build your project.
learn more

Getting started : download & setup


Download

All the components and features are part of MDBootstrap package.

MDBootstrap (Material Design for Bootstrap) is a free (MIT Licensed) framework combining Material Design and the newest Bootstrap 4.

Click the button below to go to Download Page, where you can download MDBootstrap package.

MDBootstrap Download MDBootstrap About

MDB Pro

Using components and features labeled as MDB Pro component requires MDB Pro package.

Click the button below to learn more about MDBbootstrap Pro package

MDBootstrap Pro

Tutorials

If you need additional help to start, use our "5 min Quick Start" or "Full tutorial" resources.

5 min Quick Start Full Tutorial

Compilation

To reduce a weight of MDBootstrap package, you can compile your own, custom package containing only components and features you need.

Map of dependencies of SCSS files in MDBootstrap:


    Legend:

    '-->' 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

    scss/
    |
    |-- 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:


    Legend:

    '-->' means 'required'

    All files require jQuery and bootstrap.js

    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
  

Compilation & Customization tutorial

If you need additional help to compile your custom package, use our Compilation & Customization tutorial

Compilation & Customization tutorial

Integrations with Angular, React or Vue

Apart from standard Bootstrap integration with jQuery, MDBootstrap provides integrations with Angular, React and Vue.

About MDB Angular About MDB React About MDB Vue