基于Next.js+Chakra UI实现固定分页的客户列表布局问询
Next.js + Chakra UI 实现固定分页的客户列表布局思路
核心布局逻辑
利用Chakra UI的弹性布局(Flex)特性,将左侧列表区分成滚动内容区和固定分页区,同时让整体布局占满视口高度,确保分页始终停留在页面底部。
分步实现
整体页面框架
用Flex组件作为根容器,设置height="100vh"让布局铺满整个浏览器视口,左右分栏分别承载客户列表和详情内容:- 左侧列表区指定固定宽度(比如
w="350px"),内部用垂直弹性布局(flexDirection="column")拆分滚动内容和分页。 - 右侧详情区设置
flex="1"自动填充剩余宽度,内容过多时可单独开启滚动。
- 左侧列表区指定固定宽度(比如
左侧列表区滚动与分页固定
- 滚动内容区:用
ScrollView(或Box加overflowY="auto")包裹列表项,设置flex="1"让它自动填充除分页外的所有剩余空间,超出部分自动滚动。 - 分页按钮区:用
Box包裹,设置flexShrink="0"防止被压缩,同时固定在列表区底部,不会随内容滚动偏移。
- 滚动内容区:用
细节优化
- 给滚动内容区添加
pb="4"(底部内边距),避免最后一条列表项被分页按钮遮挡。 - 右侧详情区若内容过长,可添加
overflowY="auto"开启独立滚动,不影响左侧分页的固定位置。
- 给滚动内容区添加
代码示例
import { Flex, Box, ScrollView, Button, VStack } from '@chakra-ui/react'; export default function CustomerDashboard() { return ( <Flex height="100vh" gap="4" p="4" bg="gray.50"> {/* 左侧客户列表容器 */} <Box width="350px" display="flex" flexDirection="column" gap="2" bg="white" borderRadius="md" p="3" boxShadow="sm" > {/* 可滚动的客户列表 */} <ScrollView flex="1" overflowY="auto" pb="4"> {Array.from({ length: 25 }).map((_, idx) => ( <Box key={idx} p="3" borderWidth="1px" borderRadius="md" mb="2" cursor="pointer" _hover={{ bg: 'gray.50' }} > 客户 {idx + 1} </Box> ))} </ScrollView> {/* 固定在底部的分页按钮 */} <Box display="flex" justifyContent="space-between" flexShrink="0"> <Button variant="outline" colorScheme="blue" disabled>上一页</Button> <Button variant="outline" colorScheme="blue">下一页</Button> </Box> </Box> {/* 右侧客户详情区 */} <Box flex="1" bg="white" borderRadius="md" p="4" boxShadow="sm" overflowY="auto" > <Box fontSize="xl" fontWeight="semibold" mb="4">客户详情</Box> {/* 这里渲染选中客户的具体信息 */} <Box p="3" borderWidth="1px" borderRadius="md"> 请选择左侧的客户查看详情 </Box> </Box> </Flex> ); }
关键要点说明
height="100vh":确保根布局占满视口,是分页固定在页面底部的基础。flex="1"(滚动区):让列表内容自动填充可用空间,超出部分滚动。flexShrink="0"(分页区):强制分页保持原有高度,不会被滚动区挤压。
内容的提问来源于stack exchange,提问作者user20985280
相关产品推荐
相关产品推荐

