アコーディオンはCSSのみで作成できる!やり方を紹介

2024.01.03
CSSだけでアコーディオンを作るには

Webサイトにアコーディオンを実装したいと考えていませんか?

いざ実装しようと思っても、複雑な処理が必要そうに見えて、中々手が出しづらいですよね。

実はアコーディオンは、CSSのみで作成することができます。

今回はCSSのみを使用してアコーディオンを作りたいという方のために、

  • CSSでのアコーディオン作成について
  • アコーディオン作成についての注意点

以上の項目に沿って、解説していきますね。

この記事を読めば、CSSのみでアコーディオンを作成する方法が分かるようになりますよ。

ぜひ最後まで読んでくださいね!

CSSのみでアコーディオンを作成する

CSSのみでアコーディオンを作成するには、input要素のcheckboxを使います

実装方法を簡単に説明しますね。

チェックボタンをクリックした際に、アコーディオンが開いたり閉じたりするようにCSSで設定していきます。

これには、疑似クラスのcheckedを使用します。

後は、transitionでアニメーションの速度などを調整します。

以上のことを理解できれば、アコーディオンは作成できます。

この後に詳しく説明していきますので、現時点でわからない説明があっても大丈夫ですよ。

実際のコード

それでは、実際にコード書いていきましょう。

HTMLでは、lavel要素とinput要素を使います。

<div class="accordion">
  <input type="checkbox" id="label1" class="acd-check">
  <label for="label1" class="acd-label">タイトル1</label>
  <div class="acd-content">
    <p>アコーディオンの中身です</p>
    <p>クリックで表示させることができます</p>
  </div>
  <input type="checkbox" id="label2" class="acd-check">
  <label for="label2" class="acd-label">タイトル2</label>
  <div class="acd-content">
    <p>再びクリックすると閉じます</p>
    <p>CSSアニメーションでぬるっと動かしています</p>
  </div>
</div>

CSSは以下のように記述します。

.accordion {
  width: 650px;
  margin: 5px auto;
}
.acd-check{
  display: none;
}
.acd-label{
  display: block;
  margin: 5px auto;
  padding: 10px 0;
  text-align: center;
  background: #4169e1;
  color: #fff;
  font-weight: bold;
  cursor :pointer;
}
.acd-content{
  height: 0;
  padding: 0 15px;
  background: #eee;
  transition: .5s;
  overflow: hidden;
}
.acd-check:checked + .acd-label + .acd-content{ 
  height: 100px;
  padding: 15px;
}

青いバーをクリックすると、アコーディオンの隠れていた部分が表示されます

再びクリックすると閉じることができますね。

コードの解説

HTMLで以下のように書いている部分があります。

<input type="checkbox" id="label1" class="acd-check">
<label for="label1" class="acd-label">タイトル1</label>

上がチェックボックスで、下が青いバーになるラベルの部分ですね。

チェックボックスはCSSで非表示にしています。

チェックが入っているのか動作を確認したい場合は、非表示の指定を削除してみてください。

クリックするたびに、チェックが付いたり外れたりしているのを見ることができます。

このチェックが入ったときに、アコーディオンの中身が表示されるようになっています。

ラベルの部分をクリックしても、チェックボックスに反映されますね。

これは、label要素とinput要素のfor属性とid属性の値を同じものにしているためです。

これにより、チェックボックスを非表示にしても問題なく動作させることができるのです。

チェックを入れることで、以下の部分が表示されます。

<div class="acd-content">
  <p>アコーディオンの中身です</p>
  <p>クリックで表示させることができます</p>
</div>

CSSでは、

.acd-content{
  height: 0;
  padding: 0 15px;
  background: #eee;
  transition: .5s;
  overflow: hidden;
}
.acd-check:checked + .acd-label + .acd-content{ 
  height: 100px;
  padding: 15px;
}

としている部分ですね。

最初は高さを0にしています。

:checkedは疑似クラスで、チェックボックスにチェックが入っているときに適用されます。

acd-checkがそのチェックボックスですね。

acd-checkにチェックが入ったときに、それに隣接するacd-contentのスタイルを指定しています。

高さを100pxにしていますね。

acd-contentの指定で「transition: .5s」と指定しています。

これはCSSアニメーションの設定で、0.5秒かけて変化するという意味です。

秒数を減らせばシュッとした動きになり、増やせばゆっくりとした動きになります。

「overflow: hidden」とすることで、要素の高さからはみ出るものは、非表示になります。

文章も最初は非表示で、要素が現れた時に表示されていますね。

「display:none」ではダメなのか

先ほどの指定で最初の状態を「height: 0」や「overflow: hidden」で指定していましたが、これに「display:none」を使うことはできないのでしょうか?

最初に「display:none」を指定しておいて、チェックが入ったときに「display:block」とするような方法です。

この方法でも表示・非表示の切り替えはできますが、いきなりパッと表示されてしまうため、アニメーションを使ってふわっと表示させるということはできません

今回の目的では向かないでしょう。

また、高さを気にする必要がないものならば、不透明度を指定するopacityを使う方法もあります。

最初に「opacity:0」を指定しておき、チェックが入ったときに「opacity:1」となるようにしておくと、ふわっと中身が表示されます。

アコーディオン以外でもよく使われる手法ですね。

アイコンをつける

アイコンをつけて開いたときと閉じたときの状態をわかりやすくしてみましょう。

ここではFont Awesomeを使います。

導入の仕方は、こちらのページで紹介していますので、参考にしてみてください。

https://web-camp.io/magazine/archives/27886

HTMLは先ほどのものと同じものを使います。

CSSに以下の内容を付け加えます。

.acd-label{
  position: relative;
}
.acd-label:after {
  position: absolute;
  right: 0;
  top: 0;
  display: block;
  width: 25px;
  height: 25px;
  margin: 7px 20px;
  content:  '\f107';
  font-family: "Font Awesome 5 Free";
  font-size: 20px;
  line-height: 25px;
  text-align: center;
  border-radius: 50%;
  border: solid 2px #fff;
  transition: .5s;
}
.acd-check:checked + .acd-label:after{
  transform:rotate(180deg);
}

矢印のアイコンが表示されましたね。

ラベルに「position: relative」を指定し、アイコンに「position: absolute」を指定することで位置を調整しています。

以下の部分がFont Awesomeの設定ですね。

content:  '\f107';
font-family: "Font Awesome 5 Free";

head内で、Font AwesomeのURL等を設定をしていないとアイコンは表示されないので注意してくださいね。

ラベルをクリックすると、アコーディオンの中身が表示されると同時にアイコンが半回転しています。

transform:rotate(180deg);

それ以外の記述は、アイコンの周囲の円などのデザインをしています。

他にもアイコンの種類はたくさんあるので、ぜひ試してみてくださいね。

まとめ:基本はCSSだけでもOK

今回は、CSSを使ったアコーディオンの作成方法を詳細に解説してきました。

アイコンを付け足す方法も紹介しましたね。

基本的なものであればCSSで十分ですが、複雑な動作をさせたくなった場合には、プログラミングを視野に入れても良いかもしれません

今回の記事が参考になれば幸いです。

\プログラミングスクールを比較/

DMM WEBCAMP

COACHTECH

RUNTEQ

DMM WEBCAMP COACHTECH RUNTEQ
目指せる姿 WEBエンジニアへの転職
フリーランスエンジニア WEBエンジニアへの転職
分割払い
補助金 ×
転職保証 × ×
受講期間 12週間〜 3ヶ月〜 5ヶ月〜
特徴 【IT業界の転職を一番に考えたい方向け】
大手DMMが運営のプログラミングスクール
転職成功率98.8%
豊富なキャンペーンや補助金制度あり
【フリーランスを目指したい方向け】
フリーランスのエンジニアを最短で目指す
エンジニアと共に実際の案件開発を担当
【とことん勉強してから転職したい方向け】
1,000時間(約9カ月)のカリキュラムでしっかり勉強
企業の求める即戦力のWEBエンジニアを目指す
料金 329,350円〜
※給付金適用後
42万9,000円~ 55万円

公式HP

公式HP

公式HP

関連記事

資料請求

  • 短期集中で最速エンジニア転職を実現-転職成功者インタビュー一覧

    DMM WEBCAMPでは転職成功率98%を実現しています。本資料では、元警察官や元ラーメン屋など様々なバックグラウンドを持つ卒業生の声をお届けします。

    資料をダウンロードする
  • IT技術がもたらす3つの変化と身につけるべきスキル

    IT技術の発展により、今後10~20年程度で47%の仕事がなくなると言われています。どのような変化が訪れ、私達はどのようなスキルを身につけるべきかを解説します。

    資料をダウンロードする
  • 未経験がフリーランスエンジニアになる方法-年収アップで自由な働き方を手に入れる

    働き方改革やリモートワークの影響でフリーランスという働き方の人気は高まりつつあります。フリーランスエンジニアとして活躍するために必要な情報をお届けします。

    資料をダウンロードする

© 2024 WEBCAMP MEDIA Powered by AFFINGER5