Я пытаюсь создать аккордеон, используя flexbox и переходы, добавляя и удаляя класс collapse с jQuery. Проблема, с которой я столкнулась, заключается в том, что я устанавливаю flex-basis как auto для расширенных div, анимация не работает. См. Пример http://jsfiddle.net/vbLqg40h/. Если я изменю flex-основу от auto до 500px, высота контейнера flex, анимация работает (http://jsfiddle.net/vbLqg40h/2/) ... Не знаю почему.css accordion using flexbox
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 вместо строк '.addClass' и' .removeClass' в javascript я сделаю что-то вроде ' .css ('flex', '0 0 25px') 'и' .css ('flex', '1 1 450px') 'Вместо этого я протестировал это, и он работает. Спасибо. –