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.
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.
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:
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:
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;
}