Skip to content
API 风格:

Card カード ​

タイトル・内容・フッターのアクションを格納する情報コンテナです。カード全体をクリック可能にでき(button のキーボードセマンティックを内蔵)、読み込み中のプレースホルダーと sx クイックレイアウトをサポートします。

基本的な使い方 ​

基本的な使い方
夜雨の芭蕉
窓越しに夜の雨を知る、芭蕉が先に音を立てる。
vue
<script setup lang="ts">
</script>

<template>
  <LhCard title="夜雨の芭蕉">
    窓越しに夜の雨を知る、芭蕉が先に音を立てる。
  </LhCard>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhCard title="夜雨の芭蕉">
    窓越しに夜の雨を知る、芭蕉が先に音を立てる。
  </LhCard>
</template>

shadow はシャドウを表示するタイミングを制御します:always(デフォルト)/ hover(ホバー時)/ never。

シャドウのタイミング
ホバー時にシャドウ
ホバーするとシャドウが現れます。
シャドウなし
常にシャドウなし。
vue
<script setup lang="ts">
</script>

<template>
  <LhCard shadow="hover" title="ホバー時にシャドウ">ホバーするとシャドウが現れます。</LhCard>
  <LhCard shadow="never" title="シャドウなし">常にシャドウなし。</LhCard>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhCard shadow="hover" title="ホバー時にシャドウ">ホバーするとシャドウが現れます。</LhCard>
  <LhCard shadow="never" title="シャドウなし">常にシャドウなし。</LhCard>
</template>

ヘッダースロットと extra ​

カスタムヘッダー
カスタムヘッダー操作
header スロットを使うとタイトルエリアを完全に制御できます。
vue
<script setup lang="ts">
</script>

<template>
  <LhCard>
    <template #header><span>カスタムヘッダー</span></template>
    <template #extra>操作</template>
    …
  </LhCard>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhCard>
    <template #header><span>カスタムヘッダー</span></template>
    <template #extra>操作</template>
    …
  </LhCard>
</template>

カバーとフッター ​

カバーとフッター
カバーエリア
本文の内容……
vue
<script setup lang="ts">
</script>

<template>
  <!-- カバーとフッター -->
  <LhCard>
    <template #cover>…</template>
    …
    <template #footer>
      <LhButton size="small">お気に入り</LhButton>
    </template>
  </LhCard>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- カバーとフッター -->
  <LhCard>
    <template #cover>…</template>
    …
    <template #footer>
      <LhButton size="small">お気に入り</LhButton>
    </template>
  </LhCard>
</template>

カード全体をクリック可能 ​

clickable を指定すると、カード全体が button のセマンティックを担います。Tab でフォーカスでき(:focus-visible フォーカスリング)、Enter / Space で click をトリガーします。

クリック可能なカード
クリックしてください
カード全体がクリック可能です。キーボードの Tab でフォーカスして Enter を押してみてください。
vue
<script setup lang="ts">
function onCardClick() {
  console.log('card clicked')
}
</script>

<template>
  <!-- クリック可能なカード -->
  <LhCard clickable title="クリックしてください" @click="onCardClick">…</LhCard>
</template>
vue
<script>
export default {
  methods: {
    onCardClick() {
      console.log('card clicked')
    },
  },
}
</script>

<template>
  <!-- クリック可能なカード -->
  <LhCard clickable title="クリックしてください" @click="onCardClick">…</LhCard>
</template>

読み込み中 ​

読み込み中
読み込み中
vue
<script setup lang="ts">
</script>

<template>
  <LhCard title="読み込み中" loading />
</template>
vue
<script>
export default {}
</script>

<template>
  <LhCard title="読み込み中" loading />
</template>

Card API ​

Props ​

プロパティ説明型デフォルト値
titleカードのタイトル(header スロットでも設定可能)string—
shadowシャドウを表示するタイミング"always" | "hover" | "never"'always'
clickableカード全体をクリック可能にするかどうか(button のキーボードセマンティックを担います)booleanfalse
loading読み込み中の状態:内容エリアがスケルトンでプレースホルダーされますbooleanfalse
themeVarsコンポーネントレベルのテーマ変数(キーに自動的に --lh- プレフィックスが付きます){ [x: string]: string; }—
bgPattern紋様背景の URL(例: var(--lh-pattern-willow))。グローバルのホワイトリスト制限を受けませんstring—
sxsx クイックレイアウトプロパティLhSxProps—

Events ​

イベント説明パラメータ
clickクリック可能なカードがクリックされたとき(マウスまたはキーボードの Enter/Space でトリガー)(e: Event) => void

テーマ変数 ​

以下の CSS 変数が .lh-card でデフォルト値として定義されており、themeVars でグローバルまたはコンポーネントレベルで上書きできます:

変数説明デフォルト値
--lh-card-border-radius角丸border-radius-base + 2px
--lh-card-bg背景色--lh-bg-color
--lh-card-border-colorボーダー色--lh-border-color-light
--lh-card-header-padding / --lh-card-body-padding / --lh-card-footer-padding3 つの領域のパディング14px 20px / 18px 20px / 12px 20px
--lh-card-shadow / --lh-card-shadow-hover通常時/ホバー時のシャドウ墨色を帯びた柔らかな二重シャドウ
--lh-card-loading-bg / --lh-card-loading-highlight読み込みプレースホルダーの地の色/流光ハイライト--lh-border-color-light / 紙色へと明るさを引き上げた混合色

Slots ​

スロット説明
headerカスタムタイトルエリア
extraタイトルエリア右側の追加内容
coverカバー
defaultメインの内容
footerフッター

アクセシビリティ ​

  • クリック可能なカード:role="button" + tabindex="0" + Enter/Space でアクティベート(APG button pattern)
  • 読み込み中:コンテナに aria-busy="true" を付け、プレースホルダー図形はスクリーンリーダーから隠します
  • キーボードのフォーカスリングは :focus-visible を使用し、マウスクリック時には表示されません

型定義 ​

このコンポーネントが外部にエクスポートする TypeScript の型構造を以下に示します(packages/components/card/src/types.ts および @lh-ui/share/core/* のソースから自動抽出。各エントリーをクリックすると完全な定義が表示されます。プロパティの説明は上の Props 表を参照してください):

LhCardProps
ts
export interface LhCardProps {
  /** カードのタイトル(header スロットでも設定可能) */
  title?: string
  /** シャドウを表示するタイミング */
  shadow?: LhCardShadow
  /** カード全体をクリック可能にするかどうか(button のキーボードセマンティックを担います) */
  clickable?: boolean
  /** 読み込み中の状態:内容エリアがスケルトンでプレースホルダーされます */
  loading?: boolean
  /** コンポーネントレベルのテーマ変数(キーに自動的に --lh- プレフィックスが付きます) */
  themeVars?: Record<string, string>
  /** 紋様背景の URL(例: var(--lh-pattern-willow))。グローバルのホワイトリスト制限を受けません */
  bgPattern?: string
  /** sx クイックレイアウトプロパティ */
  sx?: LhSxProps
}
LhCardShadow (@lh-ui/share/core/card より)
ts
/** カードのシャドウ表示タイミング */
export type LhCardShadow = 'always' | 'hover' | 'never'

国風の美で、コードの基を築く