首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星级评级“掉头”- HTML,CSS

星级评级“掉头”- HTML,CSS
EN

Stack Overflow用户
提问于 2022-05-17 18:39:53
回答 2查看 102关注 0票数 2

我想通过隐藏输入(单选按钮)和只显示标签(这是星型)来获得一个星级等级。点击其中一颗星星,它之前的所有星星也会变黄。所以我写了如下:

HTML和CSS创建单选按钮和标签:

代码语言:javascript
复制
input:not(:checked)~label:hover,
label:hover~input:not(checked)~label {
  color: #fd4;
}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<input type="radio" name="rate" id="rate-1">
<label for="rate-1" class="fa-solid fa-star"></label>
<input type="radio" name="rate" id="rate-2">
<label for="rate-2" class="fa-solid fa-star"></label>
<input type="radio" name="rate" id="rate-3">
<label for="rate-3" class="fa-solid fa-star"></label>
<input type="radio" name="rate" id="rate-4">
<label for="rate-4" class="fa-solid fa-star"></label>
<input type="radio" name="rate" id="rate-5">
<label for="rate-5" class="fa-solid fa-star"></label>

但是这些恒星是从右到左突出显示的,所以如果你在4颗恒星上方盘旋,那么第四和第五颗星星就会被高亮显示。

我怎么才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-17 19:28:17

一个简单的解决方案是使用display:flex;添加一个容器,并使用弯曲方向反转元素。因为元素显示在DOM中,所以您需要确保反转HTML中元素的顺序,以便仍然得到正确的评级。

代码语言:javascript
复制
input:not(:checked)~label:hover,
label:hover~input:not(checked)~label {
  color: #fd4;
}
.rating-container {
  display:flex;
  flex-direction:row-reverse;
  justify-content:center;
}
input[type="radio"] {
  display:none;
}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<div class="rating-container">
  <input type="radio" name="rate" id="rate-5">
  <label for="rate-5" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-4">
  <label for="rate-4" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-3">
  <label for="rate-3" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-2">
  <label for="rate-2" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-1">
  <label for="rate-1" class="fa-solid fa-star"></label>
</div>

票数 2
EN

Stack Overflow用户

发布于 2022-05-17 19:56:23

另一种解决方案是将其放置在div中,使其具有弹性,这样标签之间就没有空间,每当您在div单选按钮上悬停时,按钮就会变成金色,但是直接悬停的单选按钮前面的按钮将被赋予正常的颜色。

代码语言:javascript
复制
.container {
  display: flex;
}

div:hover > label {
  color: #fd4;
}

div:hover > label:hover ~ label {
  color: #000;
}

input[type=radio] {
    display: none;
}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer"
/>
<div class="container"> 
  <input type="radio" name="rate" id="rate-1">
  <label for="rate-1" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-2">
  <label for="rate-2" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-3">
  <label for="rate-3" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-4">
  <label for="rate-4" class="fa-solid fa-star"></label>
  <input type="radio" name="rate" id="rate-5">
  <label for="rate-5" class="fa-solid fa-star"></label>
</div>

我必须指出,虽然它对悬停非常有效,但如果没有JS,我无法找到一种方法来使星体在检查后保持黄金状态,在接受的解决方案中实现它要容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72279140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档