问题
如果元素高度确定情况下,实现动画并不是什么难事。但是如果是不定高度的元素呢?
可能很多人第一反应是,给元素加个 :
height: auto
可惜的是,这并不会起作用。
用 max-height 代替 height
思路:
- 先将需要做动画的元素设置 max-height: 0px,overflow: hidden;
- 在事件中给元素添加 max-height: 固定高度(>= 元素的实际高度)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
main {
height: fit-content;
transition: max-height .8s;
max-height: 0;
overflow: hidden;
background: #eee;
}
</style>
</head>
<body>
<div>
<header onclick="showMain(this)">点击动画显示 main</header>
<main>
<p>这是main内容第一段</p>
<p>这是main内容第二段</p>
<p>这是main内容第三段</p>
</main>
</div>
<script>
function showMain(el) {
// 300px >= main 元素的高度
el.nextElementSibling.style.setProperty('max-height', '300px')
}
</script>
</body>
</html>