Card 组件设计文档
概述
Card 组件是本组件库中用于实现内容卡片功能的基础组件。它延续了我们组件库一贯的设计理念,采用"极简主义"和"容器抽象"的原则,通过 card.vue 实现了一套简洁且灵活的内容容器解决方案。
Card 组件专注于提供内容展示的基础容器结构,为用户提供了一套轻量、直观的内容组织方式,支持自定义尺寸、背景色和灵活的内容布局,有效提升用户在信息展示和内容组织方面的体验。作为组件库中最基础的容器组件之一,Card 为更复杂的组件提供了构建基础。
设计理念
极简主义设计
Card 组件严格遵循极简主义设计原则:
- 最小功能集 - 仅提供最基础的内容容器功能
- 无侵入性 - 不强制任何特定样式或交互
- 纯粹容器 - 专注于内容组织,不添加额外功能
这种设计使组件保持轻量级,同时提供最大的灵活性。
容器抽象
Card 组件采用容器抽象的设计思想:
- 结构抽象 - 将内容区域抽象为 header、body 和 footer 三个逻辑区域
- 样式解耦 - 通过 props 实现样式与结构的分离
- 内容无关 - 不关心具体内容,只提供容器结构
这种设计使 Card 组件能够适应各种内容场景,成为构建更复杂组件的基础。
核心功能设计
结构化容器
Card 组件的核心在于结构化容器设计:
html
<div class="my-card" :style="cardStyle">
<div class="my-card__header">
<slot name="header"></slot>
</div>
<div class="my-card__body">
<slot name="body"></slot>
</div>
<div class="my-card__footer">
<slot name="footer"></slot>
</div>
</div>容器特点:
- 语义化区域 - 清晰划分 header、body 和 footer 区域
- 灵活布局 - 使用 flex 布局实现自适应内容区域
- 内容隔离 - 各区域内容相互隔离,避免样式污染
- 无默认样式 - 仅提供基础布局,不添加额外视觉样式
样式管理机制
Card 组件的样式管理机制设计如下:
typescript
const cardStyle = useStyleComputed(props, {
propToStyleMap: {
backgroundColor: 'backgroundColor',
width: 'width',
height: 'height'
}
})样式管理特点:
- 属性映射 - 通过 propToStyleMap 将 props 映射为 CSS 样式
- 动态计算 - 使用 useStyleComputed 动态计算样式
- 按需应用 - 仅当 props 存在时应用相应样式
- 样式隔离 - 避免全局样式污染
组件结构设计
整体结构
Card 组件的整体结构如下:
html
<div class="my-card" :style="cardStyle">
<div class="my-card__header">
<slot name="header"></slot>
</div>
<div class="my-card__body">
<slot name="body"></slot>
</div>
<div class="my-card__footer">
<slot name="footer"></slot>
</div>
</div>组件层次
Card 组件包含三个关键部分:
- 容器 -
.my-card- 包裹整个卡片组件,使用 flex 布局scss.my-card { display: flex; flex-direction: column; } - 头部区域 -
.my-card__header- 卡片的标题和操作区域 - 内容区域 -
.my-card__body- 卡片的主要内容展示区域 - 页脚区域 -
.my-card__footer- 卡片的操作按钮等页脚内容
结构设计特点:
- 语义清晰 - 通过类名清晰表达各部分的语义
- 布局合理 - 使用 flex 布局实现自适应内容区域
- 无默认间距 - 不添加默认边距,由使用者控制
- 内容中立 - 对内容类型不做任何假设
交互设计
容器交互特性
Card 组件作为基础容器,其交互设计主要体现在:
- 被动交互 - 作为内容容器,本身不提供交互,而是承载交互内容
- 结构支持 - 通过清晰的区域划分支持内容的交互设计
- 样式反馈 - 通过外部样式实现交互状态反馈
这种设计使 Card 组件能够适应各种交互场景,从静态展示到复杂交互都能良好支持。
内容集成
Card 组件与内容的集成设计如下:
- 插槽机制 - 通过命名插槽提供内容定制能力
- 内容隔离 - 各区域内容相互隔离,避免样式冲突
- 灵活嵌套 - 支持嵌套其他组件,构建更复杂的界面
这种设计使 Card 组件能够作为构建更复杂组件的基础单元。
扩展性设计
Card 组件具备出色的扩展性:
- 尺寸扩展 - 通过 width 和 height 属性支持灵活的尺寸配置
- 样式扩展 - 通过 backgroundColor 属性支持自定义背景色
- 内容扩展 - 通过插槽机制支持任意内容的插入
- 组合能力 - 可与其他组件组合,构建更复杂的界面
- 主题适应 - 通过样式属性支持主题定制
样式细节
Card 组件在样式处理上有以下特点:
- 基础布局 - 仅提供最基础的 flex 布局scss
.my-card { display: flex; flex-direction: column; } - 无默认样式 - 不添加边框、阴影等视觉样式
- 内容中立 - 不对内容区域添加默认边距或内边距
- 样式隔离 - 通过 BEM 命名规范确保样式隔离
- 响应式基础 - 提供响应式设计的基础结构
性能优化
通过以下方式优化性能:
- 轻量实现 - 仅包含必要的结构和逻辑
- 无复杂计算 - 避免不必要的响应式计算
- 按需渲染 - 仅渲染实际使用的内容区域
- 样式最小化 - 仅提供基础布局样式
- 无事件监听 - 作为纯容器,不添加事件监听
设计价值
Card 组件延续了我们组件库的设计哲学:
- 极简主义 - 仅提供最必要的功能,保持组件轻量
- 容器抽象 - 专注于内容组织,不添加额外功能
- 结构清晰 - 通过语义化区域划分提供清晰的结构
- 高度灵活 - 适应各种内容场景和设计需求
- 基础构建块 - 作为构建更复杂组件的基础单元