【发布时间】:2012-01-30 08:04:55
【问题描述】:
我正在尝试解决以下问题。我有以下 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/ 稍作修改以使用图像的绝对网址,但其他方面相同
【问题讨论】:
-
单独使用 CSS 解决这个问题会很棒。为一个有趣的问题 +1。
-
你能提供一个JS Fiddle吗?我想我有一个想法,但在我可以测试之前我不确定(我也懒得去寻找星标来测试)。
-
与您的问题无关,但将
divs 嵌套在spans 中是无效的-您不妨将所有内容都转为span。 -
不将此作为答案发布,只是您可能想研究的内容:htmldrive.net/items/show/689/Pure-CSS-Star-Rating-System 我认为此解决方案比您尝试做的更清洁。
-
如果从右到左而不是从左到右突出显示,使用
.rating-star:hover, .rating-star:hover ~ .rating-star之类的东西并删除不合时宜的嵌套内容会很容易和干净。不幸的是,没有“兄弟姐妹”选择器,而且不太可能是一个。
标签: css css-selectors