Wrap Wrap is a layout component that adds a defined space between its children. It
'wraps' its children automatically if there isn't enough space to fit any child.
Think of it as a smarter flex-wrap
with spacing
support. It works really
well with things like dialog buttons, tags, and chips.
import { Wrap , WrapItem } from "@chakra-ui/react"
Wrap : Wrap composes the Box
component and renders a <ul>
tagWrapItem : WrapItem composes the Box
component and renders the HTML
<li>
tagIn the example below, you see that the last Box
wrapped to the next line.
< Wrap >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " red.200 " >
Box 1
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " green.200 " >
Box 2
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " tomato " >
Box 3
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blue.200 " >
Box 4
</ Center >
</ WrapItem >
</ Wrap >
copy Editable Example
Pass the spacing
prop to apply consistent spacing between each child, even if
it wraps.
Pro Tip: You can pass responsive values for the spacing.
Box 1
Box 2
Box 3
Box 4
Box 5
< Wrap spacing = " 30px " >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " red.200 " >
Box 1
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " green.200 " >
Box 2
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " tomato " >
Box 3
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blue.200 " >
Box 4
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blackAlpha.500 " >
Box 5
</ Center >
</ WrapItem >
</ Wrap >
copy Editable Example
Pass the align
prop to change the alignment of the child along the main axis.
Box 1
Box 2
Box 3
Box 4
Box 5
< Wrap spacing = " 30px " align = " center " >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " red.200 " >
Box 1
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 40px " bg = " green.200 " >
Box 2
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 120px " h = " 80px " bg = " tomato " >
Box 3
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 40px " bg = " blue.200 " >
Box 4
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blackAlpha.500 " >
Box 5
</ Center >
</ WrapItem >
</ Wrap >
copy Editable Example
Pass the justify
prop to change the alignment of the child along the cross
axis.
Box 1
Box 2
Box 3
Box 4
Box 5
< Wrap spacing = " 30px " justify = " center " >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " red.200 " >
Box 1
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " green.200 " >
Box 2
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 120px " h = " 80px " bg = " tomato " >
Box 3
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blue.200 " >
Box 4
</ Center >
</ WrapItem >
< WrapItem >
< Center w = " 180px " h = " 80px " bg = " blackAlpha.500 " >
Box 5
</ Center >
</ WrapItem >
</ Wrap >
copy Editable Example
Wrap extends Box
, so you can pass all Box
props in addition to these:
Name Type Description Default align SystemProps["alignItems"]
The `align-items` value (for main axis alignment) - css Interpolation<{}>
The emotion's css style object - direction SystemProps["flexDirection"]
The `flex-direction` value - justify SystemProps["justifyContent"]
The `justify-content` value (for cross-axis alignment) - spacing SystemProps["margin"]
The space between the each child (even if it wraps) -
WrapItem composes the Box component.