Style Props Style props are a way to alter the style of a component by simply passing props
to it. It helps to save time by providing helpful shorthand ways to style
components.
Reference #
The following table shows a list of every style prop and the properties within
each group.
Margin and padding #
import { Box } from "@chakra-ui/react"
< Box m = { 2 } > Tomato </ Box >
< Box maxW = " 960px " mx = " auto " />
< Box m = { [ 2 , 3 ] } />
copy
Prop CSS Property Theme Key m
, margin
margin
space
mt
, marginTop
margin-top
space
mr
, marginRight
margin-right
space
me
, marginEnd
margin-inline-end
space
mb
, marginBottom
margin-bottom
space
ml
, marginLeft
margin-left
space
ms
, marginStart
margin-inline-start
space
mx
, marginX
margin-inline-start
+ margin-inline-end
space
my
, marginY
margin-top
+ margin-bottom
space
p
, padding
padding
space
pt
, paddingTop
padding-top
space
pr
, paddingRight
padding-right
space
pe
, paddingEnd
padding-inline-end
space
pb
, paddingBottom
padding-bottom
space
pl
, paddingLeft
padding-left
space
ps
, paddingStart
padding-inline-start
space
px
, paddingX
padding-inline-start
+ padding-inline-end
space
py
, paddingY
padding-top
+ padding-bottom
space
For mx
and px
props, we use margin-inline-start
and margin-inline-end
to ensure the generated styles are RTL-friendly
Color and background color #
import { Box } from "@chakra-ui/react"
< Box color = ' gray.50 ' />
< Box color = ' #f00 ' />
< Box bg = ' tomato ' />
< Box backgroundColor = ' tomato ' />
copy
Prop CSS Property Theme Key color
color
colors
bg
, background
background
colors
bgColor
background-color
colors
opacity
opacity
none
Gradient #
import { Box , Text } from "@chakra-ui/react"
< Box w = " 100% " h = " 200px " bgGradient = " linear(to-t, green.200, pink.500) " />
< Box w = " 100% " h = " 200px " bgGradient = " radial(gray.300, yellow.400, pink.200) " />
< Text
bgGradient = " linear(to-l, #7928CA, #FF0080) "
bgClip = " text "
fontSize = " 6xl "
fontWeight = " extrabold "
>
Welcome to Chakra UI
</ Text >
copy
Prop CSS Property Theme Key bgGradient
background-image
none bgClip
, backgroundClip
background-clip
none
Typography #
import { Text } from "@chakra-ui/react"
< Text fontSize = " md " />
< Text fontSize = { 32 } />
< Text fontSize = ' 2em ' />
< Text textAlign = { [ 'left' , 'center' ] } />
copy
Prop CSS Property Theme Key fontFamily
font-family
fonts
fontSize
font-size
fontSizes
fontWeight
font-weight
fontWeights
lineHeight
line-height
lineHeights
letterSpacing
letter-spacing
letterSpacings
textAlign
text-align
none fontStyle
font-style
none textTransform
text-transform
none textDecoration
text-decoration
none
Layout, width and height #
import { Box } from "@chakra-ui/react"
< Box width = " 100% " height = { 32 } />
< Box w = " 100% " h = " 32px " />
< Box boxSize = " sm " />
< Box w = { 256 } />
< Box w = ' 40px ' />
copy
Prop CSS Property Theme Key w
, width
width
sizes
h
, height
height
sizes
minW
, minWidth
min-width
sizes
maxW
, maxWidth
max-width
sizes
minH
, minHeight
min-height
sizes
maxH
, maxHeight
max-height
sizes
display
display
none boxSize
width
, height
sizes
verticalAlign
vertical-align
none overflow
overflow
none overflowX
overflow-x
none overflowY
overflow-y
none
Flexbox #
import { Box , Flex } from "@chakra-ui/react"
< Box display = " flex " alignItems = " center " justifyContent = " space-between " >
Box with Flex props
</ Box >
< Flex align = " center " justify = " center " >
Flex Container
</ Flex >
copy
Note: Props in *
will only work if you use the Flex
component.
Prop CSS Property Theme Key gap
gap
space
rowGap
row-gap
space
columnGap
column-gap
space
alignItems
, *align
align-items
none alignContent
align-content
none justifyItems
justify-items
none justifyContent
, *justify
justify-content
none flexWrap
, *wrap
flex-wrap
none flexDirection
, flexDir
, *direction
flex-direction
none flex
flex
none flexGrow
flex-grow
none flexShrink
flex-shrink
none flexBasis
flex-basis
none justifySelf
justify-self
none alignSelf
align-self
none order
order
none
Grid Layout #
import { Box , Grid } from "@chakra-ui/react"
< Box display = " grid " gridGap = { 2 } gridAutoFlow = " row dense " >
Grid
</ Box >
< Grid gap = { 2 } autoFlow = " row dense " >
Grid
</ Grid >
copy
Note: Props in *
will only work if you use the Grid
component.
Prop CSS Property Theme Key gridGap
, *gap
grid-gap
space
gridRowGap
, *rowGap
grid-row-gap
space
gridColumnGap
, *columnGap
grid-column-gap
space
gridColumn
, *column
grid-column
none gridRow
, *row
grid-row
none gridArea
, *area
grid-area
none gridAutoFlow
, *autoFlow
grid-auto-flow
none gridAutoRows
, *autoRows
grid-auto-rows
none gridAutoColumns
, *autoColumns
grid-auto-columns
none gridTemplateRows
, *templateRows
grid-template-rows
none gridTemplateColumns
, *templateColumns
grid-template-columns
none gridTemplateAreas
, *templateAreas
grid-template-areas
none
Background #
import { Box } from "@chakra-ui/react"
< Box
backgroundImage = " url( ' /images/kyuubi.png ' ) "
backgroundPosition = " center "
backgroundRepeat = " no-repeat "
/>
< Box
bgImage = " url( ' /images/gaara.png ' ) "
bgPosition = " center "
bgRepeat = " no-repeat "
/>
copy
Prop CSS Property Theme Key bg
, background
background
none bgImage
, backgroundImage
background-image
none bgSize
, backgroundSize
background-size
none bgPosition
,backgroundPosition
background-position
none bgRepeat
,backgroundRepeat
background-repeat
none bgAttachment
,backgroundAttachment
background-attachment
none
Borders #
< Box border = ' 1px ' borderColor = ' gray.200 ' >
Card
</ Box >
copy
Prop CSS Property Theme Field border
border
borders
borderWidth
border-width
borderWidths
borderStyle
border-style
borderStyles
borderColor
border-color
colors
borderTop
border-top
borders
borderTopWidth
border-top-width
borderWidths
borderTopStyle
border-top-style
borderStyles
borderTopColor
border-top-color
colors
borderRight
border-right
borders
borderEnd
border-inline-end
borders
borderRightWidth
border-right-width
borderWidths
borderEndWidth
border-inline-end-width
borderWidths
borderRightStyle
border-right-style
borderStyles
borderEndStyle
border-inline-end-style
borderStyles
borderRightColor
border-right-color
colors
borderEndColor
border-inline-end-color
colors
borderBottom
border-bottom
borders
borderBottomWidth
border-bottom-width
borderWidths
borderBottomStyle
border-bottom-style
borderStyles
borderBottomColor
border-bottom-color
colors
borderLeft
border-left
borders
borderStart
border-inline-start
borders
borderLeftWidth
border-left-width
borderWidths
borderStartWidth
border-inline-start-width
borderWidths
borderLeftStyle
border-left-style
borderStyles
borderStartStyle
border-inline-start-style
borderStyles
borderLeftColor
border-left-color
colors
borderStartColor
border-inline-start-color
colors
borderX
border-left
, border-right
borders
borderY
border-top
, border-bottom
borders
Border Radius #
import { Button } from "@chakra-ui/react"
< Button borderRightRadius = " 0 " > Button 1 </ Button >
< Button borderLeftRadius = " 0 " > Button 2 </ Button >
< Button borderTopRadius = " md " > Button 2 </ Button >
copy
Prop CSS Property Theme Field borderRadius
border-radius
radii
borderTopLeftRadius
border-top-left-radius
radii
borderTopStartRadius
border-top-left-radius
in LTR, border-top-right-radius
in RTLradii
borderTopRightRadius
border-top-right-radius
radii
borderTopEndRadius
border-top-right-radius
in LTR, border-top-left-radius
in RTLradii
borderBottomRightRadius
border-bottom-right-radius
radii
borderBottomEndRadius
border-bottom-right-radius
in LTR, border-bottom-left-radius
in RTLradii
borderBottomLeftRadius
border-bottom-left-radius
radii
borderBottomStartRadius
border-bottom-left-radius
in LTR, border-bottom-left-radius
in RTLradii
borderTopRadius
border-top-left-radius
+ border-top-right-radius
radii
borderRightRadius
border-top-right-radius
+ border-bottom-right-radius
radii
borderEndRadius
border-top-right-radius
+ border-bottom-right-radius
radii
borderBottomRadius
border-bottom-left-radius
+ border-bottom-right-radius
radii
borderLeftRadius
border-top-left-radius
+ border-bottom-left-radius
radii
borderStartRadius
border-top-left-radius
+ border-bottom-left-radius
radii
Position #
import { Box } from "@chakra-ui/react"
< Box position = " absolute " > Cover </ Box >
< Box pos = " absolute " > Cover </ Box >
< Box pos = " absolute " top = " 0 " left = " 0 " >
Absolute with top and left
</ Box >
< Box pos = " fixed " w = " 100% " zIndex = { 2 } >
Fixed with zIndex
</ Box >
copy
Prop CSS Property Theme Field pos
,position
position
none zIndex
z-index
zIndices
top
top
space
right
right
space
bottom
bottom
space
left
left
space
Shadow #
< SimpleGrid
bg = ' gray.50 '
columns = { { sm : 2 , md : 4 } }
spacing = ' 8 '
p = ' 10 '
textAlign = ' center '
rounded = ' lg '
color = ' gray.400 '
>
< Box boxShadow = ' xs ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
xs
</ Box >
< Box boxShadow = ' sm ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
sm
</ Box >
< Box boxShadow = ' base ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
Base
</ Box >
< Box boxShadow = ' md ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
md
</ Box >
< Box boxShadow = ' lg ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
lg
</ Box >
< Box boxShadow = ' xl ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
xl
</ Box >
< Box boxShadow = ' 2xl ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
2xl
</ Box >
< Box boxShadow = ' dark-lg ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
Dark lg
</ Box >
< Box boxShadow = ' outline ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
Outline
</ Box >
< Box boxShadow = ' inner ' p = ' 6 ' rounded = ' md ' bg = ' white ' >
Inner
</ Box >
</ SimpleGrid >
copy
< Text textShadow = ' 1px 1px #ff0000 ' m = ' 6 ' >
Text with shadows
</ Text >
copy
Prop CSS Property Theme Field textShadow
text-shadow
shadows
shadow
, boxShadow
box-shadow
shadows
Filter #
function Filters ( ) {
const basicBoxStyles = {
display : 'flex' ,
alignItems : 'center' ,
justifyContent : 'center' ,
textAlign : 'center' ,
boxSize : '250px' ,
color : 'white' ,
textShadow : '0 0 20px black' ,
fontWeight : 'bold' ,
fontSize : '20px' ,
px : 4 ,
background :
'url(https://picsum.photos/id/1080/200/300) center/cover no-repeat' ,
}
return (
< Flex flexWrap = ' wrap ' gap = ' 24px ' justifyContent = ' space-evenly ' >
{ }
< Box sx = { basicBoxStyles } filter = ' grayscale(80%) ' >
Box with Filter
</ Box >
{ }
< Box sx = { basicBoxStyles } filter = ' auto ' blur = ' 2px ' >
Box with Blur
</ Box >
{ }
< Box sx = { basicBoxStyles } filter = ' auto ' brightness = ' 40% ' >
Box with Brightness
</ Box >
</ Flex >
)
}
copy
Note: To apply blur
, brightness
, contrast
, hueRotate
, invert
,
saturate
props on the element, set filter
prop value to "auto".
function BackdropFilters ( ) {
const outerBoxStyles = {
boxSize : '250px' ,
p : '10' ,
background :
'url(https://picsum.photos/id/1068/200/300) center/cover no-repeat' ,
}
const innerBoxStyles = {
display : 'flex' ,
alignItems : 'center' ,
justifyContent : 'center' ,
textAlign : 'center' ,
boxSize : 'full' ,
color : 'white' ,
textShadow : '0 0 20px black' ,
fontWeight : 'bold' ,
fontSize : '20px' ,
}
return (
< Flex flexWrap = ' wrap ' gap = ' 24px ' justifyContent = ' space-evenly ' >
{ }
< Box sx = { outerBoxStyles } >
< Box sx = { innerBoxStyles } backdropFilter = ' invert(100%) ' >
Box with Backdrop Filter
</ Box >
</ Box >
{ }
< Box sx = { outerBoxStyles } >
< Box sx = { innerBoxStyles } backdropFilter = ' auto ' backdropBlur = ' 8px ' >
Box with Backdrop Blur
</ Box >
</ Box >
{ }
< Box sx = { outerBoxStyles } >
< Box sx = { innerBoxStyles } backdropFilter = ' auto ' backdropContrast = ' 30% ' >
Box with Backdrop Contrast
</ Box >
</ Box >
</ Flex >
)
}
copy
🚨 backdrop-filter
is not supported in Firefox. It can be enabled by the
user, but it is suggested to design a component that looks good with and
without this property.
Note: To apply backdropBlur
, backdropBrightness
, backdropContrast
,
backdropHueRotate
, backdropInvert
, backdropSaturate
props on the
element, set backdropFilter
prop value to "auto".
Prop CSS Property Theme Field filter
filter
none blur
filter
blur
brightness
filter
none contrast
filter
none hueRotate
filter
none invert
filter
none saturate
filter
none dropShadow
filter
shadows
backdropFilter
backdrop-filter
none backdropBlur
backdrop-filter
blur
backdropBrightness
backdrop-filter
none backdropContrast
backdrop-filter
none backdropHueRotate
backdrop-filter
none backdropInvert
backdrop-filter
none backdropSaturate
backdrop-filter
none
Pseudo #
import { Button } from "@chakra-ui/react"
< Button
colorScheme = " teal "
_hover = { {
background : "white" ,
color : "teal.500" ,
} }
>
Hover me
</ Button >
< Box
role = " group "
>
< Box
_hover = { { fontWeight : 'semibold' } }
_groupHover = { { color : 'tomato' } }
>
</ Box >
</ Box >
< Box
_before = { { content : '"🙂"' , display : 'inline-block' , mr : '5px' } }
>
A pseudo element
</ Box >
copy
Prop CSS Property Theme Field _hover
&:hover
&[data-hover]
none _active
&:active
&[data-active]
none _focus
&:focus
&[data-focus]
none _highlighted
&[data-highlighted]
none _focusWithin
&:focus-within
none _focusVisible
&:focus-visible
none _disabled
&[disabled]
&[aria-disabled=true]
&[data-disabled]
none _readOnly
&[aria-readonly=true]
&[readonly]
&[data-readonly]
none _before
&::before
none _after
&::after
none _empty
&:empty
none _expanded
&[aria-expanded=true]
&[data-expanded]
none _checked
&[aria-checked=true]
&[data-checked]
none _grabbed
&[aria-grabbed=true]
&[data-grabbed]
none _pressed
&[aria-pressed=true]
&[data-pressed]
none _invalid
&[aria-invalid=true]
&[data-invalid]
none _valid
&[data-valid]
&[data-state=valid]
none _loading
&[data-loading]
&[aria-busy=true]
none _selected
&[aria-selected=true]
&[data-selected]
none _hidden
&[hidden]
&[data-hidden]
none _autofill
&:-webkit-autofill
none _even
&:nth-of-type(even)
none _odd
&:nth-of-type(odd)
none _first
&:first-of-type
none _last
&:last-of-type
none _notFirst
&:not(:first-of-type)
none _notLast
&:not(:last-of-type)
none _visited
&:visited
none _activeLink
&[aria-current=page]
none _activeStep
&[aria-current=step]
none _indeterminate
&:indeterminate
&[aria-checked=mixed]
&[data-indeterminate]
none _groupHover
[role=group]:hover &
[role=group][data-hover] &
[data-group]:hover &
[data-group][data-hover] &
.group:hover &
.group[data-hover] &
none _peerHover
[data-peer]:hover ~ &
[data-peer][data-hover] ~ &
.peer:hover ~ &
.peer[data-hover] ~ &
none _groupFocus
[role=group]:focus &
[role=group][data-focus] &
[data-group]:focus &
[data-group][data-focus] &
.group:focus &
.group[data-focus] &
none _peerFocus
[data-peer]:focus ~ &
[data-peer][data-focus] ~ &
.peer:focus ~ &
.peer[data-focus] ~ &
none _groupFocusVisible
[role=group]:focus-visible &
[data-group]:focus-visible &
.group:focus-visible &
none _peerFocusVisible
[data-peer]:focus-visible ~ &
.peer:focus-visible ~ &
none _groupActive
[role=group]:active &
[role=group][data-active] &
[data-group]:active &
[data-group][data-active] &
.group:active &
.group[data-active] &
none _peerActive
[data-peer]:active ~ &
[data-peer][data-active] ~ &
.peer:active ~ &
.peer[data-active] ~ &
none _groupDisabled
[role=group]:disabled &
[role=group][data-disabled] &
[data-group]:disabled &
[data-group][data-disabled] &
.group:disabled &
.group[data-disabled] &
none _peerDisabled
[data-peer]:disabled ~ &
[data-peer][data-disabled] ~ &
.peer:disabled ~ &
.peer[data-disabled] ~ &
none _groupInvalid
[role=group]:invalid &
[role=group][data-invalid] &
[data-group]:invalid &
[data-group][data-invalid] &
.group:invalid &
.group[data-invalid] &
none _peerInvalid
[data-peer]:invalid ~ &
[data-peer][data-invalid] ~ &
.peer:invalid ~ &
.peer[data-invalid] ~ &
none _groupChecked
[role=group]:checked &
[role=group][data-checked] &
[data-group]:checked &
[data-group][data-checked] &
.group:checked &
.group[data-checked] &
none _peerChecked
[data-peer]:checked ~ &
[data-peer][data-checked] ~ &
.peer:checked ~ &
.peer[data-checked] ~ &
none _groupFocusWithin
[role=group]:focus-within &
[data-group]:focus-within &
.group:focus-within &
none _peerFocusWithin
[data-peer]:focus-within ~ &
.peer:focus-within ~ &
none _peerPlaceholderShown
[data-peer]:placeholder-shown ~ &
.peer:placeholder-shown ~ &
none _placeholder
&::placeholder
none _placeholderShown
&:placeholder-shown
none _fullScreen
&:fullscreen
none _selection
&::selection
none _rtl
[dir=rtl] &
&[dir=rtl]
none _ltr
[dir=ltr] &
&[dir=ltr]
none _mediaDark
@media (prefers-color-scheme: dark)
none _mediaReduceMotion
@media (prefers-reduced-motion: reduce)
none _dark
.chakra-ui-dark &
[data-theme=dark] &
&[data-theme=dark]
none _light
.chakra-ui-light &
[data-theme=light] &
&[data-theme=light]
none
Other Props #
Asides all the common style props listed above, all component will accept the
following props:
Prop CSS Property Theme Field animation
animation
none appearance
appearance
none content
content
none transform
transform
none transformOrigin
transform-origin
none visibility
visibility
none whiteSpace
white-space
none userSelect
user-select
none pointerEvents
pointer-events
none wordBreak
word-break
none overflowWrap
overflow-wrap
none textOverflow
text-overflow
none boxSizing
box-sizing
none cursor
cursor
none resize
resize
none transition
transition
none objectFit
object-fit
none objectPosition
object-position
none float
float
none fill
fill
colors
stroke
stroke
colors
outline
outline
none
The as
prop #
The as
prop is a feature in all of our components that allows you to pass an
HTML tag or component to be rendered.
For example, say you are using a Button
component, and you need to make it a
link instead. You can compose a
and Button
like this:
< Button as = ' a ' target = ' _blank ' variant = ' outline ' href = ' https://chakra-ui.com ' >
Hello
</ Button >
copy
This allows you to use all of the Button
props and all of the a
props
without having to wrap the Button in an a
component.