The flex alignment of the card
Card
Card is a flexible component used to group and display content in a clear and concise format.
Import#
Chakra UI exports 4 components to help you create a Card.
import { Card, CardHeader, CardBody, CardFooter } from '@chakra-ui/react'
- Card: The parent wrapper that provides context for its children.
- CardHeader: The wrapper that contains a card's header.
- CardBody: The wrapper that houses the card's main content.
- CardFooter: The footer that houses the card actions.
Usage#
Basic Card#
Put in some content in the CardBody to get a basic card.
<Card><CardBody><Text>View a summary of all your customers over the last month.</Text></CardBody></Card>
Card with Divider#
There are instances when you have multiple content to display in the CardBody
and you may want to add dividers between them.
<Card><CardHeader><Heading size='md'>Client Report</Heading></CardHeader><CardBody><Stack divider={<StackDivider />} spacing='4'><Box><Heading size='xs' textTransform='uppercase'>Summary</Heading><Text pt='2' fontSize='sm'>View a summary of all your clients over the last month.</Text></Box><Box><Heading size='xs' textTransform='uppercase'>Overview</Heading><Text pt='2' fontSize='sm'>Check out the overview of your clients.</Text></Box><Box><Heading size='xs' textTransform='uppercase'>Analysis</Heading><Text pt='2' fontSize='sm'>See a detailed analysis of all your business clients.</Text></Box></Stack></CardBody></Card>
Card with Image#
Place the content within the CardBody to get a nice padding around.
<Card maxW='sm'><CardBody><Imagesrc='https://images.unsplash.com/photo-1555041469-a586c61ea9bc?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1770&q=80'alt='Green double couch with wooden legs'borderRadius='lg'/><Stack mt='6' spacing='3'><Heading size='md'>Living room Sofa</Heading><Text>This sofa is perfect for modern tropical spaces, baroque inspiredspaces, earthy toned spaces and for people who love a chic design with asprinkle of vintage design.</Text><Text color='blue.600' fontSize='2xl'>$450</Text></Stack></CardBody><Divider /><CardFooter><ButtonGroup spacing='2'><Button variant='solid' colorScheme='blue'>Buy now</Button><Button variant='ghost' colorScheme='blue'>Add to cart</Button></ButtonGroup></CardFooter></Card>
Horizontal Card#
The card component has display: flex by default. This means you make the
content in a horizontal direction by passing direction="row.
<Carddirection={{ base: 'column', sm: 'row' }}overflow='hidden'variant='outline'><ImageobjectFit='cover'maxW={{ base: '100%', sm: '200px' }}src='https://images.unsplash.com/photo-1667489022797-ab608913feeb?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxlZGl0b3JpYWwtZmVlZHw5fHx8ZW58MHx8fHw%3D&auto=format&fit=crop&w=800&q=60'alt='Caffe Latte'/><Stack><CardBody><Heading size='md'>The perfect latte</Heading><Text py='2'>Caffè latte is a coffee beverage of Italian origin made with espressoand steamed milk.</Text></CardBody><CardFooter><Button variant='solid' colorScheme='blue'>Buy Latte</Button></CardFooter></Stack></Card>
Advanced Composition#
You can compose Card with other components like Avatar, Icon Button and
more for a more advanced layout.
<Card maxW='md'><CardHeader><Flex spacing='4'><Flex flex='1' gap='4' alignItems='center' flexWrap='wrap'><Avatar name='Segun Adebayo' src='https://bit.ly/sage-adebayo' /><Box><Heading size='sm'>Segun Adebayo</Heading><Text>Creator, Chakra UI</Text></Box></Flex><IconButtonvariant='ghost'colorScheme='gray'aria-label='See menu'icon={<BsThreeDotsVertical />}/></Flex></CardHeader><CardBody><Text>With Chakra UI, I wanted to sync the speed of development with the speedof design. I wanted the developer to be just as excited as the designer tocreate a screen.</Text></CardBody><ImageobjectFit='cover'src='https://images.unsplash.com/photo-1531403009284-440f080d1e12?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1770&q=80'alt='Chakra UI'/><CardFooterjustify='space-between'flexWrap='wrap'sx={{'& > button': {minW: '136px',},}}><Button flex='1' variant='ghost' leftIcon={<BiLike />}>Like</Button><Button flex='1' variant='ghost' leftIcon={<BiChat />}>Comment</Button><Button flex='1' variant='ghost' leftIcon={<BiShare />}>Share</Button></CardFooter></Card>
Multiple cards#
Render multiple cards to display content by using the SimpleGrid or your
preferred layout method.
<SimpleGrid spacing={4} templateColumns='repeat(auto-fill, minmax(200px, 1fr))'><Card><CardHeader><Heading size='md'> Customer dashboard</Heading></CardHeader><CardBody><Text>View a summary of all your customers over the last month.</Text></CardBody><CardFooter><Button>View here</Button></CardFooter></Card><Card><CardHeader><Heading size='md'> Customer dashboard</Heading></CardHeader><CardBody><Text>View a summary of all your customers over the last month.</Text></CardBody><CardFooter><Button>View here</Button></CardFooter></Card><Card><CardHeader><Heading size='md'> Customer dashboard</Heading></CardHeader><CardBody><Text>View a summary of all your customers over the last month.</Text></CardBody><CardFooter><Button>View here</Button></CardFooter></Card></SimpleGrid>
Centering content in a card#
Card comes with an inherent display="flex" on it, so if you'd like to center
the content of your card, you can do this easily by passing align="center" to
the Card.
<Card align='center'><CardHeader><Heading size='md'> Customer dashboard</Heading></CardHeader><CardBody><Text>View a summary of all your customers over the last month.</Text></CardBody><CardFooter><Button colorScheme='blue'>View here</Button></CardFooter></Card>
Variants#
Chakra UI provides 4 card variants - elevated, outline, filled, and
unstyled. Use the variant prop to change the style of your card. If the
variant prop is not passed, the default variant, elevated is used.
<Stack spacing='4'>{['elevated', 'outline', 'filled', 'unstyled'].map((variant) => (<Card key={variant} variant={variant}><CardHeader><Heading size='md'> {variant}</Heading></CardHeader><CardBody><Text>variant = {variant}</Text></CardBody></Card>))}</Stack>
Sizes#
Chakra UI provides 3 Card sizes. Use the size prop to change the size and set
the value to sm, md, or lg.
<Stack spacing='4'>{['sm', 'md', 'lg'].map((size) => (<Card key={size} size={size}><CardHeader><Heading size='md'> {size}</Heading></CardHeader><CardBody><Text>size = {size}</Text></CardBody></Card>))}</Stack>
Props#
align
alignResponsiveValue<AlignItems>colorScheme
colorSchemeColor Schemes for Card are not implemented in the default theme. You can extend the theme to implement them.
stringdirection
directionThe flex direction of the card
ResponsiveValue<FlexDirection>justify
justifyThe flex distribution of the card
ResponsiveValue<JustifyContent>size
size"sm" | "md" | "lg""md"variant
variant"elevated" | "outline" | "filled" | "unstyled""elevated"Work in Progress