ログイン
問題3

CSSのみでアコーディオンを実装しよう

Webにおけるアコーディオンとは、アコーディオンメニューのことを指しており、クリックすることで隠れている詳細を展開表示させる事ができます。 jQueryでも作れますが、今回CSSで実装していきます。

アイコン画像

問題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¥
            

コメントのアイコン解説

CSSのみでのアコーディオン実装で肝なのは
チェックボックスを使用するということです。
inputがcheckdの時にコンテンツを出すといたって単純なことをやっております。

まず、inputとlabelを連動する為にはinputのid属性とlabelのfor属性を同じ名前にします。
その際にinputのチェックボックスは、display: none;で消しときましょう。
そして、開いた時のコンテンツにはデフォルト値として
max-height: 0;とoverflow-y: hidden;を付与しておきます。

こうしておく事で、視認できなくなり要素は隠れます。

そして、セレクタを上手く使用してinputにcheckdがついたら隠しておいた要素に高さをつけ見えるようにします。アニメーションについては、隠す要素のデフォルト値にtransition: all 0.5s;などすれば、アニメーションできます。
ログインして解答を見る

コメントのアイコン補足

今回の問題はセレクタの指定方法が少し難しく感じたのではないかと思います。

チェックボックスを表示させているinput要素にcheckedが入ったときに
アコーディオンメニュー内のli要素を表示させるというセレクタの書き方が
少し複雑になります。
+(プラス)演算子を付けて記述しておかないと、うまく表示させることはできません。

また、animationさせる場合のtransitionはchecked内に記述してしまうと戻るときにanimationされなくなってしまうのでliタグ自体に対して付与するようにしましょう。
1.HTMLの宣言をしてみよう
続きの動画を見たい方は公式LINEから「HTML」と送信すると動画が見れます。
HTML_CSSを学ぶなら現役エンジニア監修「甲賀コース」
キャンペーン

閉じる