CSS アニメーションでサイズを変更すると、垂直方向と水平方向の中央に配置された div が不規則で不安定な動きを示します。
div は絶対に配置され、固定の幅/高さと負のマージンがあります。
アニメーション自体は、固定の幅/高さと負のマージン値の 2 つの異なるセットを切り替えるだけで、カスタム トランジション プロパティが設定されます。
負のマージンが幅と高さに対して異なる速度でアニメーション化されているように感じます。
animate()
代わりにjQueryを使用して、使用するCSSトランジションを(リニア、クォートなどに)変更しようとしましたcss()
が、同じ結果が得られます。
IE > = 8で動作する場合、これがなぜ起こっているのか、おそらくこれを行うためのより良い方法を説明できる人はいますか?
例:
http://jsfiddle.net/p4B3S/1/
HTML
<div class="outer">
<div class="inner">
+
</div>
</div>
<button>toggle</button>
CSS:
.outer {
/* easeOutQuart */
-webkit-transition: all 750ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
-moz-transition: all 750ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
-ms-transition: all 750ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
-o-transition: all 750ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
transition: all 750ms cubic-bezier(0.165, 0.840, 0.440, 1.000);
position: absolute;
width: 200px;
height: 200px;
left: 50%;
top: 50%;
margin-left: -100px;
margin-top: -100px;
outline: 1px solid red;
}
.inner {
position: absolute;
width: 40px;
height: 40px;
top: 50%;
left: 50%;
margin-left: -20px;
margin-top: -20px;
text-align: center;
line-height: 40px;
outline: 1px solid blue;
}
button {
width: 100px;
height: 50px;
}
jQuery
$button = $('button');
$outer = $('.outer');
$button.toggle(function() {
$outer.css({
'width': '100px',
'height': '100px',
'margin-left': '-50px',
'margin-top': '-50px'
});
}, function() {
$outer.css({
'width': '200px',
'height': '200px',
'margin-left': '-100px',
'margin-top': '-100px'
});
});