Я подозреваю, что причина того, что переходы отключены, если «дисплей» изменяется, из-за того, что на самом деле делает дисплей.Он не меняет все, что можно плавно анимировать.
«display: none;» и «visibility: hidden» - это две полностью разные вещи.И то и другое делает элемент невидимым, но с «видимостью: скрытым» он все равно отображается в макете, но только не заметно .Скрытый элемент по-прежнему занимает место и по-прежнему отображается как встроенный, либо как блок, либо как inline-блок, либо как таблица, или как там говорится в элементе «display», и соответственно занимает пространство.Другие элементы не автоматически перемещаются, чтобы занять это пространство.Скрытый элемент просто не отображает свои фактические пиксели на выходе.
«display: none», с другой стороны, фактически предотвращает отображение элемента полностью .Он не занимает любого пространства макета.Другие элементы, которые занимали бы часть или все пространство, занимаемое этим элементом, теперь корректируются, чтобы занять это пространство, как если бы элемент просто вообще не существовал .
“display”Это не просто еще один визуальный атрибут.Он устанавливает весь режим рендеринга элемента, например, блок, встроенный блок, встроенный блок, таблица, строка таблицы, ячейка таблицы, элемент списка или любой другой!У каждого из них очень разные разветвления разметки, и не было бы разумного способа анимировать или плавно перевести их (например, попробуйте представить плавный переход от «блока» к «встроенному» или наоборот!).
Именно поэтому переходы отключаются, если изменяется отображение (даже если изменение относится к «или нет» - «нет» - это не просто невидимость, это собственный режим рендеринга элементов, что означает отсутствие рендеринга вообще!),