<div class="accordion">
<div class="accordion-group">
<div class="accordion-menu">
Alpha
</div>
<div class="accordion-content">
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>
</div>
<div class="accordion-group">
<div class="accordion-menu">
Bravo
</div>
<div class="accordion-content">
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>
</div>
<div class="accordion-group">
<div class="accordion-menu">
Charlie
</div>
<div class="accordion-content">
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>
</div>
<div class="accordion-group">
<div class="accordion-menu">
Delta
</div>
<div class="accordion-content">
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>
</div>
<div class="accordion-group">
<div class="accordion-menu">
Echo
</div>
<div class="accordion-content">
<p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>
</div>
</div>
* {
box-sizing: border-box;
}
.accordion {
width: 250px;
margin: 15px;
box-shadow: 0 8px 17px rgba(0,0,0,.2);
}
.accordion-menu {
font-size: 15px;
background: #0277BD;
color: white;
padding: 10px;
cursor: pointer;
user-select: none;
box-shadow: 0 2px 5px 0 rgba(0,0,0,.26);
}
.accordion-content {
height: 0;
overflow: hidden;
font-size: 14px;
}
.accordion-content.expanded {
height: 0;
overflow: hidden;
}
p {
margin: 10px;
}
let groups = gsap.utils.toArray(".accordion-group");
let menus = gsap.utils.toArray(".accordion-menu");
let menuToggles = groups.map(createAnimation);
menus.forEach(menu => {
menu.addEventListener("click", () => toggleMenu(menu));
});
function toggleMenu(clickedMenu) {
menuToggles.forEach(toggleFn => toggleFn(clickedMenu))
}
function createAnimation(element) {
let menu = element.querySelector(".accordion-menu");
let box = element.querySelector(".accordion-content");
gsap.set(box, { height: "auto"});
let animation = gsap.from(box, {
height: 0,
duration: 0.5,
ease: "power1.inOut"
}).reverse();
return function(clickedMenu) {
if (clickedMenu === menu) {
animation.reversed(!animation.reversed());
} else {
animation.reverse();
}
}
}
This Pen doesn't use any external CSS resources.