Chakra UI
02 / 02

Layout, Overlays & Feedback Components

Chakra UI: Layout, Overlays & Feedback Components

Layout: Stack, Flex & Grid

import { HStack, VStack, Grid, GridItem } from '@chakra-ui/react';

// One-dimensional flexbox layout -- most common layout pattern
<HStack spacing={4}>
  <Button>A</Button>
  <Button>B</Button>
</HStack>

<VStack spacing={2} align="stretch">
  <Text>First</Text>
  <Text>Second</Text>
</VStack>

// Two-dimensional CSS Grid -- rows AND columns simultaneously
<Grid templateColumns="repeat(3, 1fr)" gap={4}>
  <GridItem colSpan={2}>Main</GridItem>
  <GridItem>Sidebar</GridItem>
</Grid>

Overlays: useDisclosure + Modal

import { useDisclosure, Modal, ModalOverlay, ModalContent, ModalHeader, ModalBody, ModalCloseButton, Button } from '@chakra-ui/react';

function DeleteConfirmation() {
  const { isOpen, onOpen, onClose } = useDisclosure();

  return (
    <>
      <Button onClick={onOpen} colorScheme="red">Delete</Button>
      <Modal isOpen={isOpen} onClose={onClose}>
        <ModalOverlay />
        <ModalContent>
          <ModalHeader>Confirm delete</ModalHeader>
          <ModalCloseButton />
          <ModalBody>Are you sure?</ModalBody>
        </ModalContent>
      </Modal>
    </>
  );
}
// Accessibility (focus trapping, ARIA roles, keyboard nav) is
// handled by default -- no need to reimplement per component.

Transient Feedback: useToast

import { useToast } from '@chakra-ui/react';

function SaveButton() {
  const toast = useToast();

  const handleSave = async () => {
    await saveData();
    toast({
      title: 'Saved successfully',
      status: 'success',
      duration: 3000,
      isClosable: true,
    });
  };

  return <Button onClick={handleSave}>Save</Button>;
}

Why the Consistent Style-Prop API Matters

  • Nearly every component accepts the same core style props (p, m, bg, color, fontSize) -- learning it once transfers everywhere.

  • Powered by Emotion (v2) / Panda CSS (v3) under the hood -- style props resolve against the active theme's design tokens.

  • Trade-off vs. Tailwind + headless primitives: Chakra's pre-styled components speed up typical development; utility-CSS + headless gives more granular control at the cost of assembling more visual design yourself.

Keep your own version of these notes — editable, searchable, and organised by your stack.

Start free