<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-color: #ff0000;
		}

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

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

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

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

		.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;

	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%;

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

	&::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);
			}
		}
	}
}
View Compiled
$(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