Skip to content
API 风格:

Карточка ​

Информационный контейнер с заголовком, содержимым и нижней областью действий. Может быть кликабельным целиком (с семантикой 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; }—
bgPatternURL фонового узора (например var(--lh-pattern-willow)); не подчиняется глобальному белому спискуstring—
sxСокращённые свойства компоновки sxLhSxProps—

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-paddingВнутренние отступы трёх областей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)
  • Состояние загрузки: контейнер 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'

Красота традиций — основа кода