JSFiddle - React, Tailwind, and code Playground

by Prathameshsb

HTML

<div class="accordion">
  <div class="accordion-header">
    <h2>Accordion Item 1</h2>
    <div class="arrow-icon"></div>
  </div>
  <div class="accordion-content">
    <p>This is the content for Accordion Item 1.</p>
  </div>
</div>

<div class="accordion">
  <div class="accordion-header">
    <h2>Accordion Item 2</h2>
    <div class="arrow-icon"></div>
  </div>
  <div class="accordion-content">
    <p>This is the content for Accordion Item 2.</p>
  </div>
</div>

<div class="accordion">
  <div class="accordion-header">
    <h2>Accordion Item 3</h2>
    <div class="arrow-icon"></div>
  </div>
  <div class="accordion-content">
    <p>This is the content for Accordion Item 3.</p>
  </div>
</div>

CSS

.accordion {
  border: 1px solid #ccc;
  margin-bottom: 10px;
}

.accordion-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px;
  cursor: pointer;
  background-color: lightblue;
}

.accordion-content {
  padding: 10px;
  display: none;
}

.arrow-icon {
  width: 10px;
  height: 10px;
  border: solid #000;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
  transition: transform 0.2s ease-in-out;
}

.open .arrow-icon {
  transform: rotate(-135deg);
}

JavaScript

const accordions = document.querySelectorAll('.accordion');

accordions.forEach((accordion) => {
  const header = accordion.querySelector('.accordion-header');
  const content = accordion.querySelector('.accordion-content');

  header.addEventListener('click', () => {
    accordion.classList.toggle('open');
    content.style.display = accordion.classList.contains('open') ? 'block' : 'none';
  });
});