CSS3でアコーディオン・トグル
CSSのチェックボックスを使って、JavaScriptに依存せずにアコーディオン・トグルを実装する簡単なサンプルコードを記述してます。
環境
- OS windows10 64bit
- chrome 86.0.4240.198
アコーディオン・トグル
<input>タグのtype属性を”checkbox”に指定します。
動きの基本となるcssは以下の3つだけです。
/*動作の基本となるcss*/
.toggleable__content {
max-height: 0;
overflow: hidden;
transition: max-height .8s cubic-bezier(0,1,0,1)
}
.toggleable__control:checked ~ .toggleable__content {
transition-timing-function: ease-in-out;
max-height: 200px;
}
.hidden--visually {
border: 0;
clip: rect(1px 1px 1px 1px);
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
<!--基本のHTML-->
<div class="toggleable">
<input class="toggleable__control hidden--visually" id="toggleable1" type="checkbox" />
<label class="toggleable__label" for="toggleable1">
ラベル1
</label>
<div class="toggleable__content">ラベル1の内容をここに記述します。</div>
</div>
サンプルコード
以下は実際に、アコーディオン・トグルを実装したサンプルコードとなります。
<section>
<style>
.toggleable__content {
max-height: 0;
overflow: hidden;
transition: max-height .8s cubic-bezier(0,1,0,1)
}
.toggleable__control:checked ~ .toggleable__content {
transition-timing-function: ease-in-out;
max-height: 200px;
}
.hidden--visually {
border: 0;
clip: rect(1px 1px 1px 1px);
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
/* 修飾用 CSS */
.toggleable {
border-bottom: 2px solid #bdbdbd;
}
.toggleable__label {
display: block;
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 2rem 0;
cursor: pointer;
font-weight: bold;
}
.toggleable__content {
margin-top: 1rem;
padding: 0 2rem;
}
.toggleable__control:checked ~ .toggleable__content {
margin-bottom: 1rem;
}
.toggleable__label::after {
content: "▼";
font-size: 0.8rem;
}
.toggleable__control:checked ~ .toggleable__label::after {
content: "▲";
}
</style>
<div class="toggleable">
<input class="toggleable__control hidden--visually" id="toggleable1" type="checkbox" />
<label class="toggleable__label" for="toggleable1">
ラベル1
</label>
<div class="toggleable__content">ラベル1の内容をここに記述します。</div>
</div>
<div class="toggleable">
<input class="toggleable__control hidden--visually" id="toggleable2" type="checkbox" name="t2" />
<label class="toggleable__label" for="toggleable2">
ラベル2
</label>
<div class="toggleable__content">ラベル2の内容をここに記述します。</div>
</div>
<div class="toggleable">
<input class="toggleable__control hidden--visually" id="toggleable3" type="checkbox" />
<label class="toggleable__label" for="toggleable3">
ラベル3
</label>
<div class="toggleable__content">ラベル3の内容をここに記述します。</div>
</div>
</section>
ブラウザ上で表示した結果
ラベル1の内容をここに記述します。
ラベル2の内容をここに記述します。
ラベル3の内容をここに記述します。
-
前の記事
Nuxt.js ライブラリ「vue-simple-accordion」を使用してアコーディオンを実装する 2020.12.14
-
次の記事
php checkdateを使って、日付が正しいかを判定する 2020.12.14
コメントを書く