[英]With CSS, can I change the background to multiple div tags when I hover over one?
我正在尝试在该项目上尽可能少地使用javascript。 我想在我的网站上创建一个带有星号的投票项。
我将拥有5颗星,它们会逐渐消失,当用户将鼠标移到第一颗时,第一颗将亮起,然后将其移到第二颗上,第二颗和第一颗都亮起,直到它们到达第五颗所有星星都会被点亮。
我尝试用div标签将它们包围起来,以便将它们分组,但是每次使所有五颗星都亮着。
我尝试调整各组的Z索引,以便可以先将鼠标悬停在第一颗恒星上,但是那也不起作用。
也许这无法在CSS中完成,但我觉得应该有一些捷径。 让我知道您是否能想到任何事情。
这是我要使用的JSFiddle: 工作示例
HTML
<div class="clearfix" id="stars">
<div class="darn">Oh no!</div>
<div class="star off"></div>
<div class="star off"></div>
<div class="star off"></div>
<div class="star off"></div>
<div class="star off"></div>
<div class="brilliant">Thanks!</div>
</div>
CSS
.clearfix div {
float:left;
position:relative;
}
#stars {
width:450px;
margin:0 auto;
}
.star {
width:64px;
height:64px;
background:url(http://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Full_Star_Blue.svg/64px-Full_Star_Blue.svg.png) no-repeat;
}
.star:hover {
background:url(https://upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Full_Star_Yellow.svg/64px-Full_Star_Yellow.svg.png) no-repeat;
cursor:pointer;
}
.group {
position:absolute
}
如果我没看错,div内的div分组可能会起作用(尽管仅进行了FF测试,但您可以看到图片) http://jsfiddle.net/LL9pH/1/
[edit]固定了文本定位, http://jsfiddle.net/LL9pH/3/
HTML
<div class="clearfix" id="stars">
<div class="darn">Oh no!</div>
<div class="star off">
<div class="star off">
<div class="star off">
<div class="star off">
<div class="star off"></div>
</div>
</div>
</div>
</div>
<div class="brilliant">Thanks!</div>
</div>
CSS
.star .star {
margin-left: 70px;
}
.brilliant {
margin-left: 400px;
margin-top: -64px;
}
使用jQuery prevAll()函数。
<div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
</div>
为班级明星提供您正常的bg图像
<script>
$("document").ready(function(){
$(".star").hover(function(){
$(this).css("background-image", "imageurl");
$(this).prevAll().css("background-image", "imageurl");
});
});
</script>
那应该解决你的问题
我相信您的方向是正确的。 HTML
<div id="stars">
<div class="star">
<div class="star">
<div class="star">
<div class="star">
<div id="innermost" class="star">
</div>
</div>
</div>
</div>
</div>
CSS
.star {
display:block;
width:20px;
height:20px;
margin:0px;
padding-left:20px;
background:#00f;
border-left:1px solid #f00;
}
#innermost {padding-left:0px;}
#stars .star:hover{background:#ff0;}
我知道您有一个可以接受的答案,但是您无需更改HTML结构,只需稍微更改一下CSS:
.clearfix div {
float:right; /* changed from left to right */
position:relative;
}
.star:hover,
.star:hover ~ .star { /* add sibling combinator */
...
}
当然,您将不得不在“ oh no”和“ thank”之间切换,但这是一种更为整洁的方法。
工作示例: http : //jsfiddle.net/LL9pH/8/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.