В SvelteKit label является неотъемлемым элементом при
работе с формами. Он служит для явной привязки текстового описания к
полю ввода, обеспечивая доступность и улучшая
пользовательский опыт. Стандартный HTML-элемент
<label> можно использовать как напрямую, так и через
Svelte-компоненты UI-библиотек, интегрируемых с SvelteKit.
Пример базовой структуры:
<label for="username">Имя пользователя</label>
<input id="username" type="text" bind:value={username} />
Ключевой момент: атрибут for в
<label> должен точно совпадать с id
элемента формы. Это позволяет клику по тексту фокусировать поле
ввода, что особенно важно для интерактивных интерфейсов.
Современные Svelte UI-библиотеки (например, Svelte Material
UI, Flowbite Svelte,
SvelteStrap) предоставляют готовые компоненты
<TextField>, <Input>,
<Checkbox> и другие, которые уже включают поддержку
label.
Пример с Svelte Material UI:
<script>
import TextField from '@smui/textfield';
let email = '';
</script>
<TextField bind:value={email} label="Email" type="email" />
В этом случае label автоматически рендерится внутри
компонента и связывается с полем ввода через внутренний механизм
библиотеки. Такой подход облегчает поддержку стилей и анимаций
(например, плавающий лейбл при фокусе).
1. Label и Checkbox / Radio
Для чекбоксов и радио-кнопок важно, чтобы label
охватывал сам элемент или был связан через for. В
UI-библиотеках это часто реализуется через обертку компонента.
<script>
import Checkbox from 'flowbite-svelte/Checkbox';
let agree = false;
</script>
<Checkbox bind:checked={agree} id="terms" />
<label for="terms">Я согласен с условиями</label>
При использовании обертки:
<Checkbox bind:checked={agree}>
Я согласен с условиями
</Checkbox>
Такой синтаксис автоматически создает ассоциацию label →
input.
2. Label и Sel ect / Dropdown
Для селектов привязка через for сохраняет удобство и
доступность:
<script>
import Sel ect fr om '@smui/sel ect';
let selected = '';
</script>
<label for="fruit">Выберите фрукт</label>
<Select id="fruit" bind:value={selected}>
<option value="apple">Яблоко</option>
<option value="orange">Апельсин</option>
</Select>
Многие UI-библиотеки предлагают плавающие лейблы,
которые перемещаются при фокусе на поле ввода. В SvelteKit это
достигается через динамическое связывание class и
реактивные переменные.
<script>
let name = '';
let isFocused = false;
</script>
<div class="input-wrapper">
<input
bind:value={name}
on:focus={() => isFocused = true}
on:blur={() => isFocused = false}
id="fullName" />
<label class:is-floating={isFocused || name} for="fullName">Полное имя</label>
</div>
<style>
.input-wrapper { position: relative; }
label { position: absolute; left: 10px; top: 12px; transition: 0.2s; }
label.is-floating { top: -8px; font-size: 12px; color: #555; }
</style>
При создании форм с несколькими полями удобно использовать композицию компонентов:
<script>
import { TextField } fr om '@smui/textfield';
import { Button } fr om '@smui/button';
let formData = { username: '', email: '', password: '' };
</script>
<form on:submit|preventDefault={() => console.log(formData)}>
<TextField bind:value={formData.username} label="Имя пользователя" />
<TextField bind:value={formData.email} label="Email" type="email" />
<TextField bind:value={formData.password} label="Пароль" type="password" />
<Button type="submit">Отправить</Button>
</form>
Здесь каждый label встроен в компонент, что упрощает
обработку валидации, стилизацию и реактивное
обновление состояния формы.
label с полем через for
или использовать встроенные свойства компонента.bind:value.Использование label в SvelteKit UI-библиотеках
обеспечивает доступность, упрощает управление формами и
поддерживает современные визуальные паттерны, такие как плавающие и
анимированные лейблы. Комплексные формы становятся структурированными,
легко масштабируемыми и реактивными без лишнего дублирования кода.