Card卡片 - 图1

Card 卡片

通用卡片容器

何时使用

最基础的卡片容器,可承载文字、列表、图片、段落,常用于后台概览页面。

代码演示

Card卡片 - 图2

Card卡片 - 图3

典型卡片

包含标题、内容、操作区域。 可通过设置size为default或者small,控制尺寸

  1. <template>
  2. <a-card title="Default size card" style="width: 300px">
  3. <template #extra><a href="#">more</a></template>
  4. <p>card content</p>
  5. <p>card content</p>
  6. <p>card content</p>
  7. </a-card>
  8. <br />
  9. <a-card size="small" title="Small size card" style="width: 300px">
  10. <template #extra><a href="#">more</a></template>
  11. <p>card content</p>
  12. <p>card content</p>
  13. <p>card content</p>
  14. </a-card>
  15. </template>

Card卡片 - 图4

更灵活的内容展示

可以利用 Card.Meta 支持更灵活的内容

  1. <template>
  2. <a-card hoverable style="width: 240px">
  3. <template #cover>
  4. <img alt="example" src="https://os.alipayobjects.com/rmsportal/QBnOOoLaAfKPirc.png" />
  5. </template>
  6. <a-card-meta title="Europe Street beat">
  7. <template #description>www.instagram.com</template>
  8. </a-card-meta>
  9. </a-card>
  10. </template>

Card卡片 - 图5

栅格卡片

在系统概览页面常常和栅格进行配合。

  1. <template>
  2. <div style="background-color: #ececec; padding: 20px">
  3. <a-row :gutter="16">
  4. <a-col :span="8">
  5. <a-card title="Card title" :bordered="false">
  6. <p>card content</p>
  7. </a-card>
  8. </a-col>
  9. <a-col :span="8">
  10. <a-card title="Card title" :bordered="false">
  11. <p>card content</p>
  12. </a-card>
  13. </a-col>
  14. <a-col :span="8">
  15. <a-card title="Card title" :bordered="false">
  16. <p>card content</p>
  17. </a-card>
  18. </a-col>
  19. </a-row>
  20. </div>
  21. </template>

Card卡片 - 图6

Toggle loading

预加载的卡片

数据读入前会有文本块样式

  1. <template>
  2. <a-card :loading="loading" title="Card title">whatever content</a-card>
  3. <a-button style="margin-top: 16px" @click="handleClick">Toggle loading</a-button>
  4. </template>
  5. <script lang="ts">
  6. import { defineComponent, ref } from 'vue';
  7. export default defineComponent({
  8. setup() {
  9. const loading = ref(true);
  10. const handleClick = () => {
  11. loading.value = !loading.value;
  12. };
  13. return {
  14. loading,
  15. handleClick,
  16. };
  17. },
  18. });
  19. </script>

Card卡片 - 图7

简洁卡片

只包含内容区域。

  1. <template>
  2. <a-card style="width: 300px">
  3. <p>Card content</p>
  4. <p>Card content</p>
  5. <p>Card content</p>
  6. </a-card>
  7. </template>

Card卡片 - 图8

无边框

在灰色背景上使用无边框的卡片

  1. <template>
  2. <div style="background: #ececec; padding: 30px">
  3. <a-card title="Card title" :bordered="false" style="width: 300px">
  4. <p>Card content</p>
  5. <p>Card content</p>
  6. <p>Card content</p>
  7. </a-card>
  8. </div>
  9. </template>

Card卡片 - 图9

网格型内嵌卡片

一种常见的卡片内容区隔模式。

  1. <template>
  2. <a-card title="Card Title">
  3. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  4. <a-card-grid style="width: 25%; text-align: center" :hoverable="false">Content</a-card-grid>
  5. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  6. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  7. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  8. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  9. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  10. <a-card-grid style="width: 25%; text-align: center">Content</a-card-grid>
  11. </a-card>
  12. </template>

Card卡片 - 图10

内部卡片

可以放在普通卡片内部,展示多层级结构的信息

  1. <template>
  2. <a-card title="Card title">
  3. <p style="font-size: 14px; color: rgba(0, 0, 0, 0.85); margin-bottom: 16px; font-weight: 500">
  4. Group title
  5. </p>
  6. <a-card title="Inner card title">
  7. <template #extra>
  8. <a href="#">More</a>
  9. </template>
  10. Inner Card content
  11. </a-card>
  12. <a-card title="Inner card title" :style="{ marginTop: '16px' }">
  13. <template #extra>
  14. <a href="#">More</a>
  15. </template>
  16. Inner Card content
  17. </a-card>
  18. </a-card>
  19. </template>

Card卡片 - 图11

支持更多内容配置

一种支持封面、头像、标题和描述信息的卡片。

  1. <template>
  2. <a-card hoverable style="width: 300px">
  3. <template #cover>
  4. <img
  5. alt="example"
  6. src="https://gw.alipayobjects.com/zos/rmsportal/JiqGstEfoWAOHiTxclqi.png"
  7. />
  8. </template>
  9. <template class="ant-card-actions" #actions>
  10. <setting-outlined key="setting" />
  11. <edit-outlined key="edit" />
  12. <ellipsis-outlined key="ellipsis" />
  13. </template>
  14. <a-card-meta title="Card title" description="This is the description">
  15. <template #avatar>
  16. <a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
  17. </template>
  18. </a-card-meta>
  19. </a-card>
  20. </template>
  21. <script lang="ts">
  22. import { SettingOutlined, EditOutlined, EllipsisOutlined } from '@ant-design/icons-vue';
  23. import { defineComponent } from 'vue';
  24. export default defineComponent({
  25. components: {
  26. SettingOutlined,
  27. EditOutlined,
  28. EllipsisOutlined,
  29. },
  30. });
  31. </script>

Card卡片 - 图12

Card卡片 - 图13

带页签的卡片

可承载更多内容

  1. <template>
  2. <a-card
  3. style="width: 100%"
  4. title="Card title"
  5. :tab-list="tabList"
  6. :active-tab-key="key"
  7. @tabChange="key => onTabChange(key, 'key')"
  8. >
  9. <template #customRender="item">
  10. <span>
  11. <home-outlined />
  12. {{ item.key }}
  13. </span>
  14. </template>
  15. <template #extra>
  16. <a href="#">More</a>
  17. </template>
  18. {{ contentList[key] }}
  19. </a-card>
  20. <br />
  21. <br />
  22. <a-card
  23. style="width: 100%"
  24. :tab-list="tabListNoTitle"
  25. :active-tab-key="noTitleKey"
  26. @tabChange="key => onTabChange(key, 'noTitleKey')"
  27. >
  28. <p v-if="noTitleKey === 'article'">article content</p>
  29. <p v-else-if="noTitleKey === 'app'">app content</p>
  30. <p v-else>project content</p>
  31. <template #tabBarExtraContent>
  32. <a href="#">More</a>
  33. </template>
  34. </a-card>
  35. </template>
  36. <script lang="ts">
  37. import { HomeOutlined } from '@ant-design/icons-vue';
  38. import { defineComponent, ref } from 'vue';
  39. export default defineComponent({
  40. components: {
  41. HomeOutlined,
  42. },
  43. setup() {
  44. const tabList = [
  45. {
  46. key: 'tab1',
  47. // tab: 'tab1',
  48. slots: { tab: 'customRender' },
  49. },
  50. {
  51. key: 'tab2',
  52. tab: 'tab2',
  53. },
  54. ];
  55. const contentList = {
  56. tab1: 'content1',
  57. tab2: 'content2',
  58. };
  59. const tabListNoTitle = [
  60. {
  61. key: 'article',
  62. tab: 'article',
  63. },
  64. {
  65. key: 'app',
  66. tab: 'app',
  67. },
  68. {
  69. key: 'project',
  70. tab: 'project',
  71. },
  72. ];
  73. const key = ref('tab1');
  74. const noTitleKey = ref('app');
  75. const onTabChange = (value: string, type: string) => {
  76. console.log(value, type);
  77. if (type === 'key') {
  78. key.value = value;
  79. } else if (type === 'noTitleKey') {
  80. noTitleKey.value = value;
  81. }
  82. };
  83. return {
  84. tabList,
  85. contentList,
  86. tabListNoTitle,
  87. key,
  88. noTitleKey,
  89. onTabChange,
  90. };
  91. },
  92. });
  93. </script>

API

Card

参数说明类型默认值版本
actions卡片操作组,位置在卡片底部slots-
activeTabKey当前激活页签的 keystring-
headStyle自定义标题区域样式object-
bodyStyle内容区域自定义样式object-
bordered是否有边框booleantrue
cover卡片封面slot-
defaultActiveTabKey初始化选中页签的 key,如果没有设置 activeTabKeystring第一个页签
extra卡片右上角的操作区域string|slot-
hoverable鼠标移过时可浮起booleanfalse
loading当卡片内容还在加载中时,可以用 loading 展示一个占位booleanfalse
tabList页签标题列表, 可以通过 slots 属性自定义 tabArray<{key: string, tab: any, slots: {tab: ‘XXX’}}>-
tabBarExtraContenttab bar 上额外的元素slot1.5.0
sizecard 的尺寸default | smalldefault
title卡片标题string|slot-
type卡片类型,可设置为 inner 或 不设置string-

事件

事件名称说明回调参数版本
tabChange页签切换的回调(key) => void-

Card.Grid

Card.Meta

参数说明类型默认值版本
avatar头像/图标slot-
description描述内容string|slot-
title标题内容string|slot-