【发布时间】:2019-03-15 22:17:51
【问题描述】:
上下文:我在页面顶部有一个div,用于显示/隐藏按钮。 div 位于按钮下方和内容上方。我使用了transition-group,以便其余内容在显示/隐藏时在div 上向上/向下滑动。内容有一个margin-top,因此它限制了上面显示/隐藏的div。
需要:我想在div 顶部留出一个边距,这样当它显示时,它会在自身和按钮之间保留空间。
https://imgur.com/UG5iakC
问题:我尝试了两种方法:
1) 为隐藏的div 放置一个margin-top。
因为我在隐藏div 时有position:absolute,以便内容超过div,所以div 调整为内容的大小,因此边距自动变小;所以在隐藏它的时候,边距在隐藏之前变小了,而且很丑。
GIF:https://gph.is/2QInDfj
2) 在div 上方的transition-group 内添加一个hr。 如果没有hr,则幻灯片在div 上按预期工作。但是当我添加hr 并单击以隐藏div 时,幻灯片会按预期发生,但div 和hr 会立即消失,而不是显示出来,内容滑过它并覆盖它。
GIF:https://gph.is/2yd4JGt
所需的视觉效果,顶部没有边距/小时: https://gph.is/2OPZyFV
HTML
<transition-group name="slide">
<hr class="m-0" v-if="isVisible" key='h'>
<div class="d-flex" v-if="isVisible" id="filters" key='x'>
<div class="pl-5">
<p class="filterTitles">Day</p>
<app-day-filter v-for="day in weekDay"
:key="day.index"
:day="day">
</app-day-filter>
</div>
<div class="pl-5">
<p class="filterTitles">Time of day</p>
<app-tod-filter v-for="todf in tod"
:key="tod.index"
:todf="todf">
</app-tod-filter>
</div>
</div>
<app-event v-for='(eveniment, index) in filterEvent'
:key='index'
:eveniment='eveniment'
:index='index'></app-event>
</transition-group>
CSS
.slide-enter {
opacity:0;
}
.slide-enter-active {
transition: all 1s ease-out;
}
.slide-leave-active{
transition: all 1s ease-out;
opacity: 0;
position: absolute;
}
.slide-move {
transition: transform 1s;
}
#filters {
/* border-top: 1px solid lightgrey; */
}
建议?
谢谢
【问题讨论】:
标签: javascript html css vue.js transition