Skip to content

Card 卡片

卡片组件,用于展示内容区块。

基础用法

html
<div id="demo-card"></div>

<script>
  const card = new SaCard('#demo-card', {
    body: '这是卡片的内容。可以放置任何内容。'
  });
</script>
加载 SanoUI 组件中...
            
          

带标题的卡片

通过 header 配置卡片标题。

html
<div id="demo-card-header"></div>

<script>
  const card = new SaCard('#demo-card-header', {
    header: '卡片标题',
    body: '这是带标题的卡片内容。'
  });
</script>
加载 SanoUI 组件中...
            
          

不同阴影

通过 shadow 配置卡片阴影效果。

html
<div id="demo-card-shadow"></div>

<script>
  // 始终显示阴影
  new SaCard('#demo-card-shadow', {
    header: '卡片标题',
    body: '这是卡片内容',
    shadow: 'always'
  });
  
  // 悬停时显示阴影
  new SaCard('#demo-card-shadow', {
    header: '卡片标题',
    body: '这是卡片内容',
    shadow: 'hover'
  });
  
  // 无阴影
  new SaCard('#demo-card-shadow', {
    header: '卡片标题',
    body: '这是卡片内容',
    shadow: 'never'
  });
</script>
加载 SanoUI 组件中...
            
          

API

构造函数参数

参数说明类型默认值
container容器选择器或元素string | HTMLElement-
options配置选项SaCardOptions{}

配置选项

参数说明类型可选值默认值
header卡片标题string-''
body卡片内容string | HTMLElement-''
shadow阴影效果stringalways / hover / neveralways

方法

方法名说明参数返回值
setHeader设置标题header: stringvoid
setBody设置内容body: string | HTMLElementvoid
destroy销毁实例-void

示例代码

手动创建实例

javascript
const card = new SaCard('#my-card', {
  header: '卡片标题',
  body: '这是卡片内容',
  shadow: 'always'
});

// 设置标题
card.setHeader('新的标题');

// 设置内容
card.setBody('新的内容');

// 或者使用 DOM 元素
const contentEl = document.createElement('div');
contentEl.innerHTML = '<p>这是动态内容</p>';
card.setBody(contentEl);

动态内容

javascript
const card = new SaCard('#my-card', {
  header: '数据卡片',
  body: '加载中...'
});

// 动态加载内容
fetch('/api/data')
  .then(res => res.json())
  .then(data => {
    card.setBody(data.html);
  });

实际使用场景

场景 1:数据统计卡片

使用卡片展示数据统计信息。

html
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;">
  <div id="card-1"></div>
  <div id="card-2"></div>
  <div id="card-3"></div>
</div>

<script>
  const card1 = new SaCard('#card-1', {
    header: '总用户数',
    body: '<div style="font-size: 2rem; font-weight: bold; color: #409eff;">1,234</div><div style="color: #67c23a; margin-top: 0.5rem;">↑ 12%</div>',
    shadow: 'hover'
  });
  
  const card2 = new SaCard('#card-2', {
    header: '今日访问',
    body: '<div style="font-size: 2rem; font-weight: bold; color: #67c23a;">5,678</div><div style="color: #67c23a; margin-top: 0.5rem;">↑ 8%</div>',
    shadow: 'hover'
  });
  
  const card3 = new SaCard('#card-3', {
    header: '总收入',
    body: '<div style="font-size: 2rem; font-weight: bold; color: #e6a23c;">¥89,012</div><div style="color: #67c23a; margin-top: 0.5rem;">↑ 15%</div>',
    shadow: 'hover'
  });
</script>
加载 SanoUI 组件中...
            
          

场景 2:产品卡片列表

使用卡片展示产品列表。

html
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem;">
  <div id="product-card-1"></div>
  <div id="product-card-2"></div>
  <div id="product-card-3"></div>
</div>

<script>
  const products = [
    { name: '产品一', price: '¥99', desc: '这是产品一的描述' },
    { name: '产品二', price: '¥199', desc: '这是产品二的描述' },
    { name: '产品三', price: '¥299', desc: '这是产品三的描述' }
  ];
  
  products.forEach((product, index) => {
    const card = new SaCard(`#product-card-${index + 1}`, {
      header: product.name,
      body: `
        <div style="padding: 1rem 0;">
          <div style="font-size: 1.5rem; font-weight: bold; color: #f56c6c; margin-bottom: 0.5rem;">${product.price}</div>
          <div style="color: #666; margin-bottom: 1rem;">${product.desc}</div>
          <button class="sa-button sa-button--primary" style="width: 100%;">立即购买</button>
        </div>
      `,
      shadow: 'hover'
    });
  });
</script>
加载 SanoUI 组件中...
            
          

Released under the MIT License.