Accordion panel design with JavaScript

You can use this simple accordion because it is built with pure javascript/vanilla javascript. It’s very lightweight and responsive and this coding structure won’t interrupt your site design. It’s easy to use and developer friendly coding structure.

HTML5 | CSS3 | JavaScript

Version: 1.0.0

Accordion label

Accordion text

Accordion label

Accordion text

Accordion label

Accordion text

Accordion label

Accordion text

Accordion label

Accordion text

Code

<div class="bnAccordionWrapper">
    <div class="bnAccordion">
        <div class="bnAccordionBtn">Accordion label</div>
        <div class="bnAccordionPanel"><p>Accordion text</p></div>
    </div>

    <div class="bnAccordion">
        <div class="bnAccordionBtn">Accordion label</div>
        <div class="bnAccordionPanel"><p>Accordion text</p></div>
    </div>

    <div class="bnAccordion">
        <div class="bnAccordionBtn">Accordion label</div>
        <div class="bnAccordionPanel"><p>Accordion text</p></div>
    </div>

    <div class="bnAccordion">
        <div class="bnAccordionBtn">Accordion label</div>
        <div class="bnAccordionPanel"><p>Accordion text</p></div>
    </div>

    <div class="bnAccordion">
        <div class="bnAccordionBtn">Accordion label</div>
        <div class="bnAccordionPanel"><p>Accordion text</p></div>
    </div>
</div>
.bnAccordionWrapper {
    display: block;
    width: 100%;
    position: relative;
    max-width: 800px;
    margin: 20px auto;
}
.bnAccordion {
    margin-bottom: 5px;
}
.bnAccordionBtn {
    display: block;
    position: relative;
    padding: 5px 10px;
    background: #5ed5e4;
    border-radius: 3px;
    font-size: 18px;
    line-height: 1.2;
    color: #fff;
    cursor: pointer;
    transition: all .3s;
}
.bnAccordionBtn.bnActive {
    border-bottom-left-radius: 0px;
    border-bottom-right-radius: 0px;
    transition: all .3s;
    border-bottom: 1px solid #ffffff45;
}
.bnAccordionBtn:after {
    content: '\002B';
    position: absolute;
    right: 0;
    top: 0;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 5px;
    font-size: 18px;
    transition: .3s;
    transform: rotate(0deg);
}
.bnAccordionBtn.bnActive:after {
    content: '\2212';
    transition: .3s;
    transform: rotate(0deg);
}
.bnAccordionPanel {
    margin: 0;
    padding: 0 10px;
    background-color: #5ed5e4;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.2s ease-out;
    color: #fff;
    font-size: 16px;
    line-height: 1.3;
    border-bottom-left-radius: 3px;
    border-bottom-right-radius: 3px;
}
.bnAccordionPanel p {
    margin: 0;
    padding: 5px 0;
}
var acc = document.getElementsByClassName("bnAccordionBtn");
var i;
    
    for (i = 0; i < acc.length; i++) {
      acc[i].addEventListener("click", function() {
        this.classList.toggle("bnActive");
        var panel = this.nextElementSibling;
        if (panel.style.maxHeight) {
          panel.style.maxHeight = null;
        } else {
          panel.style.maxHeight = panel.scrollHeight + "px";
        }
      });
    }