はじめに
Bootstrap 3を試してみるシリーズの第7弾は、BootstrapのGetting startedでも使用され、当サイトでも使用している見出しの自動スクロールを行うScrollspyを試してみます。
2013年12月29日 16時11分
Bootstrap 3を試してみるシリーズの第7弾は、BootstrapのGetting startedでも使用され、当サイトでも使用している見出しの自動スクロールを行うScrollspyを試してみます。
作業の前提条件は、下記のとおりです。
ソフトウエア | バージョン |
---|---|
OS | Windows 7 Ultimate 32bit |
Cygwin | Setup Version 2.831 |
公式ドキュメントでは、NavigatinBarの例が載っていますが、より実践的に使用できるサンプルを作成します。
お約束のbootstrap.min.[cs,js] + jquery-1.10.2.min.jsを 指定して、HTMLを作成します。
bodyタグに、スクロールを追跡するための設定を行います。
<body data-spy="scroll" data-target=".sidebar" >
指定する属性は、以下のとおりです。
属性名 | 概要 |
---|---|
data-spy | scrollを指定します。 |
data-target | 自動スクロールを追跡するクラスを指定します。 |
コンテンツの見出しを作成します。
作成の際には、nav-tabsまたは、nav-pillsクラスを使用する必要があります。
他のクラスを指定すると、見出しの追跡ができなくなりますので、注意して下さい。
<div class="sidebar"> <ul class="nav nav-pills nav-stacked"> <li><h4>Table of Contents</h4></li> <li><a href="#chap1">Chapter #1</a></li> <li><a href="#chap2">Chapter ##2</a></li> <li><a href="#chap3">Chapter ###3</a></li> <li><a href="#chap4">Chapter ####4</a></li> <li><a href="#chap5">Chapter #####5</a></li> </ul> </div><!-- sidebar -->
コンテンツの本文を作成します。本文には、見出しで指定したリンクのIDを指定します。
<article id="chap1"><h4>Chapter 1</h4></article> <article id="chap2"><h4>Chapter 2</h4></article>
見出しを追跡できるように、JavaScriptを追加します。
targetには、bodyタグに指定したdata-targetと同じクラス名を指定します。
<script> $('body').scrollspy({ target: '.sidebar' }) </script>
ここまでの作業で、見出しの追跡はできるようになりましたが、表示された見出しがスクロールによって見えなくならないようにするため、見出しの表示位置を固定しています。
また、nav-pillsクラスの初期値のままだと、見出しの行間が広すぎるため、行間を狭くしています。
<style> body { margin-top: 80px; } .sidebar ul { position: fixed; } .sidebar li > a { padding: 5px 10px; } </style>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!--[if IE]> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <![endif]--> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>029</title> <link href="bootstrap.min.css" rel="stylesheet"> <style> body { margin-top: 80px; } .sidebar ul { position: fixed; } .sidebar li > a { padding: 5px 10px; } article { height:300px; margin-top:20px; padding: 10px; } #chap1 { background: #b2b2b2; } #chap2 { background: #ddded3; } #chap3 { background: #d1b6b0; } #chap4 { background: #fadebc; } #chap5 { background: #9fc5ba; } </style> </head> <body data-spy="scroll" data-target=".sidebar"> <div class="navbar navbar-default navbar-fixed-top" role="navigation"> <div class="container"> <div class="navbar-header"><h1>navbar-fixed-top</h1></div> <div class="navbar-collapse collapse"></div> </div> </div> <div class="container"> <div class="row"> <div class="col-xs-3 col-sm-3 col-md-3"> <div class="container-fluid"> <div class="sidebar"> <ul class="nav nav-pills nav-stacked"> <li><h4>Table of Contents</h4></li> <li><a href="#chap1">Chapter #1</a></li> <li><a href="#chap2">Chapter ##2</a></li> <li><a href="#chap3">Chapter ###3</a></li> <li><a href="#chap4">Chapter ####4</a></li> <li><a href="#chap5">Chapter #####5</a></li> </ul> </div><!-- sidebar --> </div><!-- container-fluid --> </div><!-- col-3 --> <!-- メインコンテンツ --> <div class="col-xs-6 col-sm-6 col-md-6"> <div class="container-fluid"> <article id="chap1"><h4>Chapter 1</h4></article> <article id="chap2"><h4>Chapter 2</h4></article> <article id="chap3"><h4>Chapter 3</h4></article> <article id="chap4"><h4>Chapter 4</h4></article> <article id="chap5"><h4>Chapter 5</h4></article> </div><!-- container-fluid --> </div><!-- col-6 --> <div class="col-xs-3 col-sm-3 col-md-3"></div><!-- col-2 --> </div><!-- row --> </div><!-- container --> <script src="jquery-1.10.2.min.js"></script> <script src="bootstrap.min.js"></script> <script> $('body').scrollspy({ target: '.sidebar' }) </script> </body> </html>