HOME > コラム > jQuery/JS Chips > 「Responsive drop-down navigation」の使い方

「Responsive drop-down navigation」の使い方

コラム

久しぶりに、動的要素の組み込み実践コラム記事です。
ここのところ、AMP HTMLやイラストレーターでの作業をアップしてたものでして、動的要素の組み込みが遠のいていました。
ということで、戻ってきまして、簡単WEBサイトテンプレート(PHP)への組み込みを配布しています。
「ちょっとは役に立ったかな?」や「ちょっと面白いな(笑)」みたいなことを感じられましたら、シェアして頂けますと幸いです。

jQuery/JS Chipsに投稿したコラム記事

「Responsive drop-down navigation」の使い方

Responsive drop-down navigationとは?
jQueryを用いてドロップダウンを実装するプラグイン

久しぶりのjQueryの組み込み記事です。
色々なネタをアップしていると、思いもよらず偏りが出てしまうものですね。
なんとか戻ってこれました。

今回は、ドロップダウンメニューを実装するjQueryプラグインです。
以前にも同様のファイルを紹介していますが、若干異なりますので、色々なjQueryに触れて下さいね。

元の仕様とは若干変えています。

今回、簡単WEBサイトテンプレート(PHP)に組み込むにあたり、CSSの仕様を若干変更致しました。

CSSの内容を一部だけ全てのブラウザサイズに対して共通で読み込ませている記述がありました。
この影響で、PCサイズのブラウザでグローバルメニュー部分の場所取りが難しかったことと、拡張性を持ちたいという時に面倒になると感じたので、簡単WEBサイトテンプレート(PHP)向けに修正しています。
ですので、PCディスプレイサイズのメニュー装飾、タブレットサイズディスプレイ以下サイズのメニュー装飾と分けて装飾して頂けるようにしています。
やっぱり、こういうスクリプトを触ってると、だいぶとクセがあるモノですので、自分のクセに治した・・・という感じです。

本家サイト

以下が本家サイトです。
ダウンロードに関してはファイルは用意されていないっぽいです。
ファイルをブラウザで開き、コピペなりダウンロードなりしてください・・・という感じでした。

ダウンロードと組み込みサンプル
Responsive drop-down navigation組み込み済みファイルのダウンロード
phptemp_dd_160314.zip
組み込み済みサンプル

「Responsive drop-down navigation」を組み込んだページのサンプルです。

元になるWEBサイトテンプレート(PHP)について

当サイト内の「SEOの基礎知識」の中のコンテンツです。

組み込み手順

凡そ、流れ的には以下のような順番です。

  1. レスポンシブに対応したCSSファイルを作成する。
    今回、新たに作成したCSSファイルは「 /css/navi.css 」です。
    また、同時に既存のグローバルメニュー箇所のCSSを修正する。
  2. 関係するjavascriptファイルをダウンロードして「 /js/ 」にアップ。
    今回アップしたのは「 /js/jquery.2.1.3.min.js 」と「 /js/doubletaptogo.js 」です。
  3. グローバルの設定ファイルを作成し、全ページにインクルードさせる。
    作成したインクルードファイルは「 /_set/global.php 」です。
    グローバルメニュー部分が該当箇所です。
  4. 修正したファイルをアップする。

ということで、上記の内容を以下で詳細解説致します。

CSSファイルの作成

新たに「 /css/navi.css 」を作成して、本家サイト内に記述されているCSS内容を書き込み修正しました。
以下のような記述にしています。

PCディスプレイサイズに併せた記述

@media only screen and ( min-width: 769px ) {

#nav {
	width: 1000px; /* 1000 */
	margin: 0 auto; /* 30 480 */
}

#nav:after {
	content:".";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}

#nav > a {
	display: none;
}

#nav li {
	position: relative;
}

#nav li a {
	color: #fff;
	background-color: #000;
	display: block;
}

#nav li a:hover {
	color: #000;
	background-color: #fff;
}

#nav span:after {
	width: 0;
	height: 0;
	border: 0.313em solid transparent; /* 5 */
	border-bottom: none;
	border-top-color: #efa585;
	content: '';
	vertical-align: middle;
	display: inline-block;
	position: relative;
	right: -0.313em; /* 5 */
}

/* first level */

#nav > ul {
	border-left: 1px solid #000;
}

#nav > ul > li {
	width: 19%;
	float: left;
}

#nav > ul > li > a {
	display: block;
	padding-top: 10px;
	padding-bottom: 10px;
	color: #fff;
	background-color: #000;
	font-weight: bold;
	border-right: 1px solid #fff;
}

#nav > ul > li > a:hover {
	color: #000;
	background-color: #fff;
}

#nav > ul > li:first-child > a {
	border-left: 1px solid #000;
}

#nav > ul > li:last-child > a {
	border-right: 1px solid #000;
}

#nav > ul > li:hover > a,
#nav > ul:not( :hover ) > li.active > a {
	background-color: #fff;
	color: #000;
}

/* second level */

#nav li ul {
	background-color: #000;
	color: #fff;
	display: none;
	position: absolute;
	top: 100%;
}

#nav li:hover ul {
	display: block;
	left: 0;
	right: 0;
}

#nav li:not( :first-child ):hover ul {
	left: -1px;
}

#nav li ul a {
	display: block;
	border-top: 1px solid #fff;
	border-bottom: 1px solid #fff;
	padding-top: 10px;
	padding-bottom: 10px;
	/** padding: 0.75em; **/ /* 15 (20) */
}

#nav li ul li a:hover,
#nav li ul:not( :hover ) li.active a {
	background-color: #fff;
	color: #000;
	border-top: 1px solid #000;
	border-bottom: 1px solid #000;
}

}

タブレット以下のディスプレイサイズに併せた記述

@media only screen and ( max-width: 768px ) {

#nav {
	width: 100%;
	font-family: 'Open Sans', sans-serif;
	position: absolute;
	top: 25%;
	left: 50%;
}

#nav > a {
	display: none;
}

#nav li {
	position: relative;
}

#nav li a {
	color: #fff;
	display: block;
}

#nav li a:active {
	background-color: #c00 !important;
}

#nav span:after {
	width: 0;
	height: 0;
	border: 0.313em solid transparent; /* 5 */
	border-bottom: none;
	border-top-color: #efa585;
	content: '';
	vertical-align: middle;
	display: inline-block;
	position: relative;
	right: -0.313em; /* 5 */
}

/* first level */

#nav > ul {
	height: 3.75em; /* 60 */
	background-color: #e15a1f;
}

#nav > ul > li {
	width: 25%;
	height: 100%;
	float: left;
}

#nav > ul > li > a {
	height: 100%;
	line-height: 2.5em; /* 60 (24) */
	text-align: center;
}

#nav > ul > li:not( :last-child ) > a {
	border-right: 1px solid #cc470d;
}

#nav > ul > li:hover > a,
#nav > ul:not( :hover ) > li.active > a {
	background-color: #cc470d;
}

/* second level */

#nav li ul {
	background-color: #cc470d;
	display: none;
	position: absolute;
	top: 100%;
}

#nav li:hover ul {
	display: block;
	left: 0;
	right: 0;
}

#nav li:not( :first-child ):hover ul {
	left: -1px;
}

#nav li ul a {
	border-top: 1px solid #e15a1f;
	padding: 0.75em; /* 15 (20) */
}

#nav li ul li a:hover,
#nav li ul:not( :hover ) li.active a {
	background-color: #e15a1f;
}


#nav {
	position: relative;
	top: auto;
	left: auto;
}

#nav > a {
	width: 3.125em; /* 50 */
	height: 3.125em; /* 50 */
	text-align: left;
	text-indent: -9999px;
	background-color: #e15a1f;
	position: relative;
}

#nav > a:before,
#nav > a:after {
	position: absolute;
	border: 2px solid #fff;
	top: 35%;
	left: 25%;
	right: 25%;
	content: '';
}

#nav > a:after {
	top: 60%;
}

#nav:not( :target ) > a:first-of-type,
#nav:target > a:last-of-type {
	display: block;
}

/* first level */

#nav > ul {
	height: auto;
	display: none;
	position: absolute;
	left: 0;
	right: 0;
}

#nav:target > ul {
	display: block;
}

#nav > ul > li {
	width: 100%;
	float: none;
}

#nav > ul > li > a {
	height: auto;
	text-align: left;
	padding: 0 0.833em; /* 20 (24) */
}

#nav > ul > li:not( :last-child ) > a {
	border-right: none;
	border-bottom: 1px solid #cc470d;
}

/* second level */

#nav li ul {
	position: static;
	padding: 1.25em; /* 20 */
	padding-top: 0;
}

}

色の装飾や、 active 時の装飾もありますので、そこは適宜修正して下さい。

作成したファイルは「 /css/ 」にアップして頂き、またインクルードファイル「 /_set/css.php 」に記述して下さい。
全ページ共通で読み込ませるファイルですので、全ページに表示されるように記述して下さい。

JSファイルのアップ

今回はjQueryの設定ファイルなどを触ることはありませんので、そのままアップして下さい。
配布ファイル内では「 /js/ 」にアップしています。

グローバルメニュー部分の修正

グローバルメニュー部分の修正です。
以下の記述を全ページに読み込ませるようにして下さい。
配布ファイルのケースでは、インクルードファイル「 /_set/global.php 」にグローバルメニューの記述をし、全ページでインクルードさせています。

全ページ共通の global.php の内容

<div id="globalbg">
<div id="nav" role="navigation">
<a href="#nav" title="Show navigation">Show navigation</a>
<a href="#" title="Hide navigation">Hide navigation</a>
<ul class="clearfix">
<li>
<a href="/column/web/160314/01/"><?php echo "$pankuzu_top"; ?></a>
</li>
<li><a href="/column/web/160314/01/cate_01/" aria-haspopup="true"><span><?php echo "$cate_01_linkname"; ?></span></a>
<ul>
<li><a href="/column/web/160314/01/cate_01/cate_01_01/"><?php echo "$cate_01_01_linkname"; ?></a></li>
</ul>
</li>
<li><a href="/column/web/160314/01/cate_02/" aria-haspopup="true"><span><?php echo "$cate_02_linkname"; ?></span></a>
<ul>
<li><a href="/column/web/160314/01/cate_02/cate_02_01/"><?php echo "$cate_02_01_linkname"; ?></a></li>
</ul>
</li>
<li><a href="/column/web/160314/01/cate_03/" aria-haspopup="true"><span><?php echo "$cate_03_linkname"; ?></span></a>
<ul>
<li><a href="/column/web/160314/01/cate_03/cate_03_01/"><?php echo "$cate_03_01_linkname"; ?></a></li>
</ul>
</li>
<li><a href="/column/web/160314/01/cate_04/" aria-haspopup="true"><span><?php echo "$cate_04_linkname"; ?></span></a>
<ul>
<li><a href="/column/web/160314/01/cate_04/cate_04_01/"><?php echo "$cate_04_01_linkname"; ?></a></li>
</ul>
</li>
</ul>
</div>

<script src="/column/web/160314/01/js/jquery.2.1.3.min.js"></script>
<script src="/column/web/160314/01/js/doubletaptogo.js"></script>
<script>
$( function() {
	$( '#nav li:has(ul)' ).doubleTapToGo();
});
</script>

念のためですが、上記 3 行目の「 Show navigation 」と、上記 4 行目の「 Hide navigation 」は好きなテキストに変えて頂いて問題ございません。

見たことがない記述がある・・・と感じられた方もいらっしゃるかと思います。
その見たことがない記述を理解出来なくても大丈夫です。
ただHTMLソース部分に記述が必要です、、、というだけです。
ですので、理解出来ていなくても記述はしておいて下さい。

ulに” class="clearfix"”がついてて、削除するのを忘れてたことは内緒です・・・この記事を書いている途中で気づきました(汗)
別に削除して頂いても問題ありませんので、出来れば削除でお願い致します。

因みにですが、こういうjQueryなどの組み込み系の記事を書く時は、先にサンプルファイルを作成し配布ファイルを整え、その後、記事を書いています・・・ってどうでもいいことですよね(苦笑)

全てのファイルをアップロードする

上記で作成したファイルなどを適宜整え、各種ファイルにインクルードさせたら全てのファイルをアップロードして下さい。
インターフェイスがサンプルのような感じになれば問題なく実装完了です。

その他、補足

WEBサイトテンプレート(PHP)の修正にあたって、以下の点に配慮しています。

  • 今回、サンプルにしたWEBサイトテンプレート(PHP)は「 phptemp_160202.zip 」です。
締め

いかがでしたでしょうか?
今回の内容は本家サイトの説明が若干少なかったような気がしました(笑)
ただ、設定ファイルなどが簡単だったのですぐに出来たという感じです。

こういう海外の本家サイトを見ながらjQueryや、その他の技術的なことに取り組むと、jQueryなどの技術に強くなるというよりは、英語に強くなってきている気がして仕方ありません(笑)
英語が出来るようになる・・・というお話ではなく、表現の仕方であったり、英語に対して怖がることなくどんなサイトでも見ることが出来るようになっていく気がします。
ですので、もし英語の勉強をしたい方は、こういう海外サイトを見て自分で各種プログラムを実装させると面白いかもしれません。

因みにですが、英語の読み書きにストレスがなくなる・・・という程度でして、ヒアリングや日常に会話に強くなるというお話ではありません・・・って、何の話やねん。
ここでは英語よりも、jQueryが主題ですので、お間違いなく。^^;

さておき。

海外のサイトにはたくさんのプログラムが置いてありますので、是非とも慣れてみてほしい気がする今日この頃です。

執筆 : 清水 隼斗

「Responsive drop-down navigation」の使い方の通常ページ

「Responsive drop-down navigation」の使い方」のシェアをお願い致します!