Accordion / 032 — ステッパー
デザイン見本
- Clear Step-by-Step Flow
- Numbered Badge on the Left
- Clean Process Visualization
左端にインディゴの番号バッジを配置したステッパーデザインです。チュートリアルや手順説明に最適で、`▸` が90°回転して開閉状態を直感的に伝えます。コンテンツはボタン本文と揃うよう左インデントされ、整理された見た目を保ちます。
実装コード
HTML
<div class="container">
<div class="btn-box">
<button data-default-text="Numbered Step Title" data-open-text="Close">Numbered Step Title</button>
</div>
<div class="more">
<ul>
<li>Clear Step-by-Step Flow</li>
<li>Numbered Badge on the Left</li>
<li>Clean Process Visualization</li>
</ul>
</div>
</div>
CSS
.container {
position: relative;
}
.container .btn-box button {
width: 100%;
padding: 16px 48px 16px 68px;
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 10px;
font-size: 14px;
font-weight: 600;
color: #1f2937;
cursor: pointer;
transition: border-color 0.2s, box-shadow 0.2s;
text-align: left;
position: relative;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
}
.container .btn-box button::before {
content: '01';
position: absolute;
left: 16px;
top: 50%;
transform: translateY(-50%);
width: 36px;
height: 36px;
background: #6366f1;
color: #fff;
border-radius: 50%;
font-size: 13px;
font-weight: 700;
line-height: 36px;
text-align: center;
}
.container .btn-box button::after {
content: '▸';
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
color: #6366f1;
font-size: 16px;
transition: transform 0.3s;
}
.container:has(.more.appear) .btn-box button::after {
transform: translateY(-50%) rotate(90deg);
}
.container .btn-box button:hover {
border-color: #6366f1;
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12);
}
.container .more {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease;
background: #f9fafb;
border-radius: 0 0 10px 10px;
border: 1px solid #e5e7eb;
border-top: none;
margin-top: -4px;
padding-left: 68px;
}
.container .more.appear {
max-height: 200px;
}
.container .more ul {
list-style: none;
padding: 14px 16px 14px 0;
margin: 0;
}
.container .more li {
padding: 6px 0 6px 12px;
color: #6b7280;
font-size: 13px;
border-bottom: 1px solid #e5e7eb;
position: relative;
}
.container .more li::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 4px;
height: 4px;
background: #6366f1;
border-radius: 50%;
}
.container .more li:last-child {
border-bottom: none;
}
JS
(function () {
var container = document.querySelector('.container');
if (!container) return;
var button = container.querySelector('.btn-box button');
var content = container.querySelector('.more');
if (button && content) {
button.addEventListener('click', function () {
content.classList.toggle('appear');
if (content.classList.contains('appear')) {
this.textContent = this.dataset.openText || 'Close';
} else {
this.textContent = this.dataset.defaultText;
}
});
}
})();