颜色模式 #
基本配置 #
配置 ColorModeScript #
在应用入口添加 ColorModeScript:
jsx
import { ColorModeScript } from '@chakra-ui/react'
function App() {
return (
<>
<ColorModeScript initialColorMode="light" />
<App />
</>
)
}
配置主题 #
jsx
import { extendTheme, type ThemeConfig } from '@chakra-ui/react'
const config: ThemeConfig = {
initialColorMode: 'light',
useSystemColorMode: false,
}
const theme = extendTheme({ config })
使用颜色模式 #
useColorMode Hook #
jsx
import { useColorMode, Button } from '@chakra-ui/react'
function ColorModeToggle() {
const { colorMode, toggleColorMode } = useColorMode()
return (
<Button onClick={toggleColorMode}>
{colorMode === 'light' ? '切换到深色模式' : '切换到浅色模式'}
</Button>
)
}
useColorModeValue #
jsx
import { useColorModeValue, Box } from '@chakra-ui/react'
function Example() {
const bgColor = useColorModeValue('gray.100', 'gray.700')
const textColor = useColorModeValue('gray.800', 'white')
return (
<Box bg={bgColor} color={textColor}>
根据颜色模式自动切换样式
</Box>
)
}
全局样式配置 #
jsx
const theme = extendTheme({
config: {
initialColorMode: 'light',
useSystemColorMode: true,
},
styles: {
global: (props) => ({
body: {
bg: props.colorMode === 'dark' ? 'gray.900' : 'white',
color: props.colorMode === 'dark' ? 'white' : 'gray.800',
},
}),
},
})
组件颜色模式 #
jsx
const theme = extendTheme({
components: {
Button: {
baseStyle: (props) => ({
bg: props.colorMode === 'dark' ? 'blue.300' : 'blue.500',
color: props.colorMode === 'dark' ? 'gray.800' : 'white',
}),
},
},
})
实用示例 #
完整切换按钮 #
jsx
import { useColorMode, IconButton } from '@chakra-ui/react'
import { SunIcon, MoonIcon } from '@chakra-ui/icons'
function ColorModeButton() {
const { colorMode, toggleColorMode } = useColorMode()
return (
<IconButton
aria-label="切换颜色模式"
icon={colorMode === 'light' ? <MoonIcon /> : <SunIcon />}
onClick={toggleColorMode}
variant="ghost"
/>
)
}
响应式颜色 #
jsx
function ThemedCard({ children }) {
const bg = useColorModeValue('white', 'gray.800')
const borderColor = useColorModeValue('gray.200', 'gray.600')
const textColor = useColorModeValue('gray.800', 'white')
return (
<Box
bg={bg}
borderColor={borderColor}
color={textColor}
borderWidth="1px"
borderRadius="lg"
p={6}
>
{children}
</Box>
)
}
配置选项 #
| 选项 | 说明 | 值 |
|---|---|---|
| initialColorMode | 初始颜色模式 | light, dark |
| useSystemColorMode | 使用系统颜色模式 | boolean |
下一步 #
现在你已经掌握了颜色模式,接下来学习 响应式设计,了解如何构建响应式布局!
最后更新:2026-03-28