Card 卡片Card · CardLink · CardMedia
把一件事的标题、内容和操作收在一个白色块里:列表里的一个条目、仪表盘上的一块信息。整块可点击时用可点击卡片或 CardLink。
基本用法
CardHeader、CardBody、CardFooter 是可选的分区;也可以直接往 Card 里放任何内容。
本周周报
周五 18:00 前提交
尺寸
圆角与内边距成对变化,内边距四边相等:sm 20 / 16、md 24 / 20(默认)、lg 32 / 24。
sm
圆角 20,内边距 16
md
圆角 24,内边距 20
lg
圆角 32,内边距 24
可点击卡片
传 href 时根节点是链接,传 interactive 时是按钮。悬停只把描边加深一档、箭头变深,按下整体回缩到 0.985。按钮形态里只能放短语内容(文字、图标、头像),不能放标题和别的按钮。
CardLink 覆盖链接
卡片里既有标题又有别的按钮时,把 CardLink 放进标题:它的点击区域铺满整张卡片,其余链接和按钮浮在上面,仍然可以单独点。读屏读到的是一个名字清楚的链接,而不是把整张卡片的文字念一遍。
设计评审:导航改版
周四 14:00 · 3 号会议室
点卡片任意位置触发 onClick
带主图的卡片
把 CardMedia 放成 Card 的第一个子元素:它贴满卡片顶部、和卡片边界没有间距,上两个角跟着卡片圆角,下边是直的;下面的内容照常留内边距。卡片的描边和顶部高光画在图片之上,可点击卡片的悬停、按下和焦点环照常。
商品卡
标题放 CardLink,整张卡片(包括图片)都能点;加购按钮浮在上面,单独可点。
整卡链接与插画
href 卡片放主图同样贴边;没有图片地址时,往 CardMedia 里直接放 svg。
周末去湖边走走
一条 6 公里的环湖步道,适合新手
跟着主题变色
插画用 --ok-accent 上色,换强调色试试
左图右文
position="start":卡片宽于约 520px 时图片贴在左侧、占满卡片高度,左两个角跟着卡片圆角;卡片变窄后自动回到顶部。用卡片自身的宽度判断(容器查询),不看视口。
山顶看日落
周六 16:30 · 西山步道入口集合
规格
- 卡片
- 圆角 24 · 内边距 20,四边相等
- 悬停
- 描边加深(--ok-line → --ok-line-2),底色不变
- 箭头
- 悬停时变深,不位移
- 按下
- scale 0.985 · 90ms,松开弹回
- 禁用
- 不透明度 0.5,指针 not-allowed
- 主图
- 贴边、无间距;上两角(start 时左两角)跟卡片圆角;描边与高光叠在图上
接口
Card
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
as | ElementType | 'div' | 静态卡片渲染成什么元素。传了 href 或 interactive 时忽略。 |
size | 'sm' | 'md' | 'lg' | 'md' | 圆角与内边距:20 / 16、24 / 20、32 / 24。 |
href | string | — | 整卡是链接,根节点渲染成 a;可配合 target、rel。 |
interactive | boolean | — | 整卡是按钮,根节点渲染成 button type="button"。 |
disabled | boolean | — | interactive 时禁用。 |
chevron | boolean | — | 末尾的前进箭头。 |
CardHeader
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
title | ReactNode | — | 标题。 |
description | ReactNode | — | 标题下的说明。 |
titleAs | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'div' | 'h3' | 标题用什么元素,按页面的标题层级选。 |
actions | ReactNode | — | 右侧操作区。 |
CardFooter / CardLink
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
CardFooter.align | 'start' | 'end' | 'between' | 'start' | 操作按钮的对齐。 |
CardLink.href | string | — | 不传时渲染成 button type="button"。其余属性透传。 |
CardMedia
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
alt* | string | — | 图片说明;纯装饰传 alt=""。 |
src | string | — | 图片地址。不传时显示 children。 |
ratio | number | string | 16 / 9 | position="start" 且卡片够宽时不用比例,改为占满卡片高度。 |
position | 'top' | 'start' | 'top' | 主图在顶部,或在宽卡片里贴左(窄于约 520px 时回到顶部)。 |
fit / fallback / children | 同 Image | — | 其余属性与 Image 相同(圆角由卡片决定,没有 radius)。 |
无障碍
- 静态卡片没有角色;可点击卡片是原生的链接或按钮,Tab 聚焦,链接用 Enter、按钮用 Enter 或空格触发。
- 可点击卡片的名字是里面全部文字,所以内容要短;内容多时改用 CardLink,名字只取链接文字。
- CardLink 的焦点环画在整张卡片外沿;卡片里其它可聚焦元素保持各自的 Tab 顺序。
- 禁用的按钮卡片用原生 disabled,会从 Tab 顺序里移除。
- CardHeader 的标题默认是
h3,请用titleAs对齐所在页面的标题层级。 - CardMedia 的 alt 落在图片上。整卡链接里的主图如果只是配图,传
alt="",免得链接名字里多一段图片说明。