Большая часть работы выполняется с использованием общего селектора брата ( ~ ), который
соответствует второму элементу, только если он следует за первым элементом (хотя и не обязательно сразу) и оба являются дочерними элементами одного и того же родительского элемента.
... и тот факт, что ТОЛЬКО ОДНА радиокнопка в группе может быть выбрана одновременно. Согласно вашему коду, вы пытаетесь пометить все переключатели на checked
. И в таком случае преобладает только последняя checked
кнопка. Вы можете увидеть это поведение, если закомментируете переключатель, скрывающий CSS, как показано ниже.
.rate {
float: left;
}
/*.rate:not(:checked)>input {
position: absolute;
top: -9999px;
clip: rect(0, 0, 0, 0);
}*/
.rate:not(:checked)>label {
float: right;
width: 1em;
padding: 0 .1em;
overflow: hidden;
white-space: nowrap;
cursor: pointer;
font-size: 200%;
line-height: 1.2;
color: #ddd;
}
.rate:not(:checked)>label:before {
content: '★ ';
}
.rate>input:checked~label {
color: #f70;
}
.rate:not(:checked)>label:hover,
.rate:not(:checked)>label:hover~label {
color: gold;
}
<div class="rate">
<input type="radio" id="star5" name="rating" value="5" checked="checked">
<label for="star5"></label>
<input type="radio" id="star4" name="rating" value="4" checked="checked">
<label for="star4"></label>
<input type="radio" id="star3" name="rating" value="3" checked="checked">
<label for="star3"></label>
<input type="radio" id="star2" name="rating" value="2" checked="checked">
<label for="star2"></label>
<input type="radio" id="star1" name="rating" value="1" checked="checked">
<label for="star1"></label>
</div>
Решение состоит в том, чтобы убедиться, что вы помечаете только радиокнопку с самым высоким рейтингом для checked
в вашем коде PHP, который в вашем случае является номер 5. Я полагаю, что решение было бы сделать ваше PHP условие ==
вместо >=
.