Shorthand for alignItems
style prop
Stack
Stack is a layout component that makes it easy to stack elements together and apply a space between them. It uses a modified version of the CSS lobotomized owl selector to add spacing between its children.
Import#
import { Stack, HStack, VStack } from '@chakra-ui/react'
- Stack: Used to add spacing between elements in the horizontal or vertical direction. It supports responsive values.
- HStack: Used to add spacing between elements in horizontal direction, and centers them.
- VStack: Used to add spacing between elements in vertical direction only, and centers them.
Usage#
To stack elements in horizontal or vertical direction only, use the HStack
or
VStack
components. You can also use the Stack
component as well and pass the
direction
prop.
<HStack spacing='24px'><Box w='40px' h='40px' bg='yellow.200'>1</Box><Box w='40px' h='40px' bg='tomato'>2</Box><Box w='40px' h='40px' bg='pink.100'>3</Box></HStack>
Responsive direction#
You can pass responsive values to the Stack
component to change stack
direction and/or spacing between elements.
<Stack direction={['column', 'row']} spacing='24px'><Box w='40px' h='40px' bg='yellow.200'>1</Box><Box w='40px' h='40px' bg='tomato'>2</Box><Box w='40px' h='40px' bg='pink.100'>3</Box></Stack>
Adding dividers#
In some scenarios, you may want to add dividers between stacked elements. Pass
the divider
prop and set its value to the StackDivider
or any custom React
element.
<VStackdivider={<StackDivider borderColor='gray.200' />}spacing={4}align='stretch'><Box h='40px' bg='yellow.200'>1</Box><Box h='40px' bg='tomato'>2</Box><Box h='40px' bg='pink.100'>3</Box></VStack>
Example#
function Feature({ title, desc, ...rest }) {return (<Box p={5} shadow='md' borderWidth='1px' {...rest}><Heading fontSize='xl'>{title}</Heading><Text mt={4}>{desc}</Text></Box>)}function StackEx() {return (<Stack spacing={8}><Featuretitle='Plan Money'desc='The future can be even brighter but a goal without a plan is just a wish'/><Featuretitle='Save Money'desc='You deserve good things. With a whooping 10-15% interest rate per annum, grow your savings on your own terms with our completely automated process'/></Stack>)}render(<StackEx />)
Stack items horizontally#
Pass the direction
and set it to row
. Optionally, you can use align
and
justify
to adjust the alignment and distribution of the items.
function Feature({ title, desc, ...rest }) {return (<Boxp={5}shadow='md'borderWidth='1px'flex='1'borderRadius='md'{...rest}><Heading fontSize='xl'>{title}</Heading><Text mt={4}>{desc}</Text></Box>)}function StackEx() {return (<HStack spacing={8}><Featuretitle='Plan Money'desc='The future can be even brighter but a goal without a plan is just a wish'/><Featuretitle='Save Money'desc='You deserve good things. With a whooping 10-15% interest rate per annum, grow your savings.'/></HStack>)}render(<StackEx />)
Notes on Stack vs Flex#
Stack's primary use case is to lay items out and control the spacing between
each item. If you have a more complicated use case, such as changing the margin
on the last child, you can combine Stack
and Flex
and use
justify-content: space-between
for more control of the layout.
Props#
align
align
SystemProps["alignItems"]
direction
direction
The direction to stack the items.
StackDirection
divider
divider
If true
, each stack item will show a divider
React.ReactElement
isInline
isInline
If true
the items will be stacked horizontally.
boolean
justify
justify
Shorthand for justifyContent
style prop
SystemProps["justifyContent"]
shouldWrapChildren
shouldWrapChildren
If true
, the children will be wrapped in a Box
with
`display: inline-block`, and the Box
will take the spacing props
boolean
spacing
spacing
The space between each stack item
SystemProps["margin"]
wrap
wrap
Shorthand for flexWrap
style prop
SystemProps["flexWrap"]