在没有 JavaScript 的情况下点击提交的星级评分系统?
Star rating system that submits on click without JavaScript?
我正在实施星级评定系统,但它正在测试我对 CSS 选择器的了解。
目前我有它,所以每颗星都是一个提交按钮,当您将鼠标悬停在它上面时会突出显示。目前的问题是我不知道如何改变前面星星的视觉效果(所以当你悬停在第三颗时,它也突出了前两颗。
这是当前的实现:
HTML:
<div class="ratings>
<form action="/blog/rate" class="ratings-form" method="post">
<input id="rating_rating" name="rating[rating]" type="hidden" value="1">
<input id="rating_post_id" name="rating[post_id]" type="hidden" value="3">
<div id="rating-1" class="rating-star true"><input type="submit" value="★"></div>
</form>
<form action="/blog/rate" class="ratings-form" method="post">
<input id="rating_rating" name="rating[rating]" type="hidden" value="2">
... (continued through 5) ...
</div>
CSS:
.rating-star > input[type="submit"] {
padding: 0px 2px;
float: left;
color: #ccc;
background: transparent;
border:0 none;
border-radius: 50px;
}
.rating-star > input[type="submit"]:hover {
color: #faa;
}
由于我要修改的元素在表单中有几层,看来我不能使用 ~
兄弟选择器。我是不是遗漏了什么,或者我是否需要 JavaScript 才能实现这种效果?
是的,这是可能的,但不是您尝试的那样。您缺少的主要内容是您可以在 type=submit 的元素上使用 name 属性。为了使这项工作按预期进行,我们还需要在 HTML 中以相反的顺序排列星星,以便兄弟运算符正常工作。
form {
width: 100px;
}
button {
border: 0;
background: transparent;
font-size: 1.5em;
margin: 0;
padding: 0;
float: right;
}
button:hover,
button:hover + button,
button:hover + button + button,
button:hover + button + button + button,
button:hover + button + button + button + button {
color: #faa;
}
<form action="" method="POST">
<input type="hidden" name="rating[post_id]" value="3">
<button type="submit" name="rating[rating]" value="5">★</button>
<button type="submit" name="rating[rating]" value="4">★</button>
<button type="submit" name="rating[rating]" value="3">★</button>
<button type="submit" name="rating[rating]" value="2">★</button>
<button type="submit" name="rating[rating]" value="1">★</button>
</form>
我正在实施星级评定系统,但它正在测试我对 CSS 选择器的了解。
目前我有它,所以每颗星都是一个提交按钮,当您将鼠标悬停在它上面时会突出显示。目前的问题是我不知道如何改变前面星星的视觉效果(所以当你悬停在第三颗时,它也突出了前两颗。
这是当前的实现:
HTML:
<div class="ratings>
<form action="/blog/rate" class="ratings-form" method="post">
<input id="rating_rating" name="rating[rating]" type="hidden" value="1">
<input id="rating_post_id" name="rating[post_id]" type="hidden" value="3">
<div id="rating-1" class="rating-star true"><input type="submit" value="★"></div>
</form>
<form action="/blog/rate" class="ratings-form" method="post">
<input id="rating_rating" name="rating[rating]" type="hidden" value="2">
... (continued through 5) ...
</div>
CSS:
.rating-star > input[type="submit"] {
padding: 0px 2px;
float: left;
color: #ccc;
background: transparent;
border:0 none;
border-radius: 50px;
}
.rating-star > input[type="submit"]:hover {
color: #faa;
}
由于我要修改的元素在表单中有几层,看来我不能使用 ~
兄弟选择器。我是不是遗漏了什么,或者我是否需要 JavaScript 才能实现这种效果?
是的,这是可能的,但不是您尝试的那样。您缺少的主要内容是您可以在 type=submit 的元素上使用 name 属性。为了使这项工作按预期进行,我们还需要在 HTML 中以相反的顺序排列星星,以便兄弟运算符正常工作。
form {
width: 100px;
}
button {
border: 0;
background: transparent;
font-size: 1.5em;
margin: 0;
padding: 0;
float: right;
}
button:hover,
button:hover + button,
button:hover + button + button,
button:hover + button + button + button,
button:hover + button + button + button + button {
color: #faa;
}
<form action="" method="POST">
<input type="hidden" name="rating[post_id]" value="3">
<button type="submit" name="rating[rating]" value="5">★</button>
<button type="submit" name="rating[rating]" value="4">★</button>
<button type="submit" name="rating[rating]" value="3">★</button>
<button type="submit" name="rating[rating]" value="2">★</button>
<button type="submit" name="rating[rating]" value="1">★</button>
</form>