【发布时间】:2019-03-29 18:18:46
【问题描述】:
在某些界面中,我想做动画。由于 transform 属性比其他 CSS 属性更优化,所以我将使用它。
with transform: scale() : 当元素纵横比不变时,没问题。当比例应该改变时,我找到的解决方案是放置一个容器,并在这个容器中放置一个内部。然后将反向变换应用于内部块,以便在动画期间和之后保持比例。
我做了一支笔来测试这个想法,它可以工作,但是在动画过程中出现了一个问题:内部块在动画过程中看起来被拉伸了。我不明白为什么动画时间是一样的,而且缓动是线性的。
https://codepen.io/AdamElio/pen/PabejP
(点击菜单切换动画)
document.querySelector('#menu').addEventListener('click', function() {
this.classList.toggle('collapsedd')
});
#menu {
margin: 30px;
padding: 15px;
background: white;
width: 150px;
overflow: hidden;
transform-origin: top center;
transition: transform .5s linear;
}
#menu.collapsedd {
transform: scaleY(.2);
}
#menu .inner {
transition: transform .5s linear;
transform-origin: top center;
}
#menu.collapsedd .inner {
transform: scaleY(5);
}
#menu .inner ul {
padding: 0;
margin: 0;
list-style: none;
}
<nav id="menu">
<div class="inner">
<h5>Menu</h5>
<ul>
<li>Link 1</li>
<li>Link 2</li>
<li>Link 3</li>
<li>Link 4</li>
</ul>
</div>
</nav>
<div id="transform"></div>
【问题讨论】:
标签: html css animation transition easing