CSS 5星评级系统,星跨问题

时间:2016-03-07 23:37:23

标签: css rating-system

我创建了一个5星评级系统。我的css设置为显示固定在屏幕上的灰色背景星。当悬停在蓝色恒星上时,虽然这些恒星居中并且跨越,例如当我选择1颗恒星时,中间恒星变成金而不是最左边的灰星,同样如果我选择2颗星,则两颗金星出现在第二颗和第四颗灰色恒星,灰色恒星在背景中仍然可见。这看起来很不整洁。

有人可以建议我如何更改我的代码以转换选定金币的实际星星吗?

我的星星图像是stars.png,在一张图像中分别有灰色,蓝色和金色星星。

我对css的了解有限。我已经尝试逐个更改css的多个组件,如width或px,但无济于事。

这是我的css。

form .stars {
  background: url("stars.png") repeat-x 0 0;
  width: 150px;
  margin: 0 auto;
}

form .stars input[type="radio"] {
  position: absolute;
  opacity: 0;
  filter: alpha(opacity=0);
}
form .stars input[type="radio"].star-5:checked ~ span {
  width: 100%;
}
form .stars input[type="radio"].star-4:checked ~ span {
  width: 80%;
}
form .stars input[type="radio"].star-3:checked ~ span {
  width: 60%;
}
form .stars input[type="radio"].star-2:checked ~ span {
  width: 40%;
}
form .stars input[type="radio"].star-1:checked ~ span {
  width: 20%;
}
form .stars label {
  display: block;
  width: 30px;
  height: 30px;
  margin: 0!important;
  padding: 0!important;
  text-indent: -999em;
  float: left;
  position: relative;
  z-index: 10;
  background: transparent!important;
  cursor: pointer;
}
form .stars label:hover ~ span {
  background-position: 0 -30px;
}
form .stars label.star-5:hover ~ span {
  width: 100% !important;
}
form .stars label.star-4:hover ~ span {
  width: 80% !important;
}
form .stars label.star-3:hover ~ span {
  width: 60% !important;
}
form .stars label.star-2:hover ~ span {
  width: 40% !important;
}
form .stars label.star-1:hover ~ span {
  width: 20% !important;
}
form .stars span {
  display: block;
  width: 0;
  position: relative;
  top: 0;
  left: 0;
  height: 30px;
  background: url("stars.png") repeat-x 0 -60px;
  -webkit-transition: -webkit-width 0.5s;
  -moz-transition: -moz-width 0.5s;
  -ms-transition: -ms-width 0.5s;
  -o-transition: -o-width 0.5s;
  transition: width 0.5s;
}

1 个答案:

答案 0 :(得分:0)

这个5星评级代码的解决方案更为紧凑。它涉及使用以下方式反转相邻选择器的工作方式:

unicode-bidi: bidi-override;
direction: rtl;

此演示使用简单的字体,使其比传统的<img>或精灵更快,而且作为字体,它受colorfont-sizefont-style的约束等等。

阅读此article了解详情。

Plunker

<强>段

&#13;
&#13;
<!DOCTYPE html>
<html>

<head>
  <meta charset='UTF-8'>
  <title>Star Ratings</title>
  <style>
    .rate {
      unicode-bidi: bidi-override;
      direction: rtl;
      text-align: center;
    }
    .rate> span {
      display: inline-block;
      position: relative;
      width: 1.1em;
    }
    .rate > span:hover,
    .rate > span:hover ~ span {
      color: transparent;
    }
    .rate > span:hover:before,
    .rate > span:hover ~ span:before {
      content: "\2605";
      position: absolute;
      left: 0;
      color: gold;
    }
  </style>
</head>

<body>
  <aside class="rate">
    <span>☆</span><span>☆</span><span>☆</span><span>☆</span><span>☆</span>
  </aside>
</body>

</html>
&#13;
&#13;
&#13;