What is @chakra-ui/layout?
@chakra-ui/layout is a part of the Chakra UI library that provides a set of layout components to help you build responsive and accessible web applications with ease. It includes components like Box, Flex, Grid, Stack, and more, which are designed to simplify the process of creating complex layouts.
What are @chakra-ui/layout's main functionalities?
Box
The Box component is a versatile container element that can be used to wrap other elements and apply styles to them. It supports various style props for layout, spacing, color, and more.
<Box w='100%' p={4} color='white' bg='blue.500'>This is a Box</Box>
Flex
The Flex component is a flexbox container that allows you to create flexible and responsive layouts. It provides props for controlling the alignment, justification, and direction of its children.
<Flex justify='center' align='center' h='100vh'>Centered Content</Flex>
Grid
The Grid component is a CSS grid container that helps you create grid-based layouts. It supports various props for defining the grid template, gap, and alignment of grid items.
<Grid templateColumns='repeat(3, 1fr)' gap={6}><Box bg='tomato' height='80px'></Box><Box bg='tomato' height='80px'></Box><Box bg='tomato' height='80px'></Box></Grid>
Stack
The Stack component is a layout component that arranges its children in a vertical or horizontal stack with a specified spacing between them. It simplifies the process of creating stacked layouts.
<Stack spacing={4}><Box bg='yellow.200'>Item 1</Box><Box bg='yellow.200'>Item 2</Box><Box bg='yellow.200'>Item 3</Box></Stack>
Other packages similar to @chakra-ui/layout
styled-components
styled-components is a popular library for writing CSS-in-JS. It allows you to create styled React components with tagged template literals. While it provides powerful styling capabilities, it does not include pre-built layout components like @chakra-ui/layout.
emotion
Emotion is another CSS-in-JS library that offers a flexible and performant way to style React components. Similar to styled-components, it focuses on styling rather than providing layout components out of the box.
rebass
Rebass is a library of highly composable, primitive UI components built with styled-system. It includes layout components like Box and Flex, similar to @chakra-ui/layout, but with a different API and design philosophy.
material-ui
Material-UI is a popular React UI framework that implements Google's Material Design. It includes a wide range of components, including layout components like Box, Grid, and Stack, similar to @chakra-ui/layout, but with a focus on Material Design principles.
@chakra-ui/layout
A set of layout primitives that make it super easy to manage page and
components.
Installation
yarn add @chakra-ui/layout
npm i @chakra-ui/layout
Import Components
import { Box, Flex, Stack, Grid, Wrap, AspectRatio } from "@chakra-ui/layout"
Usage
Box is just a div
on steroids. It gives you the ability to pass style props
<Box color="tomato" _hover={{ bg: "red.500", color: "white" }}>
Welcome to Box
</Box>
Flex is just a Box
with display: flex
<Flex>
<Box flex="1">Box 1</Box>
<Box>Box 2</Box>
</Flex>
Stack is used to group elements and apply a spacing between them. It stacks its
children vertically by default.
<Stack spacing="20px">
<Box>Box 1</Box>
<Box>Box 2</Box>
</Stack>
AspectRatio is used to constrain its child to specific aspect ratio. It is
mostly used for embedding videos, images, and maps.
<AspectRatio ratio={16 / 9}>
<img src="./some-ig-story" alt="Instagram story" />
</AspectRatio>
Wrap is used to manage the distribution of child elements that are liable to
wrap. It is mostly used for button groups, tag group, badge group, and chips.
<AspectRatio ratio={16 / 9}>
<img src="./some-ig-story" alt="Instagram story" />
</AspectRatio>
Badge is used to render a badge. It can comes in different variants and color
schemes as defined in the theme.components.Badge
<Badge variant="solid" colorScheme="green">
Verified <FaCheck />
</Badge>
Center is used to vertically and horizontally center its child
<Center bg="blue.500" borderRadius="4px" boxSize="40px">
<FaPhoneIcon />
</Center>
Container is used to manage content areas on a website or blog. It center's
itself using margin-left: auto
and margin-right: auto
. It also applies a
default max-width of 60ch
(60 characters)
<Container>
<BlogContent />
</Container>
Spacer is a component that takes up the remaining space in a flex container. It
is mostly useful to manage space and wrapping in flex containers
<Flex>
<Box boxSize="40px" />
<Spacer />
<Box boxSize="40px" />
</Flex>