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
