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 -> addClass
和 mouseleave -> 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 过渡的过程。
此外,请注意,您在这里做的不是 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;
这将是对所有其他前缀过渡属性的类似调整。
$(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;
}
我正在重建其他人的 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 -> addClass
和 mouseleave -> 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 过渡的过程。
此外,请注意,您在这里做的不是 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;
这将是对所有其他前缀过渡属性的类似调整。
$(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;
}