用透视css3旋转div

时间:2015-05-14 13:19:58

标签: html css3

我有一个45度旋转的div。我正在尝试使用css3透视悬停以围绕其y轴旋转它。它不像我想要的那样盘旋,它在徘徊时变成一个正方形。我希望在动画结束时保持旋转45度。

这是我的代码:

<div class="perspective">
   <a href="#" class="box">
      <div class="innerbox">
            text
      </div>    
   </a>
</div>

.perspective
{
    position:relative;
    width:100px;
    height:100px;
    margin:200px 0px 0px 200px;
    -moz-perspective: 300px;
    -webkit-perspective: 300px;
    -o-perspective: 300px;
    -ms-perspective: 300px;
    perspective: 300px;
}

.box
{
    width:80px;
    height:80px;    
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    margin:auto;
    border: 5px solid #000;
    -moz-transform: rotate(45deg);
    -webkit-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transform: rotate(45deg);
    -webkit-transition: all 800ms ease;
    -moz-transition: all 800ms ease;
    -ms-transition: all 800ms ease;
    -o-transition: all 800ms ease;
    transition: all 800ms ease;
}

.innerbox
{
    margin:30px 0px 0px 20px;
    -moz-transform: rotate(-45deg);
    -webkit-transform: rotate(-45deg);
    -o-transform: rotate(-45deg);
    -ms-transform: rotate(-45deg);
    transform: rotate(-45deg);  
}

.box:hover
{
    -moz-transform: rotateY(180deg);
    -webkit-transform: rotateY(180deg);
    -o-transform: rotateY(180deg);
    -ms-transform: rotateY(180deg);
    transform: rotateY(180deg);
    -webkit-transition: all 800ms ease;
    -moz-transition: all 800ms ease;
    -ms-transition: all 800ms ease;
    -o-transition: all 800ms ease;
    transition: all 800ms ease; 
}

我做了一个例子http://jsfiddle.net/o6mo0rjq/

1 个答案:

答案 0 :(得分:1)

您最初围绕Z轴旋转了.box 45度。指定新的transform时,将覆盖此初始旋转 - 因此对于:hover上的新旋转,您还应指定原始旋转。您的块声明将变为:

.box:hover {
    -moz-transform: rotateY(180deg) rotateZ(45deg);
    -webkit-transform: rotateY(180deg) rotateZ(45deg);
    -o-transform: rotateY(180deg) rotateZ(45deg);
    -ms-transform: rotateY(180deg) rotateZ(45deg);
    transform: rotateY(180deg) rotateZ(45deg);
    -webkit-transition: all 800ms ease;
    -moz-transition: all 800ms ease;
    -ms-transition: all 800ms ease;
    -o-transition: all 800ms ease;
    transition: all 800ms ease;
}

这里有JSFiddle来演示。 (注意:transform中的顺序很重要!因为这决定了旋转应用于元素的顺序,根据您正在应用的变换,这可能会给您不同的结果。)

希望这有帮助!如果您有任何问题,请告诉我。