Flex
One of the key advantages of using the Flex component is its extensive set of shorthand props, which simplify the process of applying common flexbox styles.
flexDirection
: (shorthand: direction): The flexDirection prop determines the direction of the flex items within the Flex container. It accepts values like "row", "column", "row-reverse", and "column-reverse". For example, setting flexDirection="row" aligns the flex items horizontally in a row, while flexDirection="column" stacks them vertically.flexWrap
: (shorthand: wrap): The flexWrap prop controls the wrapping behavior of flex items when they exceed the width of the Flex container. It accepts values like "nowrap", "wrap", and "wrap-reverse". By default, flex items don't wrap onto multiple lines ("nowrap"), but setting flexWrap="wrap" allows them to wrap to the next line when necessary.flexBasis
: (shorthand: basis): The flexBasis prop sets the initial size of flex items along the main axis before any available space is distributed. It specifies the default width (for flexDirection="row") or height (for flexDirection="column") of the flex items. The value can be a fixed pixel value (e.g., flexBasis="200px") or a relative value (e.g., flexBasis="50%").flexGrow
: (shorthand: grow): The flexGrow prop determines the ability of flex items to grow and occupy any available space along the main axis. It accepts a numeric value that represents the relative proportion of available space that each flex item should take up. For example, if one flex item has flexGrow=1 and another has flexGrow=2, the second item will take up twice as much space as the first item.flexShrink
: (shorthand: shrink): The flexShrink prop controls the ability of flex items to shrink when the Flex container's width is insufficient to accommodate all the items. It accepts a numeric value that determines the relative shrinkage factor of each flex item. By default, flex items have flexShrink=1, meaning they will shrink proportionally. Setting flexShrink=0 prevents the item from shrinking.alignItems
: (shorthand: align): The alignItems prop aligns the flex items along the cross-axis (perpendicular to the main axis). It accepts values like "flex-start", "flex-end", "center", "baseline", and "stretch". For example, settingalignItems="center" centers the flex items vertically (if flexDirection="row") or horizontally (if flexDirection="column").justifyContent
: (shorthand: justify): The justifyContent prop controls the alignment of flex items along the main axis. It accepts values like "flex-start", "flex-end", "center", "space-between", "space-around", and "space-evenly". For example, setting justifyContent="space-between" evenly distributes the flex items along the main axis, leaving equal space between each item.While you can use the verbose props, Chakra UI provides shorthand equivalents for these flex styles, saving you time and reducing code complexity. The Flex component, along with its shorthand props, empowers you to create dynamic and responsive layouts without sacrificing ease of use.
⦾ Spacer
: The Spacer component, imported as Spacer, complements the Flex component by creating adjustable empty space within a Flex container. It enables you to fine-tune the spacing between child elements. By utilizing the Spacer component, you can easily create responsive and evenly spaced layouts. The Spacer component renders as a div and can be used to add space between Flex child elements without needing to add explicit margins or padding.
These components work seamlessly together. By combining the Flex and Spacer components, you can create stackable layouts, control spacing between elements, and build responsive designs. The Flex component provides the structure and flexibility, while the Spacer component allows for precise control over the spacing within the Flex container.
These components can be imported as follows:
Examples
Flex Basics
Parent Container Values:
height=
flexDirection=
justifyContent=
alignItems=
Code
Flex Grow and Shrink
The component consists of a Flex container with three child Square components. Each child square represents a flex item and is accompanied by two select menus: one for flexGrow and one for flexShrink. Users can select different values for these properties for each child square using the select menus.
Additionally, the component provides options to customize the width of the parent Flex container using a select menu. This allows users to observe how the flex items respond to changes in the size of the parent container.
(parent) width=
grow=
shrink=
grow=
shrink=
grow=
shrink=
Code
FlexWrap
The flex-wrap property provides three possible values:
nowrap
: This is the default value where items do not wrap and try to fit within a single line, potentially causing overflow.wrap
: Items wrap onto multiple lines if necessary to fit within the container. The wrapping occurs in the direction specified by the flex-direction property.wrap-reverse
: Items wrap onto multiple lines in the opposite direction of the flex-direction property. This means they wrap from bottom to top or right to left.In this example, you can explore the flexWrap property of the Chakra Flex component and its impact on the layout of flex items. You can change the flexWrap value using the select input and observe how the flex items wrap or remain on a single line.
flexWrap=
flexDirection=
Code
FlexBasis
By default, the flex-basis value is set to auto, which means that the size of the item is determined by its content or the width property if specified. However, you can explicitly set the flex-basis value to a specific length or percentage to control the initial size of the flex items.
In the example below, you can interactively change the flexBasis value of each flex item using the w (width) property in Chakra UI. The flex items are arranged in a flex container with flex-wrap: wrap to allow items to wrap onto multiple lines when necessary. You can observe how changing the flex-basis value affects the size and layout of the flex items.
Box 1: flexBasis=
Box 2: flexBasis=
Box 3: flexBasis=
Box 4: flexBasis=
Box 5: flexBasis=
Box 6: flexBasis=
Code
Spacers
In general, the Flex component serves as the container for the layout, allowing its child elements to be arranged horizontally or vertically based on the specified flexDirection. It provides a flexible container that automatically adjusts the size and position of its children based on the available space.
On the other hand, the Spacer component is used to create empty space within the flex container. It acts as a flexible and expandable element that fills the remaining space between its adjacent siblings. The Spacer component automatically adjusts its size to distribute the available space evenly among the other child elements.
By combining the Flex and Spacer components, you can achieve various layouts with flexible spacing between the child elements. The Spacer component expands or contracts based on the available space, pushing the other elements apart or pulling them closer together, creating a responsive and adaptive design.
For example, if you have multiple boxes within a Flex container and place Spacer components between them, the spacers will distribute the available space evenly, creating equal spacing between the boxes. As the container's width or height changes, the spacers adjust their size to maintain the consistent spacing between the boxes.
Row
Column
Code
Comparison: Flex, Grid, and Stack
Did you know?
Creative Idea No. 1
Code
Creative Idea No. 2
Code
Creative Idea No. 3
Code
copyright © 2023 IHeartComponents | evanmarie.com
created with love by the I♥️Components team using
Special thanks to Stefan Bohacek / Generative Placeholders.