Checkbox — это элемент формы, позволяющий пользователю выбирать один или несколько вариантов из набора. В SvelteKit Checkbox реализуется через компонент с двусторонней привязкой значения, что упрощает управление состоянием.
Пример базового использования:
<script>
let accepted = false;
</script>
<input type="checkbox" bind:checked={accepted} />
<label>Согласен с условиями</label>
Ключевые моменты:
bind:checked позволяет автоматически синхронизировать
состояние компонента с переменной.true/false) или массивы для группы
чекбоксов.Для множественного выбора удобно использовать массив:
<script>
let selectedFruits = [];
const fruits = ['Яблоко', 'Банан', 'Вишня'];
</script>
{#each fruits as fruit}
<label>
<input
type="checkbox"
value={fruit}
on:change="{() => toggleFruit(fruit)}"
checked={selectedFruits.includes(fruit)}
/>
{fruit}
</label>
{/each}
<script>
function toggleFruit(fruit) {
if (selectedFruits.includes(fruit)) {
selectedFruits = selectedFruits.filter(f => f !== fruit);
} else {
selectedFruits = [...selectedFruits, fruit];
}
}
</script>
Особенности:
checked={selectedFruits.includes(fruit)} обеспечивает
визуальную синхронизацию состояния.on:change позволяет контролировать
добавление и удаление элементов из массива.SvelteKit UI-библиотеки, такие как Svelte Material UI, SvelteStrap или Flowbite Svelte, предоставляют готовые компоненты с расширенными стилями.
Пример кастомного Checkbox с Tailwind:
<label class="flex items-center space-x-2">
<input type="checkbox" bind:checked={accepted} class="w-5 h-5 text-blue-600 border-gray-300 rounded focus:ring-blue-500" />
<span>Принять правила</span>
</label>
Советы по стилям:
focus:ring для доступности.w-5 h-5).Switch — это визуальный аналог Checkbox, обычно используемый для включения/выключения состояния, чаще в интерфейсах настроек. Switch имеет более современный вид и часто поддерживает анимацию при переключении.
Пример базового Switch в Svelte:
<script>
let isEnabled = false;
</script>
<label class="flex items-center cursor-pointer">
<div class="relative">
<input type="checkbox" bind:checked={isEnabled} class="sr-only" />
<div class="w-10 h-4 bg-gray-300 rounded-full shadow-inner"></div>
<div
class="dot absolute w-6 h-6 bg-white rounded-full shadow -left-1 -top-1 transition"
class:translate-x-full={isEnabled}
></div>
</div>
<span class="ml-3 text-gray-700">Включить уведомления</span>
</label>
Ключевые моменты Switch:
sr-only для скрытия оригинального
чекбокса и обеспечения доступности.class:translate-x-full={isEnabled}).Checkbox и Switch поддерживают стандартные события формы:
change — срабатывает при изменении состояния.input — более детальное отслеживание ввода.bind:checked обеспечивает реактивную привязку состояния
к переменной.Пример логирования изменений:
<input type="checkbox" bind:checked={accepted} on:change="{() => console.log(accepted)}" />
Checkbox и Switch можно использовать в составе форм с валидацией:
<script>
let termsAccepted = false;
function handleSubmit() {
if (!termsAccepted) {
alert('Необходимо принять условия');
return;
}
console.log('Форма отправлена');
}
</script>
<form on:submit|preventDefault={handleSubmit}>
<label>
<input type="checkbox" bind:checked={termsAccepted} />
Принять условия
</label>
<button type="submit" class="mt-2 px-4 py-2 bg-blue-600 text-white rounded">Отправить</button>
</form>
Особенности интеграции:
on:submit|preventDefault предотвращает стандартное
поведение формы.Checkbox и Switch с анимацией ripple и готовой
стилизацией под Material Design.Checkbox с
темной темой и встроенные transition для Switch.Эти библиотеки упрощают реализацию, избавляя от ручного написания
стилей и анимаций, а также обеспечивают готовую доступность
(aria-* атрибуты, focus states).
bind:checked для реактивного управления
состоянием.input для Switch
с sr-only, корректные label.Checkbox и Switch в SvelteKit позволяют гибко управлять состоянием интерфейса, обеспечивают реактивность и простоту интеграции в формы, при этом сочетая мощь Tailwind и готовых UI-библиотек для красивого визуального оформления.