【CSS】CSSでつくるアコーディオン

【CSS】CSSでつくるアコーディオン

よくある質問ページなどで見かける、クリックでコンテンツを開閉できるアコーディオンをCSSのみで実装する方法をご紹介します。

アコーディオン実装方法

HTML
<div class="accordion">

  <div class="faq">
    <input type="checkbox" id="faq01" class="toggle">
    <label class="question" for="faq01"><span>Q</span>質問01</label>
    <div class="anser">
      <div><span>A</span>質問01のA</div>
   </div>
  </div>

  <div class="faq">
    <input type="checkbox" id="faq02" class="toggle">
    <label class="question" for="faq02"><span>Q</span>質問02</label>
      <div class="anser">
      <div><span>A</span>質問02のA</div>
    </div>
  </div>
  
  <div class="faq">
    <input type="checkbox" id="faq03" class="toggle">
    <label class="question" for="faq03"><span>Q</span>質問03</label>
    <div class="anser">
      <div><span>A</span>質問03のA</div>
    </div>
  </div>
</div>
CSS
.accordion {
  margin: 4rem auto;
  max-width: 80%;
}

.toggle {
  display: none;
}

.faq {
  position: relative;
  margin-bottom: 1rem;
}

.question,.anser {
  transform: translateZ(0);
  transition: all 0.3s;
}

.question {
  border: solid 1px #999;
  padding: 1rem 2.2rem 1rem 1rem;
  display: block;
  color: #333;
}

.question span,.anser span {
  font-size: 160%;
  padding-right: 0.6rem;
  color: #c30a01;
  line-height: 0;
}

.question:after,.question:before {
  content: "";
  position: absolute;
  right: 1.25rem;
  top: 0;
  bottom: 0;
  margin: auto;
  width: 2px;
  height: 0.75rem;
  background-color: #999;
  transition: all 0.3s;
}

.question:after {
  transform: rotate(90deg);
}

.anser {
  max-height: 0;
  overflow: hidden;
}

.anser div {
  margin: 0;
  padding: 2rem 1rem 2rem;
  line-height: 1.8;
}

.toggle:checked + .question + .anser {
  max-height: 500px;
  transition: all 1.5s;
}

.toggle:checked + .question:before {
  transform: rotate(90deg) !important;
}

解説

・labelクリックでanserの表示・非表示を切り替えます。

・checkboxは非表示にしておきます。

・.toggle:checked + .question + .anser
チェックボックスにチェックがはいった時の.anserのCSSを指定します。

・.toggle:checked + .question:before
チェックがはいった時のbefore(縦棒)を90度回転させる。
(afterの縦棒と重なった状態になっています。)

・.question:beforeのtransition: all 0.3s;は、0.3秒かけてアニメーションします。
(今回の場合、0.3秒かけて90度の回転をします。)

実装結果

いかがでしょうか。
CSSのみでアコーディオンを実装してみました。
是非、使ってみてください。

他にもあるよ。関連記事

人気記事

人気記事

最新記事

ブログカテゴリー

タグ

プロフィール

プロフィール画像

猫田 ねこ

パチンコ店勤務からweb制作会社へ転職という異色の経歴。漫画大好き。アニメ大好き。パチンコ大好きな、ねこです。

利用規約  お問い合わせ

ページトップへ