Пишу accordion на css + js используя
transition: 200ms height linear
. Изначально accordion открыт и его высота не указана через css, грубо говоря она auto. Но css не анимирует с auto to 0px. Нашел данный способ обхода:
function closeAccordion (accordion) {
accordion.style.height = `${accordion.scrollHeight}px`
window.getComputedStyle(accordion, null).getPropertyValue('height')
accordion.style.height = '0'
}
Благодаря строчке
window.getComputedStyle(accordion, null).getPropertyValue('height')
все работает.
Я понимаю что такой код склеиться в один вызов style и transition не сработает:
accordion.style.height = `${accordion.scrollHeight}px`
accordion.style.height = '0'
Я так-же понимаю что getComputedStyle как-то разрывает эту склейку. И у меня вопрос больше не про то как это работает (хотя и это в том числе).
А про то:
1) Работает ли это во всех браузерах?
2) Всегда ли он будет срабатывать? Т.е не будет он рандомно работать и не работать. Т.е всегда ли будет срабатывать сначала установка высоты (
accordion.style.height = `${accordion.scrollHeight}px`
), а потом уже анимация до 0?
3) Нормальный ли это способ? Просто он мне напоминает
setTimeout(() => {}, 0)