【Bootstrap】スクロールスパイを使いこなそう

スポンサーリンク

こんにちは朱夏です。

今回は、Bootstrapのスクロールスパイを使ってみたいと思います。
スクロールスパイが何かというと、画面をスクロールさせたときに、表示されている内容がどこのリンクの内容か解る様に、ナビゲーション内のリンクを自動的にアクティブにしてくれる機能の事です。

パッと思いつくものだと、パララックスサイトと組み合わせると良さそうですね。
リンクはリストグループでも良い様なので、電子マニュアルなんかで採用するのもいいと思いました。

それではやっていきます。

 

コード

先ずはコードを置いておきます。

<!DOCTYPE html>
<html lang="ja">
   <head>
      <meta charset="UTF-8"> 
      <title>タイトル</title>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
      <link rel="stylesheet" href="css/style.css">
      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
      <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
      <script src="https://kit.fontawesome.com/da0fa6be04.js" crossorigin="anonymous"></script>

      <!--[if lt IE 9]>
      <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
      <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
      <![endif]-->
   <script src="js/sample.js"></script>
   </head>
   <body data-spy="scroll" data-target="#Navbar" data-offset="100">
      <!----- ヘッダー ----->
      <header>
         <h1>スクロールスパイ</h1>
      </header>
      <nav class="navbar navbar-expand-lg navbar-dark bg-dark text-light sticky-top">
         <a class="navbar-brand" href="#">Top</a>
         <button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#Navbar" aria-controls="Navbar" aria-expanded="false" aria-label="ナビゲーションの切替">
            <span class="navbar-toggler-icon"></span>
         </button>
         <div class="collapse navbar-collapse" id="Navbar">
            <ul class="nav nav-pills flex-column flex-lg-row">
               <li class="nav-item"><a class="nav-link active" href="#page1">リンク1</a></li>
               <li class="nav-item"><a class="nav-link" href="#page2">リンク2</a></li>
               <li class="nav-item"><a class="nav-link" href="#page3">リンク3</a></li>
               <li class="nav-item dropdown">
                  <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">リスト</a>
                  <div class="dropdown-menu">
                     <a class="dropdown-item" href="#menu1">メニュー1</a>
                     <a class="dropdown-item" href="#menu2">メニュー2</a>
                     <a class="dropdown-item" href="#menu3">メニュー3</a>
                  </div>
               </li>
            </ul>
         </div>
      </nav>
      <!----- ヘッダー END ----->
      <!----- メインコンテンツ ----->
      <div class="container">
         <div id="page1">
            <h1>リンク1</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
         <div id="page2">
            <h1>リンク2</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
         <div id="page3">
            <h1>リンク3</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
         <div id="menu1">
            <h1>リンク1</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
         <div id="menu2">
            <h1>リンク2</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
         <div id="menu3">
            <h1>リンク3</h1>
            <p>スクロールスパイテスト用テキスト</p>
                <-- 10行くらい繰り返し -->
            <p>スクロールスパイテスト用テキスト</p>
         </div>
      </div>
      <!----- メインコンテンツ END ----->
      <!----- フッター ----->
      <footer class="bg-dark text-light">
         <p class="">(c)test.com</p>
      </footer>
      <!----- フッター END ----->
   </body>
</html>

 

標準だとアクティブ状態のリンクの背景カラーなどが水色なのでcssで変更します。

a {
    text-decoration: none;
    color: whitesmoke;
}

a:hover {
    text-decoration: none;
    color: whitesmoke;
    background-color: black;
}

.nav-pills .nav-link.active, .nav-pills .show>.nav-link {
    text-decoration: none;
    color: whitesmoke;
    background-color: black;
}

.dropdown-item.active, .dropdown-item:active {
    color: #fff;
    text-decoration: none;
    background-color: #00000040;
}

 

こちらを実行すると、こんな感じの画面になります。

 

解説

ここからはカスタムして使っていくための解説になります。
スクロールスパイ機能を使うのに必須となるのは、Bodyタグへ書いている以下の3つがあります。

    1. data-spy=”scroll”
    2. data-target=”#Navbar”
    3. data-offset=”100″

 

1. data-spy=”scroll”
固定で書いておくことが必須のものになります。

2.data-target=”#Navbar”
#Navbarは、ターゲットとなる内容を入れるdivタグのidを指定しています。

3.data-offset=”100″
data-ofsetは、本当は必須ではないです。
ただ、ここを調節してあげると、リンクがアクティブになるタイミングを調整できます。

 

次に、変更することで簡単にデザインをいじれる部分を解説していきます。

navタグのclass=
 ”sticky-top”
 ”navbar-dark”
 ”bg-dark”

 

“sticky-top”
このclassを指定していると、ナビゲーションバーが上端までスクロールしたら固定されます。
常に一番上に固定しておきたいときは”fixed-top”に書き換えるとOKです。
下端に固定する”fixed-bottom”というものもあります。

“navbar-dark”と”bg-dark”
この2つはBootstrap4の標準カラーを指定している部分です。
この部分を変更すれば、色の変更はすぐできると思います。

参考までに、Bootstrap4で指定できる標準カラー一覧は以下で確認できます。

 

最後に、アクティブ時のカラーなどを変更するためにcssファイルに書き込んでいます。
指定しているのは以下の4つです。

リンクのスタイル
・aマウスカーソルホバー時のリンクのスタイル
・a:hoverスクロールでアクティブになったリンクのスタイル
・.nav-pills .nav-link.active, .nav-pills .show>.nav-linkドロップダウンリスト内のスタイル
・.dropdown-item.active, .dropdown-item:active

 

CSSのカスタマイズは自由度が高いので細かい説明は割愛します。

スクロールでアクティブになったリンクのスタイルを変更する場合、指定するセレクタが解りづらいと思います。
その場合、Chromeのデベロッパーツールでスタイル変更している場所を探すとすぐ見つけることが出来ると思います。

 

まとめ

今回はスクロールスパイを使ってみました。
コピペと簡単な編集で使えるようにしたものと、カスタマイズのポイントをまとめているので、カラーやフォント、サイズなどを変更すれば簡単にデザインの変更ができると思います。

 

今回はここまでです。
次回もよろしくお願いします。

 

タイトルとURLをコピーしました