首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制星级评级问题

复制星级评级问题
EN

Stack Overflow用户
提问于 2020-04-08 14:37:43
回答 2查看 71关注 0票数 0

我只使用html和css实现了一个用户星级评分系统。评级工作得很好,但当我尝试复制它时,我在保存重复条目的评级时遇到了问题。请参阅codepen (https://codepen.io/margin707/pen/mdebMOZ)或以下代码:

代码语言:javascript
复制
/*rating1*/

.ratingControl {
  position: relative;
  width: 220px;
  height: 45px;
  user-select: none;
  margin: 0 auto;
}

.ratinginput1 {
  visibility: hidden;
}

.ratingControl-stars {
  position: absolute;
  top: 0;
  width: 40px;
  height: 65px;
  background-image: url('https://i.imgur.com/86OG0nb.png');
  background-size: auto 45px;
  background-repeat: no-repeat;
  cursor: pointer;
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}

.ratingControl-stars:hover,
.ratingControl-stars:hover~.ratingControl-stars,
.ratinginput1:checked~.ratingControl-stars {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl-stars:active,
.ratingControl-stars:active~.ratingControl-stars,
.ratinginput1:checked~.ratingControl-stars:active {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl-stars--1 {
  left: 10px;
}

.ratingControl-stars--2 {
  left: 50px;
}

.ratingControl-stars--3 {
  left: 90px;
}

.ratingControl-stars--4 {
  left: 130px;
}

.ratingControl-stars--5 {
  left: 170px;
}


/*rating2*/

.ratingControl2 {
  position: relative;
  width: 220px;
  height: 45px;
  user-select: none;
  margin: 0 auto;
}

.ratinginput2 {
  visibility: hidden;
}

.ratingControl2-stars {
  position: absolute;
  top: 0;
  width: 40px;
  height: 65px;
  background-image: url('https://i.imgur.com/86OG0nb.png');
  background-size: auto 45px;
  background-repeat: no-repeat;
  cursor: pointer;
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}

.ratingControl2-stars:hover,
.ratingControl2-stars:hover~.ratingControl2-stars,
.ratinginput2:checked~.ratingControl2-stars {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl2-stars:active,
.ratingControl2-stars:active~.ratingControl2-stars,
.ratinginput2:checked~.ratingControl2-stars:active {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl2-stars--1 {
  left: 10px;
}

.ratingControl2-stars--2 {
  left: 50px;
}

.ratingControl2-stars--3 {
  left: 90px;
}

.ratingControl2-stars--4 {
  left: 130px;
}

.ratingControl2-stars--5 {
  left: 170px;
}
代码语言:javascript
复制
<div class="ratingControl"><input class="ratinginput1" id="rating-5" name="rating" type="radio" value="5" />
  <label class="filledStars ratingControl-stars ratingControl-stars--5" for="rating-5">5</label>
  <input class="ratinginput1" id="rating-4" name="rating" type="radio" value="4" />
  <label class="filledStars ratingControl-stars ratingControl-stars--4" for="rating-4">4</label>
  <input class="ratinginput1" id="rating-3" name="rating" type="radio" value="3" />
  <label class="filledStars ratingControl-stars ratingControl-stars--3" for="rating-3">3</label>
  <input class="ratinginput1" id="rating-2" name="rating" type="radio" value="2" />
  <label class="filledStars ratingControl-stars ratingControl-stars--2" for="rating-2">2</label>
  <input class="ratinginput1" id="rating-1" name="rating" type="radio" value="1" />
  <label class="filledStars ratingControl-stars ratingControl-stars--1" for="rating-1">1</label></div>
<br>
<div class="ratingControl2"><input class="ratinginput2" id="rating-5" name="rating" type="radio" value="5" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--5" for="rating-5">5</label>
  <input class="ratinginput2" id="rating-4" name="rating" type="radio" value="4" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--4" for="rating-4">4</label>
  <input class="ratinginput2" id="rating-3" name="rating" type="radio" value="3" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--3" for="rating-3">3</label>
  <input class="ratinginput2" id="rating-2" name="rating" type="radio" value="2" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--2" for="rating-2">2</label>
  <input class="ratinginput2" id="rating-1" name="rating" type="radio" value="1" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--1" for="rating-1">1</label></div>

我尝试更改重复条目的所有类名,但仍然只会更新原始条目。我怀疑这与~符号有关,但经过几个小时的调试仍无法找到问题的根源。任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

发布于 2020-04-08 14:47:59

一个文档中不能有多个给定的id值。您需要确保在您的代码中永远不会有重复的id;这是强制

此外,您所有的单选按钮都具有相同的name属性,这意味着只能选择其中的一个。确保一个组中的所有单选按钮共享该名称,并且每个组使用不同的名称。通常,您可以通过在name属性的末尾添加一个数字并向上计数来轻松实现这一点:

代码语言:javascript
复制
/*rating1*/

.ratingControl {
  position: relative;
  width: 220px;
  height: 45px;
  user-select: none;
  margin: 0 auto;
}

.ratinginput1 {
  visibility: hidden;
}

.ratingControl-stars {
  position: absolute;
  top: 0;
  width: 40px;
  height: 65px;
  background-image: url('https://i.imgur.com/86OG0nb.png');
  background-size: auto 45px;
  background-repeat: no-repeat;
  cursor: pointer;
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}

.ratingControl-stars:hover,
.ratingControl-stars:hover~.ratingControl-stars,
.ratinginput1:checked~.ratingControl-stars {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl-stars:active,
.ratingControl-stars:active~.ratingControl-stars,
.ratinginput1:checked~.ratingControl-stars:active {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl-stars--1 {
  left: 10px;
}

.ratingControl-stars--2 {
  left: 50px;
}

.ratingControl-stars--3 {
  left: 90px;
}

.ratingControl-stars--4 {
  left: 130px;
}

.ratingControl-stars--5 {
  left: 170px;
}


/*rating2*/

.ratingControl2 {
  position: relative;
  width: 220px;
  height: 45px;
  user-select: none;
  margin: 0 auto;
}

.ratinginput2 {
  visibility: hidden;
}

.ratingControl2-stars {
  position: absolute;
  top: 0;
  width: 40px;
  height: 65px;
  background-image: url('https://i.imgur.com/86OG0nb.png');
  background-size: auto 45px;
  background-repeat: no-repeat;
  cursor: pointer;
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
}

.ratingControl2-stars:hover,
.ratingControl2-stars:hover~.ratingControl2-stars,
.ratinginput2:checked~.ratingControl2-stars {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl2-stars:active,
.ratingControl2-stars:active~.ratingControl2-stars,
.ratinginput2:checked~.ratingControl2-stars:active {
  background-image: url('https://i.imgur.com/yGnRfYd.png') !important;
}

.ratingControl2-stars--1 {
  left: 10px;
}

.ratingControl2-stars--2 {
  left: 50px;
}

.ratingControl2-stars--3 {
  left: 90px;
}

.ratingControl2-stars--4 {
  left: 130px;
}

.ratingControl2-stars--5 {
  left: 170px;
}
代码语言:javascript
复制
<div class="ratingControl">
  <input class="ratinginput1" id="group-0-rating-5" name="rating-0" type="radio" value="5" />
  <label class="filledStars ratingControl-stars ratingControl-stars--5" for="group-0-rating-5">5</label>
  <input class="ratinginput1" id="group-0-rating-4" name="rating-0" type="radio" value="4" />
  <label class="filledStars ratingControl-stars ratingControl-stars--4" for="group-0-rating-4">4</label>
  <input class="ratinginput1" id="group-0-rating-3" name="rating-0" type="radio" value="3" />
  <label class="filledStars ratingControl-stars ratingControl-stars--3" for="group-0-rating-3">3</label>
  <input class="ratinginput1" id="group-0-rating-2" name="rating-0" type="radio" value="2" />
  <label class="filledStars ratingControl-stars ratingControl-stars--2" for="group-0-rating-2">2</label>
  <input class="ratinginput1" id="group-0-rating-1" name="rating-0" type="radio" value="1" />
  <label class="filledStars ratingControl-stars ratingControl-stars--1" for="group-0-rating-1">1</label>
</div>
<br>
<div class="ratingControl2">
  <input class="ratinginput2" id="group-1-rating-5" name="rating-1" type="radio" value="5" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--5" for="group-1-rating-5">5</label>
  <input class="ratinginput2" id="group-1-rating-4" name="rating-1" type="radio" value="4" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--4" for="group-1-rating-4">4</label>
  <input class="ratinginput2" id="group-1-rating-3" name="rating-1" type="radio" value="3" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--3" for="group-1-rating-3">3</label>
  <input class="ratinginput2" id="group-1-rating-2" name="rating-1" type="radio" value="2" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--2" for="group-1-rating-2">2</label>
  <input class="ratinginput2" id="group-1-rating-1" name="rating-1" type="radio" value="1" />
  <label class="filledStars ratingControl2-stars ratingControl2-stars--1" for="group-1-rating-1">1</label>
</div>

票数 0
EN

Stack Overflow用户

发布于 2020-04-08 14:50:15

谢谢你的快速回答。它的作用是更改输入的for属性。

对于第二个条目,我将其从:

代码语言:javascript
复制
<div class="ratingControl2"><input class="ratinginput2" id="rating2-5" name="rating2" type="radio" value="6" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--5" for="rating-5">5</label>
<input class="ratinginput2" id="rating2-4" name="rating2" type="radio" value="7" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--4" for="rating-4">4</label>
<input class="ratinginput2" id="rating2-3" name="rating2" type="radio" value="8" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--3" for="rating-3">3</label>
<input class="ratinginput2" id="rating2-2" name="rating2" type="radio" value="9" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--2" for="rating-2">2</label>
<input class="ratinginput2" id="rating2-1" name="rating2" type="radio" value="10" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--1" for="rating-1">1</label></div>

代码语言:javascript
复制
<div class="ratingControl2"><input class="ratinginput2" id="rating2-5" name="rating2" type="radio" value="6" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--5" for="rating2-5">5</label>
<input class="ratinginput2" id="rating2-4" name="rating2" type="radio" value="7" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--4" for="rating2-4">4</label>
<input class="ratinginput2" id="rating2-3" name="rating2" type="radio" value="8" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--3" for="rating2-3">3</label>
<input class="ratinginput2" id="rating2-2" name="rating2" type="radio" value="9" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--2" for="rating2-2">2</label>
<input class="ratinginput2" id="rating2-1" name="rating2" type="radio" value="10" />
<label class="filledStars ratingControl2-stars ratingControl2-stars--1" for="rating2-1">1</label></div>

感谢你们的快速帮助!

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

https://stackoverflow.com/questions/61094668

复制
相关文章

相似问题

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