![見出し画像](https://assets.st-note.com/production/uploads/images/161970879/rectangle_large_type_2_544ed1f3d3b2c4922eb8a264a4b166f9.png?width=1200)
Photo by
chiyoizmo
ハンバーガーメニューを開くときにCSSで動きをつける
ハンバーガーメニューを開くときに動きをつけるには、CSSのtransitionまたはanimationを利用。以下の手順で実装。
1. CSSトランジションを利用した方法
「高さが0から自動(auto)に変わる」の場合はmax-heightを使用するのが一般的。height: auto;ではトランジションが止まらないので注意。
コード例
.header-hmbnav {
display: block;
position: absolute;
top: 100%; // ヘッダー直下
left: 0;
max-height: 0; // 初期状態で非表示
overflow: hidden; // コンテンツが見えないように
width: 100%;
background-color: $White;
color: $TextBlack;
transition: max-height 0.5s ease; // トランジションで動きを設定
z-index: 1200;
}
input[type="checkbox"]:checked ~ .header-hmbnav {
max-height: 500px; // メニューの高さ(大きめに設定)
}
ポイント
max-heightを設定:初期状態では0、開くときは十分な高さ(例500px)に変更する。
overflow: hidden;:非表示部分が見えなくする。
transition:max-heightに対して適用。
2. CSSアニメーションを利用した方法
アニメーションを使い、カスタマイズ性の高いストーリーを作る。
コード例
@keyframes slideDown {
from { max-height: 0; opacity: 0; } to { max-height: 500px; opacity: 1; }
}
@keyframes slideUp {
from { max-height: 500px; opacity: 1; } to { max-height: 0; opacity: 0; } }
.header-hmbnav {
max-height: 0;
overflow: hidden;
width: 100%;
background-color: $White;
color: $TextBlack;
z-index: 1200;
opacity: 0;
transition: none; // アニメーションと混在しないように無効化 }
input[type="checkbox"]:checked ~ .header-hmbnav {
animation: slideDown 0.5s ease forwards; // 開くときのアニメーション
}
input[type="checkbox"]:not(:checked) ~ .header-hmbnav {
animation: slideUp 0.5s ease forwards; // 閉じるときのアニメーション
}
ポイント
@keyframesで動きの定義:slideDown(開く動き)とslideUp(閉じる動き)を作成します。
forwardsを指定:アニメーション終了時に状態を維持します。
トランジションのオンラインに注意:transitionは有効化。
3. より自然な動きを追加する工夫
easingを調整:ease-in-outやcubic-bezierを使うと自然な動きになる
速度の調整:0.3s~0.7sの範囲で試すと良い動きが見つかりやすい。
追加の効果:opacityを併用するとより自然になる。
どちらを使うべきか?
簡単な対処が欲しい→transition(推奨 transition:max-height ○○s;)
カスタマイズの高い意思決定が欲しい →animation