css - CSS Flex 的动画根据内容高度变化
问题描述
我正在寻找一种在更新同级容器的内容时为 Flex 容器高度变化设置动画的方法。
下面是一个非常简单的弹性容器示例。请尝试单击按钮 toggleText 以查看它的实际效果。有没有办法在兄弟更改后为红色容器的高度设置动画?我尝试为 flex 进行转换,但它在我的场景中不起作用。
谢谢!
var i = 0;
var toggleText = function() {
document.querySelector('p').innerHTML = text[(i++) % 2];
}
var text = [
"Some short text here.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."]
.container {
height: 140px;
width: 400px;
border: 1px solid black;
padding: 10px;
display: flex;
flex-flow: column;
}
.image {
background-color: bisque;
flex: 1 1 auto;
display: flex;
border: 1px solid red;
}
<button onclick="toggleText()">toggleText</button>
<div class="container">
<p></p>
<div class="image"></div>
</div>
解决方案
有几种有限的方法可以做到这一点。我想到了以下想法。我希望这个对你有用。我希望方便。
var i = 0,
hidden = document.querySelector('#hidden p'),
visible = document.querySelector('#visible p'),
hiddenHeight = 0,
content;
var toggleText = function() {
content = text[(i++) % 2];
hidden.innerHTML = content;
hiddenHeight = hidden.offsetHeight;
hidden.innerHTML = "";
visible.style.height = hiddenHeight+"px";
visible.innerHTML = content;
}
var text = [
"Some short text here.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."]
.container {
height: 140px;
width: 400px;
border: 1px solid black;
padding: 10px;
display: flex;
flex-flow: column;
transition: all 500ms;
}
.container p{
transition: all 500ms;
}
.image {
background-color: bisque;
flex: 1 1 auto;
display: flex;
border: 1px solid red;
}
#hidden {
height:0!important;
overflow:hidden!important;
}
#hidden p{
visibility: hidden;
opacity: 0;
transition: all 500ms;
}
<button onclick="toggleText()">toggleText</button>
<div class="container">
<div id="hidden">
<p></p>
</div>
<div id="visible">
<p style="height:0"></p>
</div>
<div class="image"></div>
</div>
您可以根据需要更改动画时间和延迟。
推荐阅读
- javascript - 引导日期/选择器未显示
- vue.js - Vue-Analytics 不起作用(注意:我需要根据主机名更改 id)
- javascript - math.floor 和 math.radom 是一个索引
- scala - 根据列表中定义的列过滤数据框
- android - 如何在 android 中使用 MFCC TarsosDSP 和麦克风
- python - Python ncurses addstr 预期字节或 str,得到 int
- grails - 在列表中包含的值中定义固定位置
- javascript - IF 在地图箭头函数内
- javascript - webpack 文件加载器输出损坏的图像
- r - R中的子集列表