Skip to content
API 风格:

Интервал ​

Контейнер-раскладка, задающий единые отступы между дочерними компонентами; реализован на основе нативного CSS gap. Это контейнер-раскладка (role="presentation"), не участвующий в дереве доступности.

Базовое использование ​

Горизонтальные отступы
vue
<script setup lang="ts">
</script>

<template>
  <LhSpace>
    <LhButton>Кнопка 1</LhButton>
    <LhButton>Кнопка 2</LhButton>
    <LhButton>Кнопка 3</LhButton>
  </LhSpace>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSpace>
    <LhButton>Кнопка 1</LhButton>
    <LhButton>Кнопка 2</LhButton>
    <LhButton>Кнопка 3</LhButton>
  </LhSpace>
</template>

Вертикальные отступы ​

Вертикальные отступы
vue
<script setup lang="ts">
</script>

<template>
  <LhSpace direction="vertical">
    <LhButton>Кнопка 1</LhButton>
    <LhButton>Кнопка 2</LhButton>
  </LhSpace>
</template>
vue
<script>
export default {}
</script>

<template>
  <LhSpace direction="vertical">
    <LhButton>Кнопка 1</LhButton>
    <LhButton>Кнопка 2</LhButton>
  </LhSpace>
</template>

Размер отступа ​

Три предустановленных варианта отображаются на theme-токены --lh-spacing-*; также поддерживаются числа в пикселях или массив [горизонталь, вертикаль].

Размер отступа
vue
<script setup lang="ts">
</script>

<template>
  <!-- Предустановка small -->
  <LhSpace size="small">
    <LhButton>small</LhButton>
    <LhButton>small</LhButton>
  </LhSpace>
  <!-- Предустановка medium -->
  <LhSpace size="medium">
    <LhButton>medium</LhButton>
    <LhButton>medium</LhButton>
  </LhSpace>
  <!-- Предустановка large -->
  <LhSpace size="large">
    <LhButton>large</LhButton>
    <LhButton>large</LhButton>
  </LhSpace>
  <!-- Значение 8px -->
  <LhSpace :size="8">
    <LhButton>8px</LhButton>
    <LhButton>8px</LhButton>
  </LhSpace>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Предустановка small -->
  <LhSpace size="small">
    <LhButton>small</LhButton>
    <LhButton>small</LhButton>
  </LhSpace>
  <!-- Предустановка medium -->
  <LhSpace size="medium">
    <LhButton>medium</LhButton>
    <LhButton>medium</LhButton>
  </LhSpace>
  <!-- Предустановка large -->
  <LhSpace size="large">
    <LhButton>large</LhButton>
    <LhButton>large</LhButton>
  </LhSpace>
  <!-- Значение 8px -->
  <LhSpace :size="8">
    <LhButton>8px</LhButton>
    <LhButton>8px</LhButton>
  </LhSpace>
</template>

Перенос и выравнивание ​

Перенос строк

alignment управляет выравниванием дочерних элементов: по умолчанию по центру, можно переключить на выравнивание по началу или по концу.

Выравнивание
vue
<script setup lang="ts">
</script>

<template>
  <!-- Разрешить перенос строк -->
  <LhSpace wrap>
    <LhTag v-for="n in 12" :key="n">Тег {{ n }}</LhTag>
  </LhSpace>
  <!-- Выравнивание start -->
  <LhSpace alignment="start">
    <LhButton>Выравнивание start</LhButton>
    <span style="height: 48px; line-height: 48px">Высокий контент</span>
  </LhSpace>
  <!-- Выравнивание end -->
  <LhSpace alignment="end">
    <LhButton>Выравнивание end</LhButton>
    <span style="height: 48px; line-height: 48px">Высокий контент</span>
  </LhSpace>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Разрешить перенос строк -->
  <LhSpace wrap>
    <LhTag v-for="n in 12" :key="n">Тег {{ n }}</LhTag>
  </LhSpace>
  <!-- Выравнивание start -->
  <LhSpace alignment="start">
    <LhButton>Выравнивание start</LhButton>
    <span style="height: 48px; line-height: 48px">Высокий контент</span>
  </LhSpace>
  <!-- Выравнивание end -->
  <LhSpace alignment="end">
    <LhButton>Выравнивание end</LhButton>
    <span style="height: 48px; line-height: 48px">Высокий контент</span>
  </LhSpace>
</template>

Space API ​

Props ​

СвойствоОписаниеТипПо умолчанию
directionНаправление расположения"horizontal" | "vertical"'horizontal'
sizeОтступ: предустановка / число в пикселях / [горизонталь, вертикаль]number | "small" | "medium" | "large" | [number, number]'medium'
wrapРазрешить ли перенос строк (только для горизонтального направления)booleantrue
alignmentВыравнивание"start" | "center" | "end" | "baseline"'start'
sxСвойство быстрой вёрстки (например { mt: 2 }), объединяется с инлайновыми стилями и имеет приоритет выше alignmentLhSxProps—

Доступность ​

  • Контейнер — элемент-раскладка с role="presentation", не перехватывает фокус
  • Отступы реализованы через нативный CSS gap, без DOM-обёрток для дочерних элементов

Определения типов ​

Компонент экспортирует следующие структуры TypeScript (автоматически извлечено из исходников packages/components/space/src/types.ts и @lh-ui/share/core/*; раскройте каждый пункт, чтобы увидеть полное определение; описания свойств — в таблице Props выше):

LhSpaceProps
ts
export interface LhSpaceProps {
  /** Направление расположения */
  direction?: 'horizontal' | 'vertical'
  /** Отступ: предустановка / число в пикселях / [горизонталь, вертикаль] */
  size?: LhSpaceSizeInput
  /** Разрешить ли перенос строк (только для горизонтального направления) */
  wrap?: boolean
  /** Выравнивание */
  alignment?: LhSpaceAlignment
  /** Свойство sx для быстрой вёрстки */
  sx?: LhSxProps
}
LhSpaceSizeInput (из @lh-ui/share/core/space)
ts
/**
 * Нормализация отступа: предустановки отображаются на spacing-токены, числа воспринимаются как px
 */
export type LhSpaceSizeInput = 'small' | 'medium' | 'large' | number | [number, number]
LhSpaceAlignment (из @lh-ui/share/core/space)
ts
/** Выравнивание интервала */
export type LhSpaceAlignment = 'start' | 'center' | 'end' | 'baseline'

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