Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 225

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

23.06.2025, 14:45. Показов 1569. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть такая страница
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="/src/style.css" />
    <link href="https://fonts.googleapis.com/css2?family=Merriweather:ital,opsz,wght@0,18..144,300..900;1,18..144,300..900&display=swap" rel="stylesheet">
    <title>Star Rating Component - FrontendPro Challenge</title>
    <style>
      * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;  
        }
      body {
        background-color: #E2E8F0;
      }
      .box {
        width: 775px;
        height: 421px;
        border-radius: 16px;
        position: absolute;
        transform: translate(50%, -50%);
        top: 50%;
        right: 50%;
        background-color: #FFFFFF;
        box-shadow: 15px 15px 10px 0 rgb(231, 231, 231);
        display: flex;
        flex-direction: column;
        align-content: space-between;
        justify-content: center;
        gap: 50px;
      }
      .h1-box {
       display: flex;
       justify-items: center; 
       align-items: center;
       margin-left: auto;
       margin-right: auto;
      }
      .h1-box h1 {
        font: 700 24px "Merriweather", serif;
        color: #000000;
        background-color: #FFFFFF;
        
      }
      .stars-box {
        width: 548px;
        height: 88px;
        display: flex;
        justify-content: space-between;
        margin-left: auto;
        margin-right: auto;
      }
      .box p {
        font: 200 18px "Merriweather", serif;
        text-align: center;
        margin-left: auto;
       margin-right: auto;
        width: 647px;
      }
      .star-checkbox {
        display: none;
      }
      .star-check {
        background-image: url("design/Vector.png");
        width: 77px;
        height: 74px;
      }
      .star-check:hover {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox:checked ~ .star-check {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox2 {
        display: none;
      }
      .star-check2 {
        background-image: url("design/Vector.png");
        width: 77px;
        height: 74px;
      }
      .star-check2:hover {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox2:checked ~ .star-check2 {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox3 {
        display: none;
      }
      .star-check3 {
        background-image: url("design/Vector.png");
        width: 77px;
        height: 74px;
      }
      .star-check3:hover {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox3:checked ~ .star-check3 {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox4 {
        display: none;
      }
      .star-check4 {
        background-image: url("design/Vector.png");
        width: 77px;
        height: 74px;
      }
      .star-check4:hover {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox4:checked ~ .star-check4 {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox5 {
        display: none;
      }
      .star-check5 {
        background-image: url("design/Vector.png");
        width: 77px;
        height: 74px;
      }
      .star-check5:hover {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
      .star-checkbox5:checked ~ .star-check5 {
        background-image: url("design/Vector2.png");
        width: 77px;
        height: 74px;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <div class="h1-box">
        <h1>How many stars would you give to our
        Online Code Editor?
        </h1>
        </div>
      
        <div class="stars-box">
          <input type="checkbox" id="star-checkbox" class="star-checkbox">
            <label for="star-checkbox" class="star-check"></label>
          <input type="checkbox" id="star-checkbox2" class="star-checkbox2">
            <label for="star-checkbox2" class="star-check2"></label>
          <input type="checkbox" id="star-checkbox3" class="star-checkbox3">
            <label for="star-checkbox3" class="star-check3"></label>
          <input type="checkbox" id="star-checkbox4" class="star-checkbox4">
            <label for="star-checkbox4" class="star-check4"></label>
          <input type="checkbox" id="star-checkbox5" class="star-checkbox5">
            <label for="star-checkbox" class="star-check5"></label>
        </div>
          <p>Thank you for your feedback. We're sorry to hear that your experience wasn't perfect. We would love to hear more about your concerns to see how we can improve.</p>
        
    </div>
    <script src="/src/script.js"></script>
  </body>
</html>
как сделать в css чтобы при выборе и наведении скажем 5-й зведочки закрашивались соответсвенно все пять звезд, при выборе третей первые три звезды и так далее?
Вложения
Тип файла: zip star-rating-component.zip (91.2 Кб, 0 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2025, 14:45
Ответы с готовыми решениями:

Для чего 2 строчки в HTML и звездочка в CSS
Привет. I. Подскажите пожалуйста. Для чего на сайтах вставляют &lt;!DOCTYPE html PUBLIC...

Звёздочка перед именем свойства CSS
Всем привет, в bootstrap.css наткнулся на звёздочки перед именами свойств, например: .btn { ...

Как создать фон сайта с помощью CSS и где почитать про использование CSS
Как создать фон сайта с помощью CSS, приведите пример пожалуйста. И если будет не сложно подскажите...

7
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3834 / 1678 / 431
Регистрация: 14.03.2022
Сообщений: 4,235
23.06.2025, 15:14
Лучший ответ Сообщение было отмечено trofey2 как решение

Решение

Цитата Сообщение от trofey2 Посмотреть сообщение
Как сделать рейтинг со звездочками при помощи css
Достаточно в поисковике вбить запрос "рейтинг со звездочками при помощи css"
И вот первый же вариант.

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<style>
.rating-area {
    overflow: hidden;
    width: 265px;
    margin: 0 auto;
}
.rating-area:not(:checked) > input {
    display: none;
}
.rating-area:not(:checked) > label {
    float: right;
    width: 42px;
    padding: 0;
    cursor: pointer;
    font-size: 32px;
    line-height: 32px;
    color: lightgrey;
    text-shadow: 1px 1px #bbb;
}
.rating-area:not(:checked) > label:before {
    content: '★';
}
.rating-area > input:checked ~ label {
    color: gold;
    text-shadow: 1px 1px #c60;
}
.rating-area:not(:checked) > label:hover,
.rating-area:not(:checked) > label:hover ~ label {
    color: gold;
}
.rating-area > input:checked + label:hover,
.rating-area > input:checked + label:hover ~ label,
.rating-area > input:checked ~ label:hover,
.rating-area > input:checked ~ label:hover ~ label,
.rating-area > label:hover ~ input:checked ~ label {
    color: gold;
    text-shadow: 1px 1px goldenrod;
}
.rate-area > label:active {
    position: relative;
}
</style>
 
<div class="rating-area">
    <input type="radio" id="star-5" name="rating" value="5">
    <label for="star-5" title="Оценка «5»"></label> 
    <input type="radio" id="star-4" name="rating" value="4">
    <label for="star-4" title="Оценка «4»"></label>    
    <input type="radio" id="star-3" name="rating" value="3">
    <label for="star-3" title="Оценка «3»"></label>  
    <input type="radio" id="star-2" name="rating" value="2">
    <label for="star-2" title="Оценка «2»"></label>    
    <input type="radio" id="star-1" name="rating" value="1">
    <label for="star-1" title="Оценка «1»"></label>
</div>
1
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 225
01.07.2025, 11:27  [ТС]
спасибо. только можете объяснить как получается что при наведении мыши и клик на звездочку подсвечиваются все предыдущие? у меня в результате оно так выглядит -
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="/src/style.css" />
    <link href="https://fonts.googleapis.com/css2?family=Merriweather:ital,opsz,wght@0,18..144,300..900;1,18..144,300..900&display=swap" rel="stylesheet">
    <title>Star Rating Component - FrontendPro Challenge</title>
    <style>
* {
        margin: 0;
        padding: 0;
        box-sizing: border-box;  
    }
body {
    background-color: #E2E8F0;
}
.box {
    width: 775px;
    height: 421px;
    border-radius: 16px;
    position: absolute;
    transform: translate(50%, -50%);
    top: 50%;
    right: 50%;
    background-color: #FFFFFF;
    box-shadow: 15px 15px 10px 0 rgb(231, 231, 231);
    display: flex;
    flex-direction: column;
    align-content: space-between;
    justify-content: center;
    gap: 50px;
}
.h1-box {
    display: flex;
    justify-items: center; 
    align-items: center;
    margin-left: auto;
    margin-right: auto;
}
.h1-box h1 {
    font: 700 24px "Merriweather", serif;
    color: #000000;
    background-color: #FFFFFF;
}
.box p {
    font: 200 18px "Merriweather", serif;
    text-align: center;
    margin-left: auto;
    margin-right: auto;
    width: 647px;
}
.rating-area {
    overflow: hidden;
    display: flex;
    flex-direction: row-reverse;
    gap: 20px;
    margin: 0 auto;
}
.rating-area:not(:checked) > input {
    display: none;
}
.rating-area:not(:checked) > label {
    float: right;
    width: 77px;
    padding: 0;
    cursor: pointer;
    font-size: 32px;
    line-height: 32px;
    color: lightgrey;
    text-shadow: 1px 1px #bbb;
    
}
.rating-area:not(:checked) > label:before {
    content: url("design/Vector.png");
}
.rating-area > input:checked ~ label {
    content: url("design/Vector2.png");
}
.rating-area:not(:checked) > label:hover,
.rating-area:not(:checked) > label:hover ~ label {
    content: url("design/Vector2.png");
}
.rate-area > label:active {
    position: relative;
}
    @media screen and (max-width: 834px) {
      .box {
        width: 550px;
        height: 421px;
      }
      .box p {
        font: 200 16px "Merriweather", serif;
        width: 400px;
      }
      .h1-box h1 {
        font: 700 24px "Merriweather", serif;
        width: 400px;
        text-align: center;
      }
    }
    </style>
  </head>
  <body>
    <div class="box">
<div class="h1-box">
    <h1>How many stars would you give to our
    Online Code Editor?
    </h1>
</div>
 
    <div class="rating-area">
        <input type="radio" id="star-5" name="rating" value="5">
        <label for="star-5" title="Оценка «5»"></label> 
        <input type="radio" id="star-4" name="rating" value="4">
        <label for="star-4" title="Оценка «4»"></label>    
        <input type="radio" id="star-3" name="rating" value="3">
        <label for="star-3" title="Оценка «3»"></label>  
        <input type="radio" id="star-2" name="rating" value="2">
        <label for="star-2" title="Оценка «2»"></label>    
        <input type="radio" id="star-1" name="rating" value="1">
        <label for="star-1" title="Оценка «1»"></label>
    </div>
        <p>Thank you for your feedback. We're sorry to hear that your experience wasn't perfect. We would love to hear more about your concerns to see how we can improve.</p>
    
</div>
 
<script>
document.querySelector('.rating-area').addEventListener('change', e => {
    alert(`вы выбрали ${e.target.value} звезды`)
})
</script>
  </body>
</html>
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3834 / 1678 / 431
Регистрация: 14.03.2022
Сообщений: 4,235
01.07.2025, 16:28
Цитата Сообщение от trofey2 Посмотреть сообщение
у меня в результате оно так выглядит
Если скопировать и запустить твой пример - там звезд вообще не видно.
Т.ч. не понятно что там у тебя вообще.

Добавлено через 1 минуту
P.S.
Получается странная ситуация...
Взять готовый и работающий пример. Изуродовать его так, чтобы не работал. Потом начать интересоваться - а почему собственно не работает?
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 225
02.07.2025, 13:41  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Если скопировать и запустить твой пример - там звезд вообще не видно.
Т.ч. не понятно что там у тебя вообще.
все там работает, просто непонятно как, хотелось бы если не сложно чтобы подразжевали как при наведении мыши и клик на звездочку подсвечиваются все предыдущие. а у вас звезд не видно потому что там картинки есть, я приложу архив со страницей, там смотрите index.html
Вложения
Тип файла: zip star-rating-component2.zip (94.2 Кб, 5 просмотров)
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,833
02.07.2025, 14:19
Цитата Сообщение от trofey2 Посмотреть сообщение
как при наведении мыши и клик на звездочку подсвечиваются все предыдущие.
Тут используется родственный комбинатор ~
CSS
1
2
3
4
.rating-area:not(:checked) > label:hover,
.rating-area:not(:checked) > label:hover ~ label {
    content: url("design/Vector2.png");
}
Который выбирает все последующие родственные элементы.. А звездочки расположены в обратном порядке.
1
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3834 / 1678 / 431
Регистрация: 14.03.2022
Сообщений: 4,235
02.07.2025, 14:35
Цитата Сообщение от trofey2 Посмотреть сообщение
хотелось бы если не сложно чтобы подразжевали
Вроде уже камрад sad67man все и рассказал...
Есть два момента:
- селектор
- показ элементов в обратном порядке

Основная задача селектора обобщённых родственных элементов — выбор элемента (-ов), идущего после заданного элемента, и имеющего с ним общего родителя.
Вот статейка - там подробно, с примерами рассматривается как работает селектор обобщённых родственных элементов.
https://habr.com/ru/articles/150720/
Потом добавляется вывод элементов в обратном порядке и создается вот такой эффект с выделением...
1
928 / 550 / 292
Регистрация: 07.11.2022
Сообщений: 901
02.07.2025, 15:04
Цитата Сообщение от trofey2 Посмотреть сообщение
как при наведении мыши и клик на звездочку подсвечиваются все предыдущие
Ознакомьтесь с описанием Селектора следующего элемента ~:
The subsequent-sibling combinator (~, a tilde) separates two selectors and matches all instances of the second element that follow the first element (not necessarily immediately) and share the same parent element.
Он помогает выбрать все элементы, следующие за указанным.
Т.е. ваши css-правила
CSS
79
80
81
82
.rating-area:not(:checked) > label:hover,
.rating-area:not(:checked) > label:hover ~ label {
    content: url("design/Vector2.png");
}
говорят, что
(79 строка) метка (label) под курсором мыши (label:hover) будет подсвечиваться (будет содержать изображение "design/Vector2.png" вместо "design/Vector.png")
Название: 1.png
Просмотров: 107

Размер: 438 байт
(80 строка) все метки, следующие за меткой, на которую наведен курсор мыши, тоже будут подсвечиваться:
Название: 2.png
Просмотров: 107

Размер: 447 байт
А поскольку у вас метки имеют свойство float: right; (63 строка в вашем коде), то метки будут расположены справа налево (и поэтому будут подсвечиваться влево от выбранной):
Название: 3.png
Просмотров: 107

Размер: 442 байт

Примечание: для иллюстрации вместо картинок использовались цветные квадратики
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.07.2025, 15:04
Помогаю со студенческими работами здесь

Как сделать вот такой макет через html и css (div и css)
Доброго времени суток.Подскажите как сделать по скрину ?* что бы было Лого на весь экран вот тот...

Есть 2 файла html и css как мне сделать чтоб файл css распространялся на одну ячейку а не на все
&lt;table class=&quot;s&quot;&gt; &lt;tr&gt; &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;...

Форма валидации красная звездочка
Подскажите как сделать так, чтобы знак звездочки, указывающий на обязательность заполнения инпута...

Звездочка после селектора
Что означает такая запись? head * { color: #fff; }

Input и красная звездочка внутри
Здравствуйте добрые люди! подскажите где почитать как к plaseholder добавить красную звездочку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru