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.
Responsive direction#
You can pass responsive values to the Stack
component to change stack
direction and/or spacing between elements.
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.
Example#
Plan Money
The future can be even brighter but a goal without a plan is just a wish
Save Money
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 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.
Plan Money
The future can be even brighter but a goal without a plan is just a wish
Save Money
You deserve good things. With a whooping 10-15% interest rate per annum, grow your savings.
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#
Name | Type | Description | Default |
---|---|---|---|
align | SystemProps["alignItems"] | Shorthand for `alignItems` style prop | - |
direction | "column" | "column-reverse" | "row" | "row-reverse" | ResponsiveArray<"column" | "column-reverse" | "row" | "row-reverse"> | ResponsiveObject<"column" | "column-reverse" | "row" | "row-reverse"> | The direction to stack the items. | - |
divider | React.ReactElement | If `true`, each stack item will show a divider | - |
isInline | boolean | If `true` the items will be stacked horizontally. | - |
justify | SystemProps["justifyContent"] | Shorthand for `justifyContent` style prop | - |
shouldWrapChildren | boolean | If `true`, the children will be wrapped in a `Box` with `display: inline-block`, and the `Box` will take the spacing props | - |
spacing | SystemProps["margin"] | The space between each stack item | - |
wrap | SystemProps["flexWrap"] | Shorthand for `flexWrap` style prop | - |