Theme
The theme object is where you define your application's color palette, type scale, font stacks, breakpoints, border-radius values, and more. Theming with Chakra UI is based on the Styled System Theme Specification
Colors#
Add a theme.colors object to provide colors for your project. By default these
colors can be referenced by the color, borderColor, and backgroundColor,
fill, stroke, styles.
We recommend adding a palette that goes from 50 - 900. Use tools like
Coolors or Palx to generate
these palettes.
// theme.js
export default {
colors: {
transparent: "transparent",
black: "#000",
white: "#fff",
gray: {
50: "#f7fafc",
// ...
900: "#1a202c",
},
// ...
},
};
By default, Chakra UI exposes a default theme object that follows the System UI Theme Specification.
Black & White#
Gray#
Cyan#
Vue#
Green#
Orange#
Red#
Yellow#
Indigo#
Pink#
Blue#
Breakpoints#
To configure the default breakpoints used in responsive array values, add a breakpoints array to your theme. These values will be used to generate mobile-first (i.e. min-width) media queries, which can then be used to apply responsive styles.
For example, you can write
<c-box :font-size="['14px', '16px']"/>to make the fontSize responsive.
// theme.js
export default {
breakpoints: ["30em", "48em", "62em", "80em"],
};
Spacing#
The space key allows you to customize the global spacing and sizing scale for
your project. By default these spacing values can be referenced by the padding,
margin, and top, left, right, bottom styles.
export default {
space: {
px: "1px",
"0": "0",
"1": "0.25rem",
"2": "0.5rem",
"3": "0.75rem",
"4": "1rem",
"5": "1.25rem",
"6": "1.5rem",
"8": "2rem",
"10": "2.5rem",
"12": "3rem",
"16": "4rem",
"20": "5rem",
"24": "6rem",
"32": "8rem",
"40": "10rem",
"48": "12rem",
"56": "14rem",
"64": "16rem",
},
};
By default, Chakra includes a comprehensive numeric spacing scale inspired by
Tailwind CSS. The values are proportional, so one spacing unit is equal to
0.25rem, which translates to 4px by default in common browsers.
Mental model: If you need a spacing of
40px, divide it by4. That'll give you10. Then use it in your component.
| Name | Space | Pixels | |
|---|---|---|---|
| 0 | 0 | 0px | |
| px | 1px | 1px | |
| 1 | 0.25rem | 4px | |
| 2 | 0.5rem | 8px | |
| 3 | 0.75rem | 12px | |
| 4 | 1rem | 16px | |
| 5 | 1.25rem | 20px | |
| 6 | 1.5rem | 24px | |
| 8 | 2rem | 32px | |
| 10 | 2.5rem | 40px | |
| 12 | 3rem | 48px | |
| 16 | 4rem | 64px | |
| 20 | 5rem | 80px | |
| 24 | 6rem | 96px | |
| 32 | 8rem | 128px | |
| 40 | 10rem | 160px | |
| 48 | 12rem | 192px | |
| 56 | 14rem | 224px | |
| 64 | 16rem | 256px |
Sizes#
The sizes key allows you to customize the global sizing of components you
build for your project. By default these spacing value can be referenced by the
width, height, and maxWidth, minWidth, maxHeight, minHeight styles.
export default {
sizes: {
...theme.space,
full: "100%",
"3xs": "14rem",
"2xs": "16rem",
xs: "20rem",
sm: "24rem",
md: "28rem",
lg: "32rem",
xl: "36rem",
"2xl": "42rem",
"3xl": "48rem",
"4xl": "56rem",
"5xl": "64rem",
"6xl": "72rem",
},
};
For a component like this: <c-box w="4" h="3" /> will generate an empty div
with width set to 1rem or 16px and height set to 0.75rem or 12px
Z-Index#
Chakra provides some zIndex values out of the box to control the stacking order of components.
export default {
zIndices: {
hide: -1,
auto: "auto",
base: 0,
docked: 10,
dropdown: 1000,
sticky: 1100,
banner: 1200,
overlay: 1300,
modal: 1400,
popover: 1500,
skipLink: 1600,
toast: 1700,
tooltip: 1800,
},
};
Config#
The theme's config is to provide global settings that are used by different parts of the Chakra UI system.
| Property | Description | Default |
|---|---|---|
cssVarPrefix | The prefix to use for the generated CSS custom properties | chakra |
initialColorMode | The initial color mode your application should start with. Can be either light or dark mode | light |
useSystemColorMode | If true, the chakra system will update color mode based on your system preferences | false |
You can leverage the extendTheme function to override a specific theme config
property.
export default {
config: {
cssVarPrefix: "ck",
},
};
❤️ Contribute to this page
Caught a mistake or want to contribute to the documentation? Edit this page on GitHub!