Компонент Link Preview предназначен для визуализации ссылок с расширенной информацией: заголовком страницы, описанием, изображением и другими метаданными. Он часто используется для социальных сетей, мессенджеров и панелей предпросмотра ссылок. В SvelteKit использование таких компонентов значительно упрощается благодаря реактивной архитектуре и возможности серверного рендеринга.
Компонент обычно строится из нескольких блоков:
Контейнер ссылки Контейнер отвечает за обертку
всего превью и задает стили: размеры, отступы, рамку и тень. Часто
используется <a> для полной кликабельности.
<a href={url} class="link-preview">
{#if image}
<img src={image} alt={title} class="link-preview__image" />
{/if}
<div class="link-preview__content">
<h3 class="link-preview__title">{title}</h3>
<p class="link-preview__description">{description}</p>
<span class="link-preview__domain">{domain}</span>
</div>
</a>
Ключевые моменты:
href указывает на ссылку;{#if image}
позволяет компоненту оставаться адаптивным;Секция контента Блок с текстовой информацией
включает заголовок, описание и домен. Для заголовка рекомендуется
использовать <h3> или <h4> в
зависимости от структуры страницы. Описание ограничивается 2–3 строками
с использованием CSS свойства line-clamp для аккуратного
отображения.
.link-preview__description {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}В SvelteKit можно загружать метаданные ссылки на сервере, что позволяет снизить нагрузку на клиент и ускорить время первого отображения:
// src/routes/+page.server.js
import fetch from 'node-fetch';
export async function load({ params }) {
const response = await fetch(`https://api.linkpreview.net/?key=API_KEY&q=${params.url}`);
const data = await response.json();
return {
preview: {
title: data.title,
description: data.description,
image: data.image,
domain: new URL(data.url).hostname
}
};
}
В компоненте SvelteKit:
<script>
export let preview;
</script>
<LinkPreview {preview.title} {preview.description} {preview.image} {preview.domain} url={preview.url} />
Ключевые моменты:
+page.server.js позволяет выполнять
запросы на стороне сервера;props, что
облегчает реактивное обновление и упрощает тестирование.Многие SvelteKit UI libs (например, Svelte Material UI,
Flowbite Svelte, Skeleton) предоставляют
готовые стилизованные компоненты карточек, которые легко адаптировать
под Link Preview. Основные преимущества:
Пример с использованием Skeleton:
<script>
import { Card, CardContent, CardMedia } from '@skeletonlabs/skeleton';
export let title;
export let description;
export let image;
export let domain;
export let url;
</script>
<Card class="link-preview">
{#if image}
<CardMedia src={image} alt={title} />
{/if}
<CardContent>
<h3>{title}</h3>
<p>{description}</p>
<small>{domain}</small>
</CardContent>
</Card>
Для улучшения UX полезно отображать скелетон-загрузку до получения данных:
{#if !preview}
<div class="skeleton skeleton-link-preview"></div>
{:else}
<LinkPreview {...preview} />
{/if}
Стили скелетона:
.skeleton-link-preview {
height: 120px;
background: linear-gradient(90deg, #eee 25%, #ddd 50%, #eee 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
}
@keyframes loading {
0% { background-position: 200% 0; }
100% { background-position: -200% 0; }
}
Для корректного отображения ссылки важно учитывать:
og:title – заголовок страницы;og:description – краткое описание;og:image – изображение;twitter:card и twitter:image – поддержка
Twitter-карточек.SvelteKit позволяет на сервере извлекать эти данные через парсинг HTML или сторонние API.
Этот подход позволяет создавать высокоадаптивные и визуально привлекательные Link Preview компоненты, полностью интегрированные с экосистемой SvelteKit и современными UI-библиотеками.