2

我有一个图像和 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);

}

4

1 回答 1

1

最明智的解决方案是使用 javascript 执行此操作。但是如果你想纯粹在 CSS3 中做到这一点,这是可能的。查看我为您整理的这个 JSFiddle:

http://jsfiddle.net/4NQfj/

诀窍是嵌套 div,最后将图像嵌套在最深处。例如:

<div id="d1">
    <div id="d2">
        <div id="d3">
            <img id="couldBeAnImage" src="...">
        </div>
    </div>
</div>

然后,您可以通过在每个 div 的 :hover 上限定图像来简单地调整图像的变换属性。所以为了缩短小提琴中的代码,我基本上是这样做的:

#d1:hover #couldBeAnImage { transform: rotate(15deg); }
#d2:hover #couldBeAnImage { transform: rotate(30deg); }
#d3:hover #couldBeAnImage { transform: rotate(45deg); }

您想使用 javascript 的原因是因为每个 div 都需要调整大小和定位,才能使这个技巧起作用。这不是问题,只是假设您可以做到这一点并不总是现实的:a.) 给定您的布局,并且.. b.) 处理每个 div 和后续图像的位置都相对于每个祖先的事实分区。

所以这有点棘手,但这是您所描述问题的 100% CSS 解决方案。如果我自己不这么说,解决起来很有趣:)

编辑:

当然你也可以用 javascript 做到这一点。这是一个小提琴,展示了一个稍微“草率”的解决方案:

http://jsfiddle.net/k3t2U/1/

这样做的方法是向 div 添加 mouseover 和 mouseout 事件。在这种情况下,div 可以完全相互独立:

<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="couldBeAnImage"></div>

在我的示例中,我使用了 jQuery 的 .hover() 方法来添加事件处理程序。悬停基本上让你这样做:.hover(functionToCallOnMouseOver(), functionToCallOnMouseOut())

所以我仍在处理 CSS 中的旋转。我有三个类代表不同级别的轮换。然后在我的 mouseOver 和 mouseOut 事件处理程序中添加或删除指定各种旋转量的类。

$("#d1").hover(function(){
    $("#couldBeAnImage").addClass("rotate");
},function(){
    $("#couldBeAnImage").removeClass("rotate");
});

在 javascript 中,您可以通过多种方式真正做到这一点。所以这只是一个例子。从某种意义上说,它更强大,您可以更自由地控制实际元素。CSS 方法基本上是一种“技巧”,您在如何指定标记和样式方面受到极大限制。一般来说,我建议使用 javascript 解决这个问题。

于 2012-11-08T04:05:08.643 回答