Аккордион с transition
Запись от mr_dramm размещена 24.10.2023 в 16:15
Показов 2006
Комментарии 3
Метки html, javascript
|
Вертикальный на классах В давней теме я сделал прототип влавного спадающего списка Плавное выдвижение блока в js и немного увлекся что привело к созданию этой записи в блоге Особенности реализации: - класс .dropdown не должен иметь padding или border, если нужны padding для контента устанавливаем их в классе content или item.Логика работы: - элемент .content скрывается с помощью .dropdown с установленным свойством overflow:hidden, - ширина .content равна ширине .dropdown это помогает контенту автоматически адоптироваться к изменению ширины, т.е. не нужно писать доп. обработчики отслеживания ширины элемента- высота элементов .content и .dropdown совпадает если в dropdown не установлен height или установлен height auto, поэтому можно всегда определить на какую высоту увеличить dropdpwn чтобы показать скрытый content. dropdown меняет высоту на 0 чтобы скрыть content, и во время анимации на высоту content, как только transition закончится height для drodown станет autoВозможные проблемы: - если во время transition height будет меняться ширина элемента dropdown, которая повлечет изменение высоты content в конце transition будет скачек к высоте content. Это нужно только если у вас будет специфическая реализация элемента в которой во время клика по табам меняется ширина таба, в данной реализации ширина таба меняется только если во время transition менять ширину viewport документа.на классах демо Код Кликните здесь для просмотра всего текста
Вертикальный на замыканиях логика работы такая же как и у вертикального на классах демо Код Кликните здесь для просмотра всего текста
html
Объяснение Кликните здесь для просмотра всего текста
Когда контент скрыт унего класс dropdown с высотой 0
- изначально все элементы скрыты за то показывается или скрывается элемент отвечает переменная show для каждого элемента она своя. - итак элемент скрыт у него - overflow: hidden; - для того чтобы контент на влиял на высоту, т.е. контент дочернего блока будет скрыт, но свои размеры не поменяет, если мы принудительно сделаем размеры родительского блока меньше, например, height 0 - height: 0; - высота скрытого элемента - transition: height 1s; - ну и анимация - происходит клик начинает работать функция click этот вызов на всякий случай, если ширина родительского блока не разу не менялась, то можно размер блока вообще закешировать.
Для открытых элементов нужно установить height auto. У всех блоков dropdown в состоянии покоя установлено heigh auto опять же для того, а вдруг поменяется ширина родительского блока dropdow и соответственно высота дочерних блоков может поменяться. Поэтом после окончания анимации для открытых блоков dropdown устанавливается height auto.
и таким образом не сработает
теперь мы открываем новый элемент делаем все тоже самое только наоборот временно устанавливаем inline style с height которое будет жить только во время анимации как только анимация закончилась убираем inline style и добавляем на элемент show с height auto и теперь немного еще о том как работает переключение: Обычно это можно сделать способом перебора всех элементов с целью найти открытый например по классу show чтобы его скрыть, и потом открыть новый. Но тут немного другая логика не то чтобы перебор элементов занимал много времени, точно нет если только у нас не 100к+ элементов на странице. В общем есть такая переменная
Горизонтальный Только на css для любого количества элементов размещаемых в html демо Код Кликните здесь для просмотра всего текста
css
html
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Метки html, javascript
Размещено в ui
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 3
Комментарии
-
красивоЗапись от seregadushka размещена 24.10.2023 в 17:02
-
Запись от mr_dramm размещена 24.10.2023 в 20:26
-
Форуму пора подумать о своём снипете. Требуйте от людей двойную работу.
Чисто по коду на форуме невозможно представить результат.Запись от seregadushka размещена 04.01.2024 в 16:56


