css - 使用v-if显示子div时如何避免父元素的高度跳跃
问题描述
我有一个父 div 和一个子 div。子 div 通过 v-if 显示。我可以向子元素添加过渡,但是一旦过渡超过父元素的高度就会突然变化并且看起来不太好。
我想要 jQuery 的 slideToggle() 函数之类的东西。
这是我的html,我通过转换使用淡入淡出效果opacity
:
<div class="my-div">
<p>some content</p>
<transition name="fade" mode="out-in">
<p key=1 v-if="show">hello</p>
</transition>
</div>
这是过渡CSS:
.fade-enter-active,
.fade-leave-active {
transition: opacity .5s
}
.fade-enter,
.fade-leave-to {
opacity: 0
}
.my-div {
background: lightgreen;
}
这是我的代码的小提琴:
https://jsfiddle.net/x15Lw6a3/
我不知道如何进行高度过渡。我已经尝试根据其他一些问题从opacity
toheight
和 to切换,max-height
但它只是上下切换。
任何想法或教程链接表示赞赏。谢谢!
解决方案
尝试max-height
通过添加max-height: 100px;
到fade-enter-active,
.fade-leave-active
规则来使用属性,并在.fade-enter,
.fade-leave-to
规则中将其设置为 0,如下所示:
Vue.config.devtools = false;
Vue.config.productionTip = false;
new Vue({
el: '#demo',
data: {
show: true
}
})
.fade-enter-active,
.fade-leave-active {
transition: all 0.5s ease;
max-height: 100px;
opacity: 1;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
max-height: 0px;
}
.my-div {
background: lightgreen;
}
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="demo">
<button v-on:click="show = !show">
Toggle
</button>
<div class="my-div">
<p>some content</p>
<transition name="fade" mode="out-in">
<p key=1 v-if="show" >hello</p>
</transition>
</div>
</div>
笔记:
你可以看到动画不是很流畅
推荐阅读
- linux - bash shell脚本别名扩展在if语句中不起作用
- javascript - MongoDB 将值存储在变量中
- sass - SCSS:如何在基础 6 中使用网格和装订线
- swiftui - 在 WatchOS 上启动视图
- linker - 对两个文件使用相同的链接器 ld 脚本文件目标
- sapui5 - 如何在 UI5 中使用 Side Navigation 组件来显示内容?
- video - AVFrame 数据格式
- c# - Asp .NET MVC 正则表达式
- angular - Angular & eslint - 找不到规则“@typescript-eslint/space-infix-ops”的定义
- ruby-on-rails - 为什么在使用 find_by_sql 时 pluck 仅适用于单个属性?