Card deck

React Card Deck

Responsive Card Deck built with Bootstrap 5, React 18 and Material Design 2.0. Bootstrap card-deck with multiple rows and standard breakpoints.

Card layout

In addition to styling the content within cards, Bootstrap includes a few options for laying out series of cards.

Card groups

Use card groups to render cards as a single, attached element with equal width and height columns. Card groups start off stacked and use display: flex; to become attached with uniform dimensions starting at the sm breakpoint.

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

Last updated 3 mins ago

...
Card title

This card has supporting text below as a natural lead-in to additional content.

Last updated 3 mins ago

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

Last updated 3 mins ago

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBCardGroup
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBCardGroup>
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/041.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content. This
                        content is a little bit longer.
                      </MDBCardText>
                      <MDBCardText>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardText>
                    </MDBCardBody>
                  </MDBCard>
  
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/042.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content.
                      </MDBCardText>
                      <MDBCardText>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardText>
                    </MDBCardBody>
                  </MDBCard>
  
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/043.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content. This
                        card has even longer content than the first to show that equal height action.
                      </MDBCardText>
                      <MDBCardText>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardText>
                    </MDBCardBody>
                  </MDBCard>
                </MDBCardGroup>
              );
            }
     
        
    

When using card groups with footers, their content will automatically line up.

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This card has supporting text below as a natural lead-in to additional content.

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBCardFooter,
              MDBCardGroup
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBCardGroup>
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/041.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content. This
                        content is a little bit longer.
                      </MDBCardText>
                    </MDBCardBody>
                    <MDBCardFooter>
                      <small className='text-muted'>Last updated 3 mins ago</small>
                    </MDBCardFooter>
                  </MDBCard>
  
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/042.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content.
                      </MDBCardText>
                    </MDBCardBody>
                    <MDBCardFooter>
                      <small className='text-muted'>Last updated 3 mins ago</small>
                    </MDBCardFooter>
                  </MDBCard>
  
                  <MDBCard>
                    <MDBCardImage src='https://mdbootstrap.com/img/new/standard/city/043.webp' alt='...' position='top' />
                    <MDBCardBody>
                      <MDBCardTitle>Card title</MDBCardTitle>
                      <MDBCardText>
                        This is a wider card with supporting text below as a natural lead-in to additional content. This
                        card has even longer content than the first to show that equal height action.
                      </MDBCardText>
                    </MDBCardBody>
                    <MDBCardFooter>
                      <small className='text-muted'>Last updated 3 mins ago</small>
                    </MDBCardFooter>
                  </MDBCard>
                </MDBCardGroup>
              );
            }
     
        
    

Grid cards

Use the Bootstrap grid system and its .row-cols classes to control how many grid columns (wrapped around your cards) you show per row. For example, here’s .row-cols-1 laying out the cards on one column, and .row-cols-md-2 splitting four cards to equal width across multiple rows, from the medium breakpoint up.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBRow,
              MDBCol
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBRow className='row-cols-1 row-cols-md-2 g-4'>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/041.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/042.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/043.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/044.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                </MDBRow>
              );
            }
     
        
    

Change it to .row-cols-3 and you’ll see the fourth card wrap.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBRow,
              MDBCol
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBRow className='row-cols-1 row-cols-md-3 g-4'>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/041.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/042.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/043.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/044.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                </MDBRow>
              );
            }
     
        
    

When you need equal height, add .h-100 to the cards. If you want equal heights by default, you can set $card-height: 100% in Sass.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This is a short card.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content.

...
Card title

This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBRow,
              MDBCol
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBRow className='row-cols-1 row-cols-md-3 g-4'>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/041.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/042.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>This is a short card.</MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/043.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/044.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                    </MDBCard>
                  </MDBCol>
                </MDBRow>
              );
            }
     
        
    

Just like with card groups, card footers will automatically line up.

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.

...
Card title

This card has supporting text below as a natural lead-in to additional content.

...
Card title

This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.

        
            
            import React from 'react';
            import {
              MDBCard,
              MDBCardImage,
              MDBCardBody,
              MDBCardTitle,
              MDBCardText,
              MDBCardFooter,
              MDBRow,
              MDBCol
            } from 'mdb-react-ui-kit';
    
            export default function App() {
              return (
                <MDBRow className='row-cols-1 row-cols-md-3 g-4'>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/044.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a longer card with supporting text below as a natural lead-in to additional content.
                          This content is a little bit longer.
                        </MDBCardText>
                      </MDBCardBody>
                      <MDBCardFooter>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardFooter>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/043.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This card has supporting text below as a natural lead-in to additional content.
                        </MDBCardText>
                      </MDBCardBody>
                      <MDBCardFooter>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardFooter>
                    </MDBCard>
                  </MDBCol>
                  <MDBCol>
                    <MDBCard className='h-100'>
                      <MDBCardImage
                        src='https://mdbootstrap.com/img/new/standard/city/042.webp'
                        alt='...'
                        position='top'
                      />
                      <MDBCardBody>
                        <MDBCardTitle>Card title</MDBCardTitle>
                        <MDBCardText>
                          This is a wider card with supporting text below as a natural lead-in to additional content. This
                          card has even longer content than the first to show that equal height action.
                        </MDBCardText>
                      </MDBCardBody>
                      <MDBCardFooter>
                        <small className='text-muted'>Last updated 3 mins ago</small>
                      </MDBCardFooter>
                    </MDBCard>
                  </MDBCol>
                </MDBRow>
              );
            }