Skip to content

Instantly share code, notes, and snippets.

@mpukit
Created August 18, 2017 20:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mpukit/8a895824146d62f7ec5ea088e2aea492 to your computer and use it in GitHub Desktop.
Save mpukit/8a895824146d62f7ec5ea088e2aea492 to your computer and use it in GitHub Desktop.
Basic Content/Menu Accordion
/* =====================================
Accordion
======================================== */
var accItem = document.getElementsByClassName('accordionItem');
var accHD = document.getElementsByClassName('accordionItemHeading');
for (i = 0; i < accHD.length; i++) {
accHD[i].addEventListener('click', toggleItem, false);
}
function toggleItem() {
var itemClass = this.parentNode.className;
for (i = 0; i < accItem.length; i++) {
accItem[i].className = 'accordionItem close';
}
if (itemClass == 'accordionItem close') {
this.parentNode.className = 'accordionItem open';
}
}
<div class="left-nav">
<div class="accordionItem close">
<button class="accordionItemHeading has-dropdown">Menu Item 1</button>
<div class="accordionItemContent">
(Accordion Content)
</div>
</div>
<div class="accordionItem close">
<button class="accordionItemHeading has-dropdown">Menu Item 2</button>
<div class="accordionItemContent">
(Accordion Content)
</div>
</div>
</div>
.left-nav {
.accordionItem {
.accordionItemHeading {
display: flex;
justify-content: flex-start;
align-items: center;
font-weight: bold;
font-size: 12px;
line-height: 1.2;
background: #fff;
border: none;
padding: 5px 0;
color: purple;
width: 100%;
//text-align: left;
outline: none;
transition: 200ms;
opacity: 1;
&.has-dropdown {
position: relative;
&:before {
content: url('<caret-image-dn>');
transform: rotate(-90deg);
margin-right: 5px;
// position: absolute;
// left: 0;
// top: 10px;
// width: 16px;
// height: 100%;
}
}
}
}
.close {
float: none;
&.accordionItem {
opacity: 1;
}
.accordionItemContent {
height: 0px;
transition: height 1s ease-in-out;
transform: scaleY(0);
float: left;
display: block;
}
}
.open {
&.accordionItem {
opacity: 1;
button.accordionItemHeading {
&.has-dropdown {
&:before {
content: url('<caret-image-dn>');
transform: none;
// position: absolute;
// left: 0;
// top: 8px;
// width: 16px;
// height: 100%;
}
}
}
}
.accordionItemContent {
transform: scaleY(1);
transform-origin: top;
transition: transform 200ms ease-in-out;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment