<div class="accordions">
  <div class="accordion">
    <div class="accordion__layout">
      <div class="accordion__title">
        <p>アコーディオン01</p>
        <div class="accordion__icon">
          <div class="accordion__bar"></div>
        </div>
      </div>
      <div class="accordion__content">
        <p>アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。</p>
      </div>
    </div>
  </div>
  <div class="accordion">
    <div class="accordion__layout">
      <div class="accordion__title">
        <p>アコーディオン02</p>
        <div class="accordion__icon">
          <div class="accordion__bar"></div>
        </div>
      </div>
      <div class="accordion__content">
        <p>アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。</p>
      </div>
    </div>
  </div>
  <div class="accordion">
    <div class="accordion__layout">
      <div class="accordion__title">
        <p>アコーディオン03</p>
        <div class="accordion__icon">
          <div class="accordion__bar"></div>
        </div>
      </div>
      <div class="accordion__content">
        <p>アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。アコーディオンの中身です。ここにはテキストが入る予定です。</p>
      </div>
    </div>
  </div>
 </div>
/* リセットCSS */
p {
  margin: 0;
}

.accordions {
  display: flex;
	flex-direction: column;
  gap: 30px;
}

.accordion:nth-child(1) .accordion__title {
  background: #ff0000;
}

.accordion:nth-child(1) .accordion__content {
  border: 3px solid #ff0000;
  border-top: none;
  background: rgba(255, 0, 0, .07);
}

.accordion:nth-child(2) .accordion__title {
  background: #00AA00;
}

.accordion:nth-child(2) .accordion__content {
  border: 3px solid #00AA00;
  border-top: none;
  background: rgba(0, 170, 0, .07);
}

.accordion:nth-child(3) .accordion__title {
  background: #0000ff;
}

.accordion:nth-child(3) .accordion__content {
  border: 3px solid #0000ff;
  border-top: none;
  background: rgba(0, 0, 255, .07);
}

.accordion__layout {
  max-width: 1000px;
  margin: 0 auto;
}

.accordion__title {
  position: relative;
  padding: 16px 70px 16px 20px;
}

.accordion__title p {
  font-size: 18px;
  color: #fff;
}

.accordion__icon {
	position: absolute;
  top: 50%;
  right: 20px;
  transform: translateY(-50%);
  width: 30px;
  height: 30px;
}

.accordion__bar {
  position: relative;
  width: 100%;
  height: 100%;
}

.accordion__bar::before {
  content: "";
	position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 0;
  height: 4px;
  width: 100%;
  border-radius: calc(4px / 2);
  background: #fff;
}

.accordion__bar::after {
  content: "";
	position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  height: 100%;
  width: 4px;
  border-radius: calc(4px / 2);
  background: #fff;
  transition: all 0.3s;
}

.accordion__content {
  display: none;
  padding: 24px 20px;
}

.js-icon-rotate .accordion__icon .accordion__bar::after {
  transform: translateX(-50%) rotate(90deg);
}
$(function(){
  const accordion_title = $('.accordion__title');
  const accordion_content = $('.accordion__content');
  
  accordion_title.click(function(){ 
    const accordion_content = $(this).next('.accordion__content');

    accordion_content.slideToggle();
    $(this).toggleClass("js-icon-rotate");
  });
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js