Реализация выбора размера по клику
При разработке интернет-магазинов или каталогов часто возникает необходимость дать пользователю возможность выбрать размер товара простым кликом. Такая интерактивность улучшает пользовательский опыт (UX) и повышает конверсию. В этой статье разберём, как реализовать выбор размера по клику с помощью HTML, CSS и JavaScript.
Базовая структура HTML для выбора размера
Для начала создадим контейнер с кнопками или элементами, каждый из которых соответствует определённому размеру. Используем атрибуты data-size для хранения значения.
<div class="size-selector">
<button class="size-option" data-size="S">S</button>
<button class="size-option" data-size="M">M</button>
<button class="size-option" data-size="L">L</button>
<button class="size-option" data-size="XL">XL</button>
</div>
<p id="selected-size">Выбран: -</p>Стилизация активного состояния (CSS)
Добавим стили, чтобы выделить выбранный пункт. Используем класс .active для визуальной обратной связи.
.size-option {
padding: 10px 20px;
margin: 5px;
border: 2px solid #ccc;
background: #fff;
cursor: pointer;
transition: 0.2s;
}
.size-option.active {
border-color: #3498db;
background: #3498db;
color: #fff;
}Логика выбора на JavaScript
Теперь напишем скрипт, который по клику добавляет класс active выбранному элементу и убирает его у остальных. Также обновляем отображение выбранного размера.
const options = document.querySelectorAll('.size-option');
const output = document.getElementById('selected-size');
options.forEach(btn => {
btn.addEventListener('click', function() {
// Убираем активный класс у всех
options.forEach(b => b.classList.remove('active'));
// Добавляем активный класс текущему
this.classList.add('active');
// Обновляем текст
output.textContent = 'Выбран: ' + this.dataset.size;
});
});Альтернативный способ: радиокнопки со стилизацией
Иногда удобнее использовать скрытые радиокнопки, но визуально отображать метки. Это более семантично для форм и не требует JavaScript для отправки данных.
<div class="size-selector">
<input type="radio" name="size" id="size-s" value="S">
<label for="size-s">S</label>
<input type="radio" name="size" id="size-m" value="M">
<label for="size-m">M</label>
</div>Стилизуем label как кнопки, а input прячем: input[type="radio"] { display: none; }. При клике на label радиокнопка становится выбранной, и через CSS-селектор :checked + label можно менять внешний вид.
Улучшение UX: анимация и доступность
Для лучшего взаимодействия добавьте плавный переход (transition) и поддержку клавиатуры: используйте role="radio" и aria-checked. Это поможет людям с ограниченными возможностями и позитивно скажется на SEO.
Часто задаваемые вопросы
- Как передать выбранный размер в корзину? Используйте скрытое поле формы или JavaScript для сохранения значения в переменной при клике.
- Можно ли сделать выбор размера без JavaScript? Да, с помощью радиокнопок и CSS - это полностью рабочее решение для статичных форм.
- Как обработать выбор на сервере? При отправке формы значение размера будет в
$_POST['size'](PHP) или аналогично в других языках.