响应式设计 #
断点系统 #
Chakra UI 默认断点:
| 断点 | 最小宽度 |
|---|---|
| base | 0px |
| sm | 480px |
| md | 768px |
| lg | 992px |
| xl | 1280px |
| 2xl | 1536px |
响应式样式 #
对象语法 #
jsx
<Box
fontSize={{
base: 'md',
md: 'lg',
lg: 'xl'
}}
p={{
base: 2,
md: 4,
lg: 6
}}
>
响应式样式
</Box>
数组语法 #
jsx
<Box w={['100%', '50%', '25%']}>
数组语法响应式
</Box>
useBreakpointValue #
jsx
import { useBreakpointValue } from '@chakra-ui/react'
function ResponsiveComponent() {
const variant = useBreakpointValue({
base: 'outline',
md: 'solid',
lg: 'ghost'
})
const size = useBreakpointValue({
base: 'sm',
md: 'md',
lg: 'lg'
})
return (
<Button variant={variant} size={size}>
响应式按钮
</Button>
)
}
useMediaQuery #
jsx
import { useMediaQuery } from '@chakra-ui/react'
function MediaQueryExample() {
const [isLargerThan768] = useMediaQuery('(min-width: 768px)')
const [isMobile] = useMediaQuery('(max-width: 480px)')
return (
<Box>
{isLargerThan768 ? '桌面端' : '移动端'}
{isMobile && <MobileNavigation />}
</Box>
)
}
响应式显示/隐藏 #
jsx
<Box display={{ base: 'block', md: 'none' }}>
仅在移动端显示
</Box>
<Box display={{ base: 'none', md: 'block' }}>
仅在桌面端显示
</Box>
<Show above="md">
仅在 md 以上显示
</Show>
<Hide below="lg">
在 lg 以下隐藏
</Hide>
响应式布局示例 #
响应式网格 #
jsx
<SimpleGrid
columns={{
base: 1,
sm: 2,
md: 3,
lg: 4
}}
spacing={6}
>
{items.map((item) => (
<Card key={item.id}>{item.content}</Card>
))}
</SimpleGrid>
响应式导航 #
jsx
function ResponsiveNav() {
const isDesktop = useBreakpointValue({ base: false, lg: true })
return (
<Flex justify="space-between" p={4}>
<Logo />
{isDesktop ? (
<HStack spacing={8}>
<Link href="#">首页</Link>
<Link href="#">功能</Link>
<Link href="#">价格</Link>
</HStack>
) : (
<IconButton icon={<HamburgerIcon />} aria-label="菜单" />
)}
</Flex>
)
}
响应式表单 #
jsx
<SimpleGrid
columns={{ base: 1, md: 2 }}
spacing={4}
>
<FormControl>
<FormLabel>姓名</FormLabel>
<Input />
</FormControl>
<FormControl>
<FormLabel>邮箱</FormLabel>
<Input type="email" />
</FormControl>
<FormControl colSpan={{ base: 1, md: 2 }}>
<FormLabel>地址</FormLabel>
<Input />
</FormControl>
</SimpleGrid>
自定义断点 #
jsx
const theme = extendTheme({
breakpoints: {
sm: '480px',
md: '768px',
lg: '992px',
xl: '1280px',
},
})
下一步 #
现在你已经掌握了响应式设计,接下来学习 动画系统,了解如何添加动画效果!
最后更新:2026-03-28