Stacks

React Bootstrap 5 Stacks

Stacks offer a shortcut for applying a number of flexbox properties to quickly and easily create layouts in Bootstrap. All credit for the concept and implementation goes to the open source Pylon project.

Heads up! Support for gap utilities with flexbox was recently added to Safari, so consider verifying your intended browser support. Grid layout should have no issues. Read more.


Vertical

Use .vstack to create vertical layouts. Stacked items are full-width by default. Use .gap-* utilities to add space between items.

First item
Second item
Third item
        
            
            import React from 'react';

            export default function App() { 
              return (
                <div className="p-4">
                  <div className="vstack gap-3">
                    <div className="bg-light border">First item</div>
                    <div className="bg-light border">Second item</div>
                    <div className="bg-light border">Third item</div>
                  </div>
                </div>
              ); 
            }
          
        
    

Horizontal

Use .hstack for horizontal layouts. Stacked items are vertically centered by default and only take up their necessary width. Use .gap-* utilities to add space between items.

First item
Second item
Third item
        
            
          import React from 'react'; 

          export default function App() { 
            return (
              <div className="p-4">
                <div className="hstack gap-3">
                  <div className="bg-light border">First item</div>
                  <div className="bg-light border">Second item</div>
                  <div className="bg-light border">Third item</div>
                </div>
              </div>
            ); 
          }
          
        
    

Using horizontal margin utilities like .ms-auto as spacers:

First item
Second item
Third item
        
            
          import React from 'react'; 
          
          export default function App() { 
            return (
              <div className="p-4">
                <div className="hstack gap-3">
                  <div className="bg-light border">First item</div>
                  <div className="bg-light border ms-auto">Second item</div>
                  <div className="bg-light border">Third item</div>
                </div>
              </div>
            ); 
          }
          
        
    

And with vertical rules:

First item
Second item
Third item
        
            
          import React from 'react'; 
          
          export default function App() { 
            return (
              <div className="p-4">
                <div className="hstack gap-3">
                  <div className="bg-light border">First item</div>
                  <div className="bg-light border ms-auto">Second item</div>
                  <div className="vr"></div>
                  <div className="bg-light border">Third item</div>
                </div>
              </div>
            ); 
          }
          
        
    

Examples

Use .vstack to stack buttons and other elements:

        
            
          import React from 'react'; 
          
          export default function App() { 
            return (
              <div className="p-4">
                <div className="vstack gap-2 col-md-5 mx-auto">
                  <button type="button" className="btn btn-secondary">
                    Save changes
                  </button>
                  <button type="button" className="btn btn-outline-secondary">
                    Cancel
                  </button>
                </div>
              </div>
            ); 
          }
          
        
    

Create an inline form with .hstack:

        
            
          import React from 'react'; 
          
          export default function App() { 
            return (
              <div className="p-4">
                <div className="hstack gap-3">
                  <input
                    className="form-control me-auto"
                    type="text"
                    placeholder="Add your item here..."
                  />
                  <button type="button" className="btn btn-secondary">
                    Submit
                  </button>
                  <div className="vr"></div>
                  <button type="button" className="btn btn-outline-danger">
                    Reset
                  </button>
                </div>
              </div>
            ); 
          }
          
        
    

Sass

        
            
          .hstack {
            display: flex;
            flex-direction: row;
            align-items: center;
            align-self: stretch;
          }

          .vstack {
            display: flex;
            flex: 1 1 auto;
            flex-direction: column;
            align-self: stretch;
          }