JSFiddle - React, Tailwind, and code Playground
HTML
<button class="collapsible">Open Collapsible</button>
<div class="content c1">
<button class="collapsible">Open Collapsible</button>
<div class="content c2">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="collapsible">Open Collapsible</button>
<div class="content c3">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
</div>
CSS
.collapsible {
background-color: #777;
color: white;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.active, .collapsible:hover {
background-color: #555;
}
.collapsible:after {
content: '\002B';
color: white;
font-weight: bold;
float: right;
margin-left: 5px;
}
.active:after {
content: "\2212";
}
.content {
padding: 0 18px;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
background-color: #f1f1f1;
}
JavaScript
var coll = document.getElementsByClassName("collapsible");
var i;
var checkCollapcible = function() {
for (var j = coll.length - 1; j >= 0; j--) {
if (coll[j].classList.contains('active')) {
console.log(j, coll[j].classList);
var c2 = coll[j].nextElementSibling;
console.log(c2);
c2.style.maxHeight = null;
c2.style.maxHeight = c2.scrollHeight + "px";
}
}
};
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight){
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
window.setTimeout(checkCollapcible, 200);
});
}