広告

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

この記事は約2分で読めます。

CSSのみでアコーディオンを実装しましたが、ハマってしまったので、メモ。

display:noneは使わず、height、opacity、overflow、visibilityを使う

htmlは記事下部にあるgitをご覧ください。

CSSの例

#navi-menu-submenu1 {
  height: 0;
  opacity: 0;
  overflow: hidden;
  transition:
    height .3s linear,
    opacity 0s linear .3s,
    visibility 0s linear .3s;
  visibility:hidden;
}

#navi-menu-input-submenu1:checked ~ #navi-menu-submenu1 {
  height: 184px;
  opacity: 1;
  transition:
    height .3s linear,
    opacity .3s linear,
    visibility .3s linear;
  visibility: visible;
}

display:noneは、アニメーションしない

アコーディオンを実装するとき、アニメーションなしであれば、display:noneを使うのが簡単です。

CSSの例

#navi-menu-submenu1 {
  display: none;
}

#navi-menu-input-submenu1:checked ~ #navi-menu-submenu1 {
  display: block;
}

display:noneでアニメーションする方法はありますが、開くときはアニメーション。閉じるときはアニメーションできません。

CSSの例

navi-menu-submenu1 {
  display: none;
  height: 0;
  opacity: 0;
}

navi-menu-input-submenu1:checked ~ #navi-menu-submenu1 {
  display: block;
  height: 184px;
  opacity: 1;
  animation-duration: 0.7s;
  animation-name: fade-in;
}
@keyframes fade-in {
  0% {display:block;opacity:0;height:0;}
  100% {display:block;opacity:1;height:184px;}
}

コードまとめ(htmlコード例はここにあります)