Как создать рейтинговую систему с звездами, где звезды будут закрашены частично в зависимости от значения рейтинга?

Здравствуйте.
Как добавить возможность отображать дробный рейтинг в звездном snippet, сохраняя при этом легкую масштабируемость, если обычно используется иконочный шрифт?
  • 5 января 2024 г. 17:18
Ответы на вопрос 2
Для создания рейтинговой системы со звёздами, которые могут быть закрашены частично, вы можете использовать технику с использованием HTML, CSS и возможно JavaScript (если нужна интерактивность). Представим, что вы используете иконочный шрифт для отображения звёзд. В этом случае одним из подходов является использование блочных элементов с маскированием или затенением, чтобы показать частично закрашенные звёзды.

Вот пример реализации на CSS с использованием иконочного шрифта (например, Font Awesome):

HTML:

```html
<!-- Рейтинговый элемент -->
<div class="star-rating">
    <!-- Полные звёзды (целая часть рейтинга) -->
    <i class="fa fa-star"></i>
    <i class="fa fa-star"></i>
    <i class="fa fa-star"></i>
    
    <!-- Частичная звезда (дробная часть рейтинга) -->
    <div class="star-half-wrapper">
        <i class="fa fa-star" aria-hidden="true"></i>
        <div class="star-half" style="width: 50%;"></div>
    </div>
    
    <!-- Пустые звёзды -->
    <i class="fa fa-star-o"></i>
    <i class="fa fa-star-o"></i>
</div>
```
CSS:

```css
/* Базовый стиль звёзд */
.star-rating .fa {
    color: #ffd700; /* цвет звёзд */
}

/* Стиль обёртки для частично закрашенной звезды */
.star-half-wrapper {
    position: relative;
    display: inline-block;
}

/* Для пустых звёзд можно использовать другой цвет или оставить им тот же цвет, что и у закрашенных */
.star-rating .fa-star-o {
    color: #ccc; /* цвет звёзд */
}

/* Частичная звезда */
.star-half-wrapper .star-half {
    position: absolute;
    top: 0;
    left: 0;
    overflow: hidden;
    white-space: nowrap;
    width: 0; /* начальная ширина - 0, будет установлена через inline-стиль */
    z-index: 1;
}

.star-half-wrapper .fa {
    color: #ccc; /* цвет пустых звёзд */
}

.star-half-wrapper .star-half {
    color: #ffd700; /* цвет закрашенной части звёзд */
}
```

В этом примере отображается 5 звёзд, где 3 полностью закрашенных звезды, одна частично закрашенная на 50% (дробная часть рейтинга), и одна пустая звезда. Вы можете обновлять ширину элемента `.star-half`, чтобы это соответствовало вашему рейтингу (например, если рейтинг 3.5, то ширина будет 50%).

Важно подставлять ширину частичной звезды динамически, в зависимости от рейтинга, который вы хотите отобразить. Это можно сделать через inline-стиль, как показано выше, или через JavaScript, если данные о рейтинге обновляются динамически.

Если вы хотите использовать чистый CSS, без JavaScript, Вам следует предварительно подготовить классы или инлайн-стили для разных дробных значений звезд, например `.star-half-50` или `.star-half-75` для 50% и 75% соответственно.

Если рейтинг в вашем приложении должен быть
Похожие вопросы