我有一个图像和4个不同的div。我试图以不同的程度旋转该图像,具体取决于悬停的div。到目前为止,我只能通过悬停在自身上来旋转图像。没有亲子关系。我想做的是什么?
HTML
<div id="line">
<img src="images/Line2.png" id="liner" alt="settings" />
</div>
<div id="d1">
</div>
<div id="2">
</div>
CSS
#d1:hover + #liner {
-webkit-transition-duration: 0.8s;
-moz-transition-duration: 0.8s;
-o-transition-duration: 0.8s;
transition-duration: 0.8s;
-webkit-transition-property: -webkit-transform;
-moz-transition-property: -moz-transform;
-o-transition-property: -o-transform;
transition-property: transform;
overflow:hidden;
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg) ;
-o-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg);
}
答案 0 :(得分:1)
最理智的解决方案是使用javascript执行此操作。但如果你想纯粹在CSS3中这样做,那就有可能。看看我为你准备的这个JSFiddle:
诀窍是嵌套div并最终将图像嵌套在最深层。例如:
<div id="d1">
<div id="d2">
<div id="d3">
<img id="couldBeAnImage" src="...">
</div>
</div>
</div>
然后,您可以通过在每个div上显示图像来简单地调整图像的变换属性:悬停。因此,为了缩短小提琴中的代码,我基本上是这样做的:
#d1:hover #couldBeAnImage { transform: rotate(15deg); }
#d2:hover #couldBeAnImage { transform: rotate(30deg); }
#d3:hover #couldBeAnImage { transform: rotate(45deg); }
您想要使用javascript的原因是因为需要调整每个div的大小并使其定位才能使用此技巧。这不是问题,除了假设你可以这样做并不总是现实的:a。)根据你的布局和...执行此操作.b。)处理每个div和随后的事实图像的位置都与每个祖先div相关。
所以这使得它有点棘手,但这是你所描述的问题的100%CSS解决方案。如果我自己不这样说,那就很有趣了解。)
修改强>
当然你也可以用javascript做到这一点。这是一个表现出轻微&#34;草率的小提琴&#34;溶液:
您执行此操作的方法是将鼠标悬停和鼠标输出事件添加到div。在这种情况下,div可以完全相互独立:
<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="couldBeAnImage"></div>
在我的示例中,我使用jQuery的.hover()方法添加事件处理程序。 Hover基本上让你这样做:.hover(functionToCallOnMouseOver(),functionToCallOnMouseOut())
所以我仍在处理CSS中的旋转。我有三个代表不同旋转级别的类。然后在我的mouseOver和mouseOut事件处理程序中,我添加或删除指定不同旋转量的类。
$("#d1").hover(function(){
$("#couldBeAnImage").addClass("rotate");
},function(){
$("#couldBeAnImage").removeClass("rotate");
});
在javascript中,您可以通过多种方式实现这一目标。所以这只是一个例子。它在你拥有更多自由和控制实际元素的意义上更强大。 CSS方法基本上是一种诀窍&#39;并且您在如何指定标记和样式方面受到极大限制。一般来说,我建议使用javascript来解决这个问题。