css3 Safari 中的过渡不流畅

css3 transition is not smooth in safari

我正在重建其他人的 CSS3 转换,以使其在 Safari、Chrome 和 Firefox 上运行。 In their version (mouse over the package images), the transition works well in Safari, but not in the other two: The elements get stuck in the "up" position. In my version,过渡在 FF 和 Chrome 中运行平稳,但在 Safari 中不稳定(而且它不旋转)。有任何想法吗?我的CSS在下面。

.package-down {
display: block;
position: relative;
height: 100%;
float: left;
width: 33.333%;
margin: 0 0 0 0;
transform: rotate(0deg) ;
-webkit-transition: margin .1s ease, transform .25s ease;
-moz-transition: margin .1s ease, transform .25s ease;
-o-transition: margin .1s ease, transform .25s ease;
transition: margin .1s ease, transform .25s ease;

}


.package-up {
display: block;
position: relative;
height: 100%;
float: left;
width: 33.333%;
margin: -50px 0 0 0;
transform: rotate(-2deg);
-webkit-transition: margin .1s ease, transform .25s ease-out;
-moz-transition: margin .1s ease, transform .25s ease-out;
-o-transition: margin .1s ease, transform .25s ease-out;
transition: margin .1s ease, transform .25s ease-out;

}

我真的很惊讶你的 jQuery 悬停功能确实有效,因为你真正需要的是 mouseenter -> addClassmouseleave -> removeClass,但可能不是我完全了解 jQuery 的 .hover() 是如何工作的。

尽管如此,完全没有必要 jQuery 甚至 Javascript 在 mouseover 上更改样式。你有伪选择器 :hover 正是为了这个目的:将你想要过渡到的样式放入

.package-down:hover { /* properties to transition to */ }

接下来,不要重复元素已有且不会更改的样式。

最后,如果您的问题是并非所有 属性 转换都花费相同的时间,请不要指定:

transition: margin .1s ease, transform .25s ease-out;

这将使边距变化需要 0.1 秒,但旋转需要 0.25 秒。

请更简洁地描述您向 look/perform 过渡的过程。

http://codepen.io/anon/pen/aOJmKe

此外,请注意,您在这里做的不是 css 动画 ,而是 css 过渡 .在此处详细了解差异:

CSS: Animation vs. Transition

虽然我同意 jQuery 不是这个问题所必需的,但真正的问题似乎是浏览器前缀的使用不一致。

您需要在 .package-down.package-up.[= 上为 transform: rotate() 添加前缀17=]

还有这个:

-webkit-transition: margin .1s ease, transform .25s ease-out;

应该是这样的:

-webkit-transition: margin .1s ease, -webkit-transform .25s ease-out;

这将是对所有其他前缀过渡属性的类似调整。

See Codepen

$(function() {
 $('.package-down').hover(function() {
  $('.package-down').toggleClass('package-up');

  
  
 });
});
img {
  margin: 0;
  max-width: 100%;
}


.main-packages-wrapper {
  position: relative;
  width: 80%;
  min-height: 575px;
  display: block;
  padding-top: 80px;
  z-index: 1; }



  .package.original {
    margin-right: -15px;
    margin-left: -15px;
    z-index: 2; }
    
    
.package.original img {
      -webkit-transform: scale(1.2);
      -moz-transform: scale(1.2);
      -ms-transform: scale(1.2);
      -o-transform: scale(1.2);
      transform: scale(1.2); 
}

.package-down {
  display: block;
  position: relative;
  height: 100%;
  float: left;
  width: 33.333%;
  margin: 0 0 0 0;
  -webkit-transform: rotate(0deg) ;
  -moz-transform: rotate(0deg) ;
  -o-transform: rotate(0deg) ;
  transform: rotate(0deg) ;
  -webkit-transition: margin .1s ease, -webkit-transform .25s ease;
 -moz-transition: margin .1s ease, -moz-transform .25s ease;
 -o-transition: margin .1s ease, -o-transform .25s ease;
 transition: margin .1s ease, transform .25s ease;

   }


.package-up {
  display: block;
  position: relative;
  height: 100%;
  float: left;
  width: 33.333%;
  margin: -50px 0 0 0;
  -webkit-transform: rotate(-2deg);
  -moz-transform: rotate(-2deg);
  -o-transform: rotate(-2deg);
 transform: rotate(-2deg);
    -webkit-transition: margin .1s ease, -webkit-transform .25s ease-out;
 -moz-transition: margin .1s ease, -moz-transform .25s ease-out;
 -o-transition: margin .1s ease, -o-transform .25s ease-out;
 transition: margin .1s ease, transform .25s ease-out;
 
}

 
 
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script>
<body>
  <div class="primary-content">
  <section class="main-packages-wrapper">
   <div class="package-down multigrain">
    <a href="#"><img src="http://www.batterworld.com/wp-content/themes/batterworld/images/package_multigrain.png"></a>
   </div>
   
  </section>
  </div><!--END PRIMARY CONTENT-->

是的,javascript 绝对是无关紧要的。所需要的只是应用于元素的 :hover 状态的 CSS 转换。我确实最终重复了一些转换代码,因为当光标离开悬停元素时,它启用了向 运行 的反向转换。谢谢! Finished codepen here.

.package.original img {
      -webkit-transform: scale(1.2);
      -moz-transform: scale(1.2);
      -ms-transform: scale(1.2);
      -o-transform: scale(1.2);

      }


.package {
  display: block;
  position: relative;
  height: 100%;
  float: left;
  width: 33.33%;
    z-index: 1;
    -webkit-transition: margin .15s ease-out;
    -moz-transition: margin .15s ease-out;
    -o-transition: margin .15s ease-out;
    transition: margin .15s ease-out;

   }


.package:hover {
     display: block;
  position: relative;
  height: 100%;
  float: left;
  width: 33.33%;
    z-index: 1;
  margin: -50px 0 0 0;
-webkit-transform: rotate(-2deg);
    -webkit-transition: margin .15s ease-out;
    -moz-transition: margin .15s ease-out;
    -o-transition: margin .15s ease-out;
    transition: margin .15s ease-out;

}


.original:hover{
    margin-left: -30px;
    -webkit-transition: margin .15s ease-out;
    -moz-transition: margin .15s ease-out;
    -o-transition: margin .15s ease-out;
    width: 33.33%;
    z-index: 2;

}