MENU

ステッキーヘッダー

ある地点まで縦にスクロールすると、上部の固定されたヘッダーの背景色や項目の色が反転するステッキーヘッダーについて今回は記述する。

今回は、ヘッダーの高さ分スクロールすれば反転するようにコードを記述する

1)HTML

 <header class="header" id="header">
    <div class="header__inner">
      <h1 class="header__site-title">
        <a href="./index.html" class="header__logo">CorpLogo</a>
      </h1>
      <div class="header__pc-nav pc-nav">
        <ul class="pc-nav__items">
          <li class="pc-nav__item"><a href="#">About</a></li>
          <li class="pc-nav__item"><a href="#">Service</a></li>
          <li class="pc-nav__item"><a href="#">News</a></li>
        </ul>
      </div>
      <div class ="btn">Contact</div>
    </div>
  </header>
  

2)CSS

.header {
  height: 74px;
  position: absolute;
  top: 0;
  left: 0;
  z-index: 999;
  background-color: #ffffff;
  width: 100%;
}
.header__inner {
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
  height: inherit;
  display: flex;
  align-items: center;
}
.pc-nav__items {
  display: flex;
}
.header__site-title {
  margin-right: auto;
}
.header__site-title a {
  font-size: 26px;
  font-weight: 500;
  color: #2B3F2F;
}
.pc-nav__item {
  margin-right: 66px;
}
.pc-nav__item a {
  font-weight: 500;
  color: #2B3F2F;
}
.btn {
  width: 130px;
  height: 50px;
  display: flex;
  justify-content: center;
  align-items: center;
  color: #fff;
  background-color: #2B3F2F;
  border-radius: 4px;
}
/*  fixedクラス追加ここから*/ 
.header.fixed {
  position: fixed;
  width: 100%;
  background-color:  #2B3F2F;
  top: 0;
  left: 0;
  z-index: 999;
  height: 74px;
}
.header__site-title a.fixed {
  font-size: 26px;
  font-weight: 500;
  color: #ffffff;
} 
.pc-nav__item a.fixed {
  font-weight: 500;
  color: #ffffff;
}
.btn.fixed{
    width: 130px;
    height: 50px;
    display: flex;
    justify-content: center;
    align-items: center;
    color: #2B3F2F;
    background-color: #ffffff;
    border-radius: 4px;
}

3)JS

$(function () {
  var $win = $(window),
    $fv = $('.fv'),
    $header = $('.header')
  $nav = $('.pc-nav__item a')
  $logo = $('.header__site-title a')
  $btn = $('.btn')
  hdHeight = $header.outerHeight(),
  fvHeight = $fv.outerHeight(),
  fixedClass = 'fixed';
  $win.on('load scroll', function () {
    var value = $(this).scrollTop();
    if ($win.width() > 100)
      if (value > hdHeight) {
        $header.addClass(fixedClass);
        $nav.addClass(fixedClass);
        $logo.addClass(fixedClass);
        $btn.addClass(fixedClass);
      } else {
        $header.removeClass(fixedClass);
        $nav.removeClass(fixedClass);
        $logo.removeClass(fixedClass);
        $btn.removeClass(fixedClass);
      }
  });
});

手順は簡単にいうと以下の通りである

1)CSSにあらかじめ、反転する時の表示であるfixed クラスを対応する要素のマルチクラスとして定義する
2)JSで反転させたい要素のクラスを変数に格納する
3)$header.outerHeight()でヘッダーの高さを取得する 
4)反転後の表示を定義したfixed クラスを変数に格納する
5)var value = $(this).scrollTop();で現在のスクロール位置を取得する
6)value > hdHeightヘッダーの高さ分スクロールしたので、fixed クラスを追加して(addClass
有効にさせることにより反転する

なおFVを過ぎた所で反転させたければ、value > hdHeightfvHeight に変更する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次