TEORICO

CSSとjQueryで奥に閉じるナビゲーション

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