CSSとjQueryで奥に閉じるナビゲーション
CSSとjQueryで奥に閉じるナビゲーション
奥にパタンとなるグローバルナビを作ってみました
CSSのtransformを利用してアニメーションさせ、奥側にパタンとなるメニューを作ったのでメモ
まずはHTML
<header class="g_header"> <div class="header__inner"> <h1 class="header__logo"><a href="">ロゴ</a></h1> <nav class="g__nav"> <ul class="g__nav--list"> <li><a href="">ナビ</a></li> <li><a href="">ナビ</a></li> <li><a href="">ナビ</a></li> <li><a href="">ナビ</a></li> </ul> </nav> </div> </header>
一般的なheaderです。
横幅確保のためにheaderの中で、さらにdivでくくっている感じです。
必須ではないので、ここは適宜変更してください。
次にCSS
/* ヘッダー用css */ .g_header { position: fixed; top: 0; width: 100%; transform-origin: center top; transition: all .3s; box-shadow: 0 0 10px rgba(32, 14, 17, 0.15); } /* アニメーションさせるためのCSS */ .header__animate { position: fixed; background: #999; transform: rotateX(-90deg); transition: transform 0.3s cubic-bezier(0.55, 0.09, 0.68, 0.53), background 0.3s cubic-bezier(0.55, 0.085, 0.68, 0.53); }
このようにしておきます。
最後にjQuery
$(function () { $(window).scroll(function () { if ($(this).scrollTop() >= 50) { $('.g_haeder').addClass('header__animate'); } else { $('.g_haeder').removeClass('header__animate'); } }); });
これで下準備は完了です。
解説
CSSでまず注目するところは、CSSプロパティの
transform-origin: center top;
です。
これはtransformさせる要素の基点をどこにするかを指定するプロパティです。
center topと指定しておくことで変化の基点が中央、そして上となります。
.g_headerに対するCSSだけでは何も起こりません。
次に、.header__animateに対するCSSです。
このクラス名は何でもいいのですが、jQueryでtoggleClassで付与するためのクラス名と同じとします。
ここで注目するのは、
transform: rotateX(-90deg);
rotateで回転させます。
rotateXはX軸のみ回転させます。-90degとすることで真逆となります。
変化する対象の基点は中央かつ上ですので、そこから−90°回転させることで奥に行くように見えます。
奥行きがあるようにみせるために、backgroundをつけます。
今回は元の背景が白なので、グレーをbackgroundにつけました。
最後にjQueryを使用します。
windowをスクロールさせた時に実行させます。
条件は以下の通り
if ($(this).scrollTop() >= 50 )
今回はブラウザの一番上から50pxスクロールしたらクラスを付与するとしました。
トップから50px以下になった場合元に戻るようにしてます。
ここはjQueryの数値を変更することで任意の数値に変更することが可能です。
最後に注意点として、headerが終わって次の要素(コンテンツ部分)にはheaderと同じ高さ分のmargin-topをとってください。
そうしておかないとheaderがfixedとなっているので、コンテンツ部分が後ろに隠れてしまいます。
完成形デモ(CSSはSCSSなので注意)
参考サイト:
https://developer.mozilla.org/ja/docs/Web/CSS/transform-origin