#html #css
#HTML #css
Вопрос:
У меня есть система звездного рейтинга, которая строится только с использованием HTML и CSS, слева направо она работает нормально, но справа налево она все еще находится слева направо, я хочу, чтобы первая звезда справа была заполнена первой, а последняя (5) была заполнена недавно. Как я могу заполнить направление звезды справа налево.
.rate {
display: flex;
height: 46px;
padding: 0 10px;
}
.rate:not(:checked)>input {
position: absolute;
top: -9999px;
visibility: hidden;
}
.rate:not(:checked)>label {
float: right;
width: 1em;
overflow: hidden;
white-space: nowrap;
cursor: pointer;
font-size: 30px;
color: #ccc;
}
.rate:not(:checked)>label:before {
content: '★ ';
}
.rate>input:checked~label {
color: #ffc700;
}
.rate:not(:checked)>label:hover,
.rate:not(:checked)>label:hover~label {
color: #deb217;
}
<div class="rate" onclick="validate()">
<input type="radio" id="star5" class="star" name="rate" value="5" />
<label for="star5">5 stars</label>
<input type="radio" id="star4" class="star" name="rate" value="4" />
<label for="star4">4 stars</label>
<input type="radio" id="star3" class="star" name="rate" value="3" />
<label for="star3">3 stars</label>
<input type="radio" id="star2" class="star" name="rate" value="2" />
<label for="star2">2 stars</label>
<input type="radio" id="star1" class="star" name="rate" value="1" />
<label for="star1">1 star</label>
Комментарии:
1. Похоже, что предоставленный вами код уже работает так, как вы хотите: справа налево (?)
2. да, я не знаю, работает ли это здесь, но на моем веб-сайте это не работает
3. Вы пробовали использовать синтаксис «direction». Возможно, вы можете решить эту проблему, чтобы передать ее одному из родительских классов.
4. да, большое вам спасибо, решаемая с помощью direction. @GeorgeDiril
5. Всегда пожалуйста. Итак, я просто ввожу это в качестве ответа ниже.
Ответ №1:
не слишком уверен, что ваш код работает, почему-то мне показалось, что он работает наоборот, сначала освещая весь ряд звездочек.
Вы можете встроить flex box, он унаследует поток direction, и если вы также поместите звезды в контейнер, вы также можете изменить его собственный поток, чтобы изменить визуальную нотацию звезд.
пример :
.rate {
display: flex;
height: 46px;
padding: 0 10px;
}
.rate span {
display: inline-flex;
flex-flow: row-reverse;
margin:auto 1em;
}
.rtl {
direction: rtl;
}
.rate:not(:checked) > span input {
position: absolute;
right: 100vw;
}
.rate:not(:checked) > span label {
width: 1em;
overflow: hidden;
white-space: nowrap;
cursor: pointer;
font-size: 30px;
color: #ccc;
}
.rate:not(:checked) > span label:before {
content: "★ ";
}
.rate > span input:checked ~ label {
color: #ffc700;
}
.rate:not(:checked) > span label:hover,
.rate:not(:checked) > span label:hover ~ label {
color: #deb217;
}
<div dir ="rtl" class="rate" onclick="validate()">
<span>
<input type="radio" id="star5" data-product-id="@Model.ProductId" class="star" name="rate" value="5" />
<label for="star5" title="5 Stars">5 stars</label>
<input type="radio" id="star4" data-product-id="@Model.ProductId" class="star" name="rate" value="" />
<label for="star4" title="4 Star">4 stars</label>
<input type="radio" id="star3" data-product-id="@Model.ProductId" class="star" name="rate" value="3" />
<label for="star3" title="3 Star">3 stars</label>
<input type="radio" id="star2" data-product-id="@Model.ProductId" class="star" name="rate" value="2" />
<label for="star2" title="2 Stars">2 stars</label>
<input type="radio" id="star1" data-product-id="@Model.ProductId" class="star" name="rate" value="1" />
<label for="star1" title="1 Star">1 star</label>
</span>
<p>אני מניח שיש כאן הודעה?</p>
</div>
<hr>
<div class="rate" onclick="validate()">
<span>
<input type="radio" id="star5a" data-product-id="@Model.ProductId" class="star" name="rate" value="5" />
<label for="star5a" title="5 Stars">5 stars</label>
<input type="radio" id="star4a" data-product-id="@Model.ProductId" class="star" name="rate" value="" />
<label for="star4a" title="4 Star">4 stars</label>
<input type="radio" id="star3a" data-product-id="@Model.ProductId" class="star" name="rate" value="3" />
<label for="star3a" title="3 Star">3 stars</label>
<input type="radio" id="star2a" data-product-id="@Model.ProductId" class="star" name="rate" value="2" />
<label for="star2a" title="2 Stars">2 stars</label>
<input type="radio" id="star1a" data-product-id="@Model.ProductId" class="star" name="rate" value="1" />
<label for="star1a" title="1 Star">1 star</label>
</span>
<p>I guess there is content aside here ?</p>
</div>
Несколько ссылок, которые могли бы быть полезны в стороне от этого ответа.
Ответ №2:
Направление справа налево или слева направо связано с direction
синтаксисом в CSS. https://www.w3schools.com/cssref/pr_text_direction.asp
Таким образом, вы можете иметь справа налево с:
direction: rtl;
и слева направо с:
direction: ltr;
Комментарии:
1. Спасибо, это сработало нормально, но решение: display: inline-flex; flex-flow: row-reverse; это идеально подходит для моего дизайна, еще раз спасибо
Ответ №3:
Я использовал свойство flex flow со значением, обратным строке. Я думаю, что это решение может помочь вам решить вашу проблему. И я использовал свойство float с левым значением, чтобы перевести rate div в левую позицию.
.rate {
display: flex;
height: 46px;
padding: 0 10px;
flex-flow: row-reverse wrap;
float: left;
}
.rate:not(:checked)>input {
position: absolute;
top: -9999px;
visibility: hidden;
}
.rate:not(:checked)>label {
float: right;
width: 1em;
overflow: hidden;
white-space: nowrap;
cursor: pointer;
font-size: 30px;
color: #ccc;
}
.rate:not(:checked)>label:before {
content: '★ ';
}
.rate>input:checked~label {
color: #ffc700;
}
.rate:not(:checked)>label:hover,
.rate:not(:checked)>label:hover~label {
color: #deb217;
}
<div class="rate" onclick="validate()">
<input type="radio" id="star5" class="star" name="rate" value="5" />
<label for="star5">5 stars</label>
<input type="radio" id="star4" class="star" name="rate" value="4" />
<label for="star4">4 stars</label>
<input type="radio" id="star3" class="star" name="rate" value="3" />
<label for="star3">3 stars</label>
<input type="radio" id="star2" class="star" name="rate" value="2" />
<label for="star2">2 stars</label>
<input type="radio" id="star1" class="star" name="rate" value="1" />
<label for="star1">1 star</label>