【发布时间】:2014-10-30 17:44:18
【问题描述】:
我正在尝试使用 flexbox 和转换创建手风琴,使用 jQuery 添加和删除折叠类。我遇到的问题是,如果我将扩展 div 的 flex-basis 设置为 auto,则动画不起作用。有关示例,请参阅http://jsfiddle.net/vbLqg40h/。如果我将 flex-basis 从 auto 更改为 500px,即 flex 容器的高度,动画将起作用(http://jsfiddle.net/vbLqg40h/2/)...我不知道为什么。
html
<div id="wrapper">
<div id="box1" class="expand"></div>
<div id="box2" class="expand collapse"></div>
<div id="box3" class="expand collapse"></div>
</div>
css
#wrapper {
height: 500px;
display: flex;
flex-direction: column;
}
.expand {
flex: 1 1 auto;
transition: all 2s;
}
.collapse {
flex: 0 1 25px;
}
#box1 {
background-color: yellow;
}
#box2 {
background-color: green;
}
#box3 {
background-color: blue;
}
javascript
$('.expand').click(function() {
var expandId = $(this).attr('id');
$('.expand').each(function() {
var thisId = $(this).attr('id');
if (expandId != thisId) {
$('#' + thisId).addClass('collapse');
} else {
$('#' + thisId).removeClass('collapse');
}
});
});
【问题讨论】:
-
过渡或动画仅适用于数值。 auto 不是,并且没有什么可以从该值继承或计算:(
-
基于@GCyrillus 的评论和@DRD 的回答,而不是javascript 中的
.addClass和.removeClass行,我将执行.css('flex', '0 0 25px')和.css('flex', '1 1 450px')之类的操作。我已经对此进行了测试,并且可以正常工作。谢谢。
标签: jquery css css-transitions flexbox