アコーディオンは、クリックで内容を表示・非表示にするインタラクティブなUI要素です。
アコーディオン
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScriptアコーディオンについて</title>
<link rel="stylesheet" href="./main.css" />
</head>
<body>
<div id="accordion">
<div class="accordion-item">
<div class="accordion-header">セクション1</div>
<div class="accordion-content">
<p>ここにセクション1の内容が入ります。</p>
<p>追加のコンテンツ1-1。</p>
<p>追加のコンテンツ1-2。</p>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header">セクション2</div>
<div class="accordion-content">
<p>ここにセクション2の内容が入ります。</p>
<p>追加のコンテンツ2-1。</p>
<p>追加のコンテンツ2-2。</p>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header">セクション3</div>
<div class="accordion-content">
<p>ここにセクション3の内容が入ります。</p>
<p>追加のコンテンツ3-1。</p>
<p>追加のコンテンツ3-2。</p>
</div>
</div>
</div>
<script src="./main.js"></script>
</body>
</html>
// ページの読み込みが完了
document.addEventListener("DOMContentLoaded", function () {
const accordionHeaders = document.querySelectorAll(".accordion-header");
accordionHeaders.forEach((header) => {
header.addEventListener("click", function () {
const content = this.nextElementSibling;
// 現在の高さを取得
const currentHeight = content.style.maxHeight;
// すべてのアコーディオンを閉じる
document.querySelectorAll(".accordion-content").forEach((item) => {
item.style.maxHeight = null;
item.previousElementSibling.classList.remove("active");
});
// クリックしたアコーディオンを開閉
if (currentHeight) {
content.style.maxHeight = null;
this.classList.remove("active");
} else {
content.style.maxHeight = content.scrollHeight + "px";
this.classList.add("active");
}
});
});
});
#accordion {
width: 80%;
margin: auto;
font-family: "Arial", sans-serif;
}
.accordion-item {
border: 1px solid #ddd;
margin-bottom: 10px;
border-radius: 5px;
overflow: hidden;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
}
.accordion-header {
background-color: #f7f7f7;
padding: 15px;
cursor: pointer;
position: relative;
font-weight: bold;
transition: background-color 0.3s ease;
}
.accordion-header:hover {
background-color: #e2e2e2;
}
.accordion-header::after {
content: "\25bc"; /* 下向きの矢印 */
position: absolute;
right: 15px;
transition: transform 0.5s ease;
}
.accordion-header.active::after {
transform: rotate(180deg); /* 矢印を回転させる */
}
.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.5s ease-out, padding 0.5s ease-out;
padding: 0 15px;
border-top: 1px solid #ddd;
background-color: #fafafa;
}
.accordion-content p {
margin: 15px 0;
}
出力結果
セクション1
ここにセクション1の内容が入ります。
追加のコンテンツ1-1。
追加のコンテンツ1-2。
セクション2
ここにセクション2の内容が入ります。
追加のコンテンツ2-1。
追加のコンテンツ2-2。
セクション3
ここにセクション3の内容が入ります。
追加のコンテンツ3-1。
追加のコンテンツ3-2。