アコーディオン デザイン見本
ボタンクリックで要素の表示・非表示を切り替えるアコーディオンの実装解説。瞬時切り替えとフェードアニメーションの2パターンのコピペ用コードを掲載。
① 基本の開閉 — display プロパティで瞬時に切り替え
HTML
<div class="accordion">
<button class="acc-header" id="acc-header">
<span>もっと見る</span>
<span class="acc-arrow">▼</span>
</button>
<div class="acc-body" id="acc-body">
<ul>
<li>AAAAAA</li>
<li>BBBBBB</li>
<li>CCCCCC</li>
<li>DDDDDD</li>
<li>EEEEEE</li>
</ul>
</div>
</div>
CSS
.accordion {
border: 1px solid #d1d5db;
}
.acc-header {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
padding: 14px 16px;
background: #fff;
border: none;
font-size: 15px;
cursor: pointer;
box-sizing: border-box;
}
.acc-header:hover {
background: #f9fafb;
}
.acc-arrow {
font-size: 12px;
transition: transform 0.2s;
display: inline-block;
}
.acc-header.open .acc-arrow {
transform: rotate(180deg);
}
.acc-body {
display: none;
border-top: 1px solid #d1d5db;
padding: 12px 16px;
}
.acc-body.appear {
display: block;
}
.acc-body ul {
margin: 0;
padding: 0 0 0 20px;
}
.acc-body li {
padding: 4px 0;
font-size: 14px;
}
JS
var accHeader = document.getElementById('acc-header');
var accBody = document.getElementById('acc-body');
accHeader.addEventListener('click', function() {
accBody.classList.toggle('appear');
accHeader.classList.toggle('open');
});
classList.toggle() + display: none
CSS で .acc-body に display: none を指定しておき、.appear クラスが付いた時だけ display: block にします。ヘッダーに .open クラスを同時にトグルすることで、矢印アイコンを CSS の transform: rotate(180deg) で反転させ、開閉状態を視覚的に伝えます。
② フェードイン — @keyframes で滑らかに表示
HTML
<div class="accordion">
<button class="acc-header" id="acc-header">
<span>もっと見る</span>
<span class="acc-arrow">▼</span>
</button>
<div class="acc-body" id="acc-body">
<ul>
<li>AAAAAA</li>
<li>BBBBBB</li>
<li>CCCCCC</li>
<li>DDDDDD</li>
<li>EEEEEE</li>
</ul>
</div>
</div>
CSS
.accordion {
border: 1px solid #d1d5db;
}
.acc-header {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
padding: 14px 16px;
background: #fff;
border: none;
font-size: 15px;
cursor: pointer;
box-sizing: border-box;
}
.acc-header:hover {
background: #f9fafb;
}
.acc-arrow {
font-size: 12px;
transition: transform 0.2s;
display: inline-block;
}
.acc-header.open .acc-arrow {
transform: rotate(180deg);
}
.acc-body {
display: none;
border-top: 1px solid #d1d5db;
padding: 12px 16px;
}
.acc-body.appear {
display: block;
animation: 0.5s fadeIn;
}
.acc-body ul {
margin: 0;
padding: 0 0 0 20px;
}
.acc-body li {
padding: 4px 0;
font-size: 14px;
}
@keyframes fadeIn {
0% {
opacity: 0;
transform: translateY(-8px);
}
100% {
opacity: 1;
transform: none;
}
}
JS
var accHeader = document.getElementById('acc-header');
var accBody = document.getElementById('acc-body');
accHeader.addEventListener('click', function() {
accBody.classList.toggle('appear');
accHeader.classList.toggle('open');
});
@keyframes によるフェードアニメーション
@keyframes に名前(例: fadeIn)を付けて変化の内容を定義し、.appear クラスが付いた際の display: block と同時に animation を適用します。0% が変化前、100% が変化後の状態です。表示時だけふわっと現れる演出が実現でき、非表示時にはアニメーションは再生されません。
当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。
あわせて読みたい


Webデザイン・UIコンポーネント集(HTML/CSS/JS)
Webサイトやアプリで使われている『Webデザイン』や『UI』の実装例やデザイン例を纏めました。(随時更新中)実装方法などは別記事にコードや実装ポイントを公開してい…
