Checkbox

Checkbox component is used in forms when a user needs to select multiple values from several options.

    Theme source

Import#

import { Checkbox, CheckboxGroup } from '@chakra-ui/react'

Usage#

<Checkbox defaultChecked>Checkbox</Checkbox>

Disabled Checkbox#

<Stack spacing={5} direction="row">
<Checkbox isDisabled>Checkbox</Checkbox>
<Checkbox isDisabled defaultChecked>
Checkbox
</Checkbox>
</Stack>

Checkbox with custom color#

You can override the color scheme of the Checkbox to any color key specified in theme.colors.

<Stack spacing={5} direction="row">
<Checkbox colorScheme="red" defaultChecked>
Checkbox
</Checkbox>
<Checkbox colorScheme="green" defaultChecked>
Checkbox
</Checkbox>
</Stack>

Checkbox sizes#

Pass the size prop to change the size of the Checkbox. Values can be either sm, md or lg.

<Stack spacing={[1, 5]} direction={['column', 'row']}>
<Checkbox size="sm" colorScheme="red">
Checkbox
</Checkbox>
<Checkbox size="md" colorScheme="green" defaultChecked>
Checkbox
</Checkbox>
<Checkbox size="lg" colorScheme="orange" defaultChecked>
Checkbox
</Checkbox>
</Stack>

Invalid Checkbox#

<Checkbox isInvalid>Checkbox</Checkbox>

Changing the spacing#

We added the spacing prop to customize the spacing between the Checkbox and label text.

<Checkbox spacing="1rem">Option</Checkbox>

Changing the icon color and size#

You can customize the color and size of the check icon by passing the iconColor and iconSize prop.

<Checkbox iconColor="blue.400" iconSize="1rem">
Option
</Checkbox>

Indeterminate#

function IndeterminateExample() {
const [checkedItems, setCheckedItems] = React.useState([false, false])
const allChecked = checkedItems.every(Boolean)
const isIndeterminate = checkedItems.some(Boolean) && !allChecked
return (
<>
<Checkbox
isChecked={allChecked}
isIndeterminate={isIndeterminate}
onChange={e => setCheckedItems([e.target.checked, e.target.checked])}
>
Parent Checkbox
</Checkbox>
<Stack pl={6} mt={1} spacing={1}>
<Checkbox isChecked={checkedItems[0]} onChange={e => setCheckedItems([e.target.checked, checkedItems[1]])}>
Child Checkbox 1
</Checkbox>
<Checkbox isChecked={checkedItems[1]} onChange={e => setCheckedItems([checkedItems[0], e.target.checked])}>
Child Checkbox 2
</Checkbox>
</Stack>
</>
)
}

Icon#

/**
* 1. Create a custom icon that accepts 2 props: `isIndeterminate` and `isChecked`
*/
function CustomIcon(props) {
const { isIndeterminate, isChecked, ...rest } = props
const d = isIndeterminate
? 'M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z'
: 'M0,12a1.5,1.5,0,0,0,1.5,1.5h8.75a.25.25,0,0,1,.25.25V22.5a1.5,1.5,0,0,0,3,0V13.75a.25.25,0,0,1,.25-.25H22.5a1.5,1.5,0,0,0,0-3H13.75a.25.25,0,0,1-.25-.25V1.5a1.5,1.5,0,0,0-3,0v8.75a.25.25,0,0,1-.25.25H1.5A1.5,1.5,0,0,0,0,12Z'
return (
<Icon viewBox="0 0 24 24" {...rest}>
<path fill="currentColor" d={d} />
</Icon>
)
}
function CustomCheckbox() {
return (
<Checkbox icon={<CustomIcon />} colorScheme="cyan">
Hello world
</Checkbox>
)
}
render(<CustomCheckbox />)

CheckboxGroup#

Chakra exports a CheckboxGroup component to help manage the checked state of its children Checkbox components and conveniently pass a few shared style props to each. See the props table at the bottom of this page for a list of the shared styling props.

<CheckboxGroup colorScheme="green" defaultValue={['naruto', 'kakashi']}>
<Stack spacing={[1, 5]} direction={['column', 'row']}>
<Checkbox value="naruto">Naruto</Checkbox>
<Checkbox value="sasuke">Sasuke</Checkbox>
<Checkbox value="kakashi">Kakashi</Checkbox>
</Stack>
</CheckboxGroup>

Hooks#

The useCheckbox hook is exported with state and focus management logic for use in creating tailor-made checkbox component for your application. Read more about the useCheckbox hook here.

The useCheckboxGroup hook is exported with state management logic for use in creating tailor-made checkbox group component for your application. Read more about the useCheckboxGroup hook here.

Edit this page on GitHub