Skip to content

Card 组件设计文档 ​

概述 ​

Card 组件是本组件库中用于实现内容卡片功能的基础组件。它延续了我们组件库一贯的设计理念,采用"极简主义"和"容器抽象"的原则,通过 card.vue 实现了一套简洁且灵活的内容容器解决方案。

Card 组件专注于提供内容展示的基础容器结构,为用户提供了一套轻量、直观的内容组织方式,支持自定义尺寸、背景色和灵活的内容布局,有效提升用户在信息展示和内容组织方面的体验。作为组件库中最基础的容器组件之一,Card 为更复杂的组件提供了构建基础。

设计理念 ​

极简主义设计 ​

Card 组件严格遵循极简主义设计原则:

  1. 最小功能集 - 仅提供最基础的内容容器功能
  2. 无侵入性 - 不强制任何特定样式或交互
  3. 纯粹容器 - 专注于内容组织,不添加额外功能

这种设计使组件保持轻量级,同时提供最大的灵活性。

容器抽象 ​

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 组件包含三个关键部分:

  1. 容器 - .my-card - 包裹整个卡片组件,使用 flex 布局
    scss
    .my-card {
      display: flex;
      flex-direction: column;
    }
  2. 头部区域 - .my-card__header - 卡片的标题和操作区域
  3. 内容区域 - .my-card__body - 卡片的主要内容展示区域
  4. 页脚区域 - .my-card__footer - 卡片的操作按钮等页脚内容

结构设计特点: ​

  • 语义清晰 - 通过类名清晰表达各部分的语义
  • 布局合理 - 使用 flex 布局实现自适应内容区域
  • 无默认间距 - 不添加默认边距,由使用者控制
  • 内容中立 - 对内容类型不做任何假设

交互设计 ​

容器交互特性 ​

Card 组件作为基础容器,其交互设计主要体现在:

  • 被动交互 - 作为内容容器,本身不提供交互,而是承载交互内容
  • 结构支持 - 通过清晰的区域划分支持内容的交互设计
  • 样式反馈 - 通过外部样式实现交互状态反馈

这种设计使 Card 组件能够适应各种交互场景,从静态展示到复杂交互都能良好支持。

内容集成 ​

Card 组件与内容的集成设计如下:

  • 插槽机制 - 通过命名插槽提供内容定制能力
  • 内容隔离 - 各区域内容相互隔离,避免样式冲突
  • 灵活嵌套 - 支持嵌套其他组件,构建更复杂的界面

这种设计使 Card 组件能够作为构建更复杂组件的基础单元。

扩展性设计 ​

Card 组件具备出色的扩展性:

  1. 尺寸扩展 - 通过 width 和 height 属性支持灵活的尺寸配置
  2. 样式扩展 - 通过 backgroundColor 属性支持自定义背景色
  3. 内容扩展 - 通过插槽机制支持任意内容的插入
  4. 组合能力 - 可与其他组件组合,构建更复杂的界面
  5. 主题适应 - 通过样式属性支持主题定制

样式细节 ​

Card 组件在样式处理上有以下特点:

  1. 基础布局 - 仅提供最基础的 flex 布局
    scss
    .my-card {
      display: flex;
      flex-direction: column;
    }
  2. 无默认样式 - 不添加边框、阴影等视觉样式
  3. 内容中立 - 不对内容区域添加默认边距或内边距
  4. 样式隔离 - 通过 BEM 命名规范确保样式隔离
  5. 响应式基础 - 提供响应式设计的基础结构

性能优化 ​

通过以下方式优化性能:

  1. 轻量实现 - 仅包含必要的结构和逻辑
  2. 无复杂计算 - 避免不必要的响应式计算
  3. 按需渲染 - 仅渲染实际使用的内容区域
  4. 样式最小化 - 仅提供基础布局样式
  5. 无事件监听 - 作为纯容器,不添加事件监听

设计价值 ​

Card 组件延续了我们组件库的设计哲学:

  1. 极简主义 - 仅提供最必要的功能,保持组件轻量
  2. 容器抽象 - 专注于内容组织,不添加额外功能
  3. 结构清晰 - 通过语义化区域划分提供清晰的结构
  4. 高度灵活 - 适应各种内容场景和设计需求
  5. 基础构建块 - 作为构建更复杂组件的基础单元

基于 MIT 协议