Card 卡片组件 #

基本用法 #

jsx
import {
  Card,
  CardHeader,
  CardBody,
  CardFooter,
  Heading,
  Text,
  Button,
} from '@chakra-ui/react'

function Example() {
  return (
    <Card>
      <CardHeader>
        <Heading size="md">卡片标题</Heading>
      </CardHeader>
      <CardBody>
        <Text>卡片内容描述文字</Text>
      </CardBody>
      <CardFooter>
        <Button colorScheme="blue">查看详情</Button>
      </CardFooter>
    </Card>
  )
}

卡片变体 #

jsx
<Card variant="elevated">悬浮卡片</Card>
<Card variant="outline">轮廓卡片</Card>
<Card variant="filled">填充卡片</Card>

卡片尺寸 #

jsx
<Card size="sm">小卡片</Card>
<Card size="md">中等卡片</Card>
<Card size="lg">大卡片</Card>

卡片方向 #

jsx
<Card direction={{ base: 'column', sm: 'row' }}>
  <Image src="image.jpg" alt="图片" />
  <CardBody>
    <Text>卡片内容</Text>
  </CardBody>
</Card>

实用示例 #

产品卡片 #

jsx
function ProductCard({ product }) {
  return (
    <Card maxW="sm">
      <CardBody>
        <Image
          src={product.image}
          alt={product.name}
          borderRadius="lg"
        />
        <Heading size="md" mt={4}>{product.name}</Heading>
        <Text color="gray.500" mt={2}>{product.description}</Text>
        <Text color="blue.600" fontSize="2xl" fontWeight="bold" mt={4}>
          ¥{product.price}
        </Text>
      </CardBody>
      <Divider />
      <CardFooter>
        <ButtonGroup spacing={2}>
          <Button variant="solid" colorScheme="blue">
            加入购物车
          </Button>
          <Button variant="ghost" colorScheme="blue">
            收藏
          </Button>
        </ButtonGroup>
      </CardFooter>
    </Card>
  )
}

用户卡片 #

jsx
function UserCard({ user }) {
  return (
    <Card>
      <CardBody>
        <HStack spacing={4}>
          <Avatar src={user.avatar} size="lg" />
          <Box>
            <Heading size="sm">{user.name}</Heading>
            <Text color="gray.500">{user.role}</Text>
            <HStack mt={2}>
              <Badge colorScheme="green">{user.status}</Badge>
              <Badge colorScheme="blue">{user.department}</Badge>
            </HStack>
          </Box>
        </HStack>
      </CardBody>
    </Card>
  )
}

统计卡片 #

jsx
function StatCard({ title, value, change, icon }) {
  return (
    <Card>
      <CardBody>
        <HStack justify="space-between">
          <Box>
            <Text color="gray.500" fontSize="sm">{title}</Text>
            <Text fontSize="2xl" fontWeight="bold">{value}</Text>
            <HStack mt={2}>
              <Icon as={change > 0 ? ArrowUpIcon : ArrowDownIcon} 
                    color={change > 0 ? 'green.500' : 'red.500'} />
              <Text color={change > 0 ? 'green.500' : 'red.500'} fontSize="sm">
                {Math.abs(change)}%
              </Text>
            </HStack>
          </Box>
          <Icon as={icon} boxSize={10} color="blue.500" />
        </HStack>
      </CardBody>
    </Card>
  )
}

Card 属性速查表 #

属性 说明
variant 变体 elevated, outline, filled
size 尺寸 sm, md, lg
direction 方向 row, column

下一步 #

现在你已经掌握了 Card 组件,接下来学习 Avatar 头像,了解如何展示用户头像!

最后更新:2026-03-28