Звездный рейтинг на javascript и Css: как создать простую систему с нуля

Как создать простую систему звездного рейтинга с помощью javascript и css

Как создать простую систему звездного рейтинга с помощью JavaScript и CSS

Интерактивный звездный рейтинг — простой, но мощный инструмент, который помогает пользователю выразить мнение, а владельцу сайта — собрать обратную связь. Ты наверняка встречал его на сайтах отзывов, интернет-магазинах и в блогах. В этой статье мы разберёмся, как сделать простую систему рейтинга CSS + JavaScript, но с парой нестандартных улучшений для лучшего UX.

Что нам понадобится для старта

Никаких фреймворков — только HTML, CSS и чистый JavaScript. Такой подход остаётся лёгким для восприятия и гибким для кастомизации. Пользуемся базовыми инструментами, чтобы максимально контролировать внешний вид и поведение рейтинга.

Вот базовая структура:

```html





```

Каждая звезда — это символ Unicode, который не требует изображений или иконок.

Стилизация: простая система рейтинга CSS

Как создать простую систему звездного рейтинга с помощью JavaScript и CSS - иллюстрация

Добавим немного стилей, чтобы звёзды выглядели выразительно и реагировали на наведение курсора:

```css
.star-rating span {
font-size: 2rem;
color: #ccc;
cursor: pointer;
transition: color 0.2s;
}

.star-rating span.hover,
.star-rating span.selected {
color: gold;
}
```

Такой CSS звездный рейтинг легко масштабируется. Можно менять размер шрифта, цвет и даже использовать анимации. Это минимализм, который работает.

Нестандартное решение: полузвёзды без SVG

Многие реализации рейтинга в JavaScript используют SVG для половинчатых оценок, но можно обойтись без него. Вместо этого — использовать градиент фона:

```css
.star-rating span.half::before {
content: '★';
position: absolute;
width: 50%;
overflow: hidden;
color: gold;
}
```

Такой подход позволяет реализовать полузвезды даже без JavaScript, просто меняя класс элемента.

Добавим интерактивность: реализация рейтинга в JavaScript

Как создать простую систему звездного рейтинга с помощью JavaScript и CSS - иллюстрация

Теперь подключим простой скрипт, чтобы звёзды реагировали на клик и наведение:

```javascript
const stars = document.querySelectorAll('.star-rating span');
let currentRating = 0;

stars.forEach(star => {
star.addEventListener('mouseover', () => {
resetStars();
highlightStars(star.dataset.value);
});

star.addEventListener('click', () => {
currentRating = star.dataset.value;
setRating(currentRating);
});

star.addEventListener('mouseout', () => {
resetStars();
if (currentRating) setRating(currentRating);
});
});

function highlightStars(rating) {
stars.forEach(star => {
if (star.dataset.value <= rating) { star.classList.add('hover'); } }); } function setRating(rating) { stars.forEach(star => {
star.classList.remove('selected');
if (star.dataset.value <= rating) { star.classList.add('selected'); } }); } function resetStars() { stars.forEach(star => {
star.classList.remove('hover');
});
}
```

Этот код отслеживает наведение и клик, изменяя классы. Всё просто, прозрачно, без лишних библиотек.

Как сохранить рейтинг? Идея для бэкенда

Как создать простую систему звездного рейтинга с помощью JavaScript и CSS - иллюстрация

Если хочешь, чтобы рейтинг сохранялся, отправь его через `fetch()` на сервер:

```javascript
fetch('/save-rating', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({rating: currentRating})
})
.then(res => res.json())
.then(data => console.log(data));
```

Это уже за пределами фронтенда, но важно понимать, как интегрировать звездный рейтинг на сайте с серверной частью.

Расширяем функциональность: нестандартные идеи

Хочешь выйти за рамки стандартного UX? Вот несколько необычных решений:

1. Анимация при выборе — добавь scale или rotate к звезде при клике. Это вызывает микроудовольствие у пользователя.
2. Динамический текст — меняй текстовую подпись в зависимости от оценки (например: "Ужасно", "Отлично").
3. Цветовая палитра — пусть цвет звёзд зависит от значения (1 — красный, 5 — зелёный). Это поможет пользователю быстрее визуализировать оценку.
4. Ленивый рендеринг — показывай рейтинг только при наведении на блок или скролле в область, чтобы экономить ресурсы.
5. Доступность — добавь `aria-label` и управление с клавиатуры для инклюзивности.

Итог: просто, но гибко

Создание звездного рейтинга JavaScript и CSS — это не только вопрос кода, но и внимания к деталям. Даже простая система может быть функциональной и приятной в использовании, если подумать об анимации, доступности и внешнем виде. На первый взгляд — всего пять звёзд, а возможностей — десятки.

Если ты хочешь внедрить звездный рейтинг на сайте, не обязательно прибегать к готовым библиотекам. Простая реализация рейтинга в JavaScript может быть адаптирована под любой проект, а CSS даст возможность кастомизировать отображение до мелочей.

Scroll to Top