Карточки (cards) представляют собой универсальный компонент для отображения компактной информации, сочетая текст, изображения и действия. В экосистеме SvelteKit они реализуются с использованием различных UI-библиотек, таких как Svelte Material UI (SMUI), SvelteStrap, Flowbite Svelte или Carbon Components Svelte. Рассмотрим их детальную структуру и способы кастомизации.
Стандартная карточка состоит из нескольких логических блоков:
Пример базовой карточки с Flowbite Svelte:
<script>
import { Card, CardBody, CardFooter } from 'flowbite-svelte';
</script>
<Card class="max-w-sm">
<img src="/example.jpg" alt="Пример изображения" class="rounded-t-lg"/>
<CardBody>
<h5 class="text-xl font-bold">Заголовок карточки</h5>
<p class="text-gray-700">Описание или контент карточки, который помогает пользователю понять назначение элемента.</p>
</CardBody>
<CardFooter>
<button class="bg-blue-500 text-white px-4 py-2 rounded">Действие</button>
</CardFooter>
</Card>
Ключевые моменты:
CardBody и CardFooter
структурирует контент.<img>
или через CSS как фоновое изображение.Подходят для списков продуктов, новостей или профилей пользователей. Основная идея — разместить изображение и текст рядом.
<Card class="flex max-w-2xl">
<img src="/avatar.png" alt="Аватар" class="w-1/3 rounded-l-lg"/>
<CardBody class="flex-1 p-4">
<h5 class="text-lg font-semibold">Имя пользователя</h5>
<p>Описание профиля или краткая информация о пользователе.</p>
</CardBody>
</Card>
Особенности:
flex для горизонтальной компоновки.flex-1.Для интерактивных интерфейсов часто добавляют тени или трансформацию при наведении.
<Card class="max-w-sm hover:shadow-lg transform hover:scale-105 transition-all duration-300">
<CardBody>
<h5 class="font-bold text-lg">Карточка с эффектом</h5>
<p>Плавное увеличение при наведении на карточку.</p>
</CardBody>
</Card>
Ключевые моменты:
hover:shadow-lg добавляет тень при наведении.transform hover:scale-105 увеличивает карточку на
5%.transition-all duration-300 обеспечивает плавную
анимацию.SvelteKit позволяет легко рендерить карточки на основе массивов
данных через #each блоки:
<script>
import { Card, CardBody } from 'flowbite-svelte';
const products = [
{ id: 1, title: 'Продукт 1', description: 'Описание продукта 1', image: '/prod1.jpg' },
{ id: 2, title: 'Продукт 2', description: 'Описание продукта 2', image: '/prod2.jpg' }
];
</script>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
{#each products as product}
<Card>
<img src={product.image} alt={product.title} class="rounded-t-lg"/>
<CardBody>
<h5 class="text-lg font-bold">{product.title}</h5>
<p>{product.description}</p>
</CardBody>
</Card>
{/each}
</div>
Особенности:
grid с Tailwind для адаптивного
расположения.#each.UI-библиотеки Svelte часто предоставляют пропсы для настройки:
size,
class с Tailwind)bg-gray-100,
bg-white, bg-blue-50)shadow-md,
rounded-lg, border)flex,
grid, gap)Например, карточка с кастомной цветовой схемой:
<Card class="bg-gradient-to-r from-blue-400 to-purple-500 text-white shadow-xl rounded-xl">
<CardBody>
<h5 class="text-xl font-bold">Градиентная карточка</h5>
<p>Можно использовать градиенты и кастомные цвета для выделения карточки.</p>
</CardBody>
</Card>
Для динамических интерфейсов карточки можно анимировать с помощью Svelte Transition:
<script>
import { fly } from 'svelte/transition';
import { Card, CardBody } from 'flowbite-svelte';
</script>
<Card in:fly={{ y: 50, duration: 400 }}>
<CardBody>
<h5 class="font-bold text-lg">Анимированная карточка</h5>
<p>Карточка появляется с эффектом вылета снизу.</p>
</CardBody>
</Card>
Особенности:
in:fly позволяет задавать направление, скорость и
задержку.fade, slide,
scale.Карточки в SvelteKit через UI-библиотеки представляют собой модульные, адаптивные и кастомизируемые элементы, которые легко интегрируются с динамическими данными и современными эффектами. Ключевые принципы:
#each
блоки.Карточка становится не просто визуальным элементом, а полноценным компонентом интерфейса, готовым к интеграции в любую SvelteKit-приложение.