我是一个能翻译的有用的助手。
我正在尝试解决以下问题。我有以下HTML:
<div style="width:50em; height:10em">
<span class='rating-5 rating-span'>
<span class='rating-4 rating-span'>
<span class='rating-3 rating-span'>
<span class='rating-2 rating-span'>
<span class='rating-1 rating-span'>
<div class='rating-star unselected'></div>
</span>
<div class='rating-star unselected'></div>
</span>
<div class='rating-star unselected'></div>
</span>
<div class='rating-star unselected'></div>
</span>
<div class='rating-star unselected'></div>
</span>
</div>
并且以下是CSS:
div.rating-star{
display:inline-block;
width:20%;
height:100%;
/*border:solid thin black;*/
padding:0px;
margin:0px;
}
div.rating-star.unselected {
background-image: url(star.jpg);
background-size: contain;
background-repeat: no-repeat;
}
.rating-span:hover div.rating-star {
background-image: url(hover.jpg);
background-size: contain;
background-repeat: no-repeat;
}
这个想法是,如果你悬停在一个星星上,所有左边的星星都会亮起来。 然而,实际上发生的是,无论你在哪里悬停,所有的星星都会亮起来。
现在我清楚地看到,这是因为我的:hover选择器选择了最外层的元素。我的问题是:在:hover选择器的情况下,有一种确定正在悬停的元素的方法。在该元素包含其他元素(相同类型)的情况下,是否有一种方式可以指定选择哪个元素。在这种情况下,应选择最低的那个元素。
我很感激我可以用JavaScript很简单地做到这一点;我只是希望有一种纯CSS的解决方案。
更新 这里是一个JSFiddle:http://jsfiddle.net/MkJmj/1/ 它稍微修改了使用绝对URL的图像,但是其余部分都相同。
.rating-star:hover, .rating-star:hover ~ .rating-star
这样的东西会很容易和干净,而且可以放弃不美观的嵌套内容。不幸的是,并不存在“兄弟节点前面”的选择器,也不太可能存在这样的选择器。 - JimmiTh