問題3:CSSのみでアコーディオンを実装しよう
CSSのみでアコーディオンを実装してみましょう。
また、要素をクリックするとアニメーションで
パカパカアコーディオンになるようにしましょう。
見本を参考に作成してください。
また、要素をクリックするとアニメーションで
パカパカアコーディオンになるようにしましょう。
見本を参考に作成してください。
期待する画面
解答ソースコード
<section>
<input class="checkbox-input" type="checkbox" id="checkBox">
<label class="checkbox-label" for="checkBox">ここを押下するとアコーディオンが開きます</label>
<ul class="accordion-cat">
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
</ul>
<input class="checkbox-input" type="checkbox" id="checkBox2">
<label class="checkbox-label checkbox-label--red" for="checkBox2">ここを押下するとアコーディオンが開きます</label>
<ul class="accordion-cat">
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
</ul>
<input class="checkbox-input" type="checkbox" id="checkBox3">
<label class="checkbox-label checkbox-label--green" for="checkBox3">ここを押下するとアコーディオンが開きます</label>
<ul class="accordion-cat">
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
<li>アコーディオンの内容が入ります。</li>
</ul>
</section>
¥HTML¥
section {
display: inline-block;
}
.checkbox-input {
display: none;
}
.checkbox-label {
cursor: pointer;
display: inline-block;
padding: 16px;
background-color: #0e6edf;
color: #fff;
}
.checkbox-label--red {
background-color: red;
}
.checkbox-label--green {
background-color: green;
}
.checkbox-label::before {
content: "▼";
padding-right: 4px;
}
.checkbox-input:checked + .checkbox-label::before {
content: "ー";
}
.accordion-cat {
margin: 0 0 2px 0;
}
.accordion-cat li {
max-height: 0;
overflow-y: hidden;
transition: all 0.5s;
text-align: center;
}
.checkbox-input:checked + .checkbox-label + .accordion-cat > li {
max-height: 46px;
opacity: 1;
padding: 10px;
visibility: visible;
}
¥CSS¥
補足
今回の問題はセレクタの指定方法が少し難しく感じたのではないかと思います。
チェックボックスを表示させているinput要素にcheckedが入ったときに
アコーディオンメニュー内のli要素を表示させるというセレクタの書き方が
少し複雑になります。
+(プラス)演算子を付けて記述しておかないと、うまく表示させることはできません。
また、animationさせる場合のtransitionはchecked内に記述してしまうと戻るときにanimationされなくなってしまうのでliタグ自体に対して付与するようにしましょう。
チェックボックスを表示させているinput要素にcheckedが入ったときに
アコーディオンメニュー内のli要素を表示させるというセレクタの書き方が
少し複雑になります。
+(プラス)演算子を付けて記述しておかないと、うまく表示させることはできません。
また、animationさせる場合のtransitionはchecked内に記述してしまうと戻るときにanimationされなくなってしまうのでliタグ自体に対して付与するようにしましょう。
#忍者CODE無料問題集で活動を記録しよう
完了にする!
1.HTMLの宣言をしてみよう
チェックボックスを使用するということです。
inputがcheckdの時にコンテンツを出すといたって単純なことをやっております。
まず、inputとlabelを連動する為にはinputのid属性とlabelのfor属性を同じ名前にします。
その際にinputのチェックボックスは、display: none;で消しときましょう。
そして、開いた時のコンテンツにはデフォルト値として
max-height: 0;とoverflow-y: hidden;を付与しておきます。
こうしておく事で、視認できなくなり要素は隠れます。
そして、セレクタを上手く使用してinputにcheckdがついたら隠しておいた要素に高さをつけ見えるようにします。アニメーションについては、隠す要素のデフォルト値にtransition: all 0.5s;などすれば、アニメーションできます。