当サイトは旧サイトで2024年12月更新をストップいたしました。
新サイト・新ページには新たなコンテンツを盛りだくさんで運用しております。新サイト・新ページは semlaboratory.jp/column/ にアクセスいただきますようよろしくお願いいたします。

久しぶりのjQueryの組み込み記事です。
色々なネタをアップしていると、思いもよらず偏りが出てしまうものですね。
なんとか戻ってこれました。
今回は、ドロップダウンメニューを実装するjQueryプラグインです。
以前にも同様のファイルを紹介していますが、若干異なりますので、色々なjQueryに触れて下さいね。
今回、簡単WEBサイトテンプレート(PHP)に組み込むにあたり、CSSの仕様を若干変更致しました。
CSSの内容を一部だけ全てのブラウザサイズに対して共通で読み込ませている記述がありました。
この影響で、PCサイズのブラウザでグローバルメニュー部分の場所取りが難しかったことと、拡張性を持ちたいという時に面倒になると感じたので、簡単WEBサイトテンプレート(PHP)向けに修正しています。
ですので、PCディスプレイサイズのメニュー装飾、タブレットサイズディスプレイ以下サイズのメニュー装飾と分けて装飾して頂けるようにしています。
やっぱり、こういうスクリプトを触ってると、だいぶとクセがあるモノですので、自分のクセに治した・・・という感じです。
以下が本家サイトです。
ダウンロードに関してはファイルは用意されていないっぽいです。
ファイルをブラウザで開き、コピペなりダウンロードなりしてください・・・という感じでした。
phptemp_dd_160314.zip
「Responsive drop-down navigation」を組み込んだページのサンプルです。
当サイト内の「SEOの基礎知識」の中のコンテンツです。
凡そ、流れ的には以下のような順番です。
ということで、上記の内容を以下で詳細解説致します。
新たに「 /css/navi.css 」を作成して、本家サイト内に記述されているCSS内容を書き込み修正しました。
以下のような記述にしています。
@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 」に記述して下さい。
全ページ共通で読み込ませるファイルですので、全ページに表示されるように記述して下さい。
今回はjQueryの設定ファイルなどを触ることはありませんので、そのままアップして下さい。
配布ファイル内では「 /js/ 」にアップしています。
グローバルメニュー部分の修正です。
以下の記述を全ページに読み込ませるようにして下さい。
配布ファイルのケースでは、インクルードファイル「 /_set/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)の修正にあたって、以下の点に配慮しています。
いかがでしたでしょうか?
今回の内容は本家サイトの説明が若干少なかったような気がしました(笑)
ただ、設定ファイルなどが簡単だったのですぐに出来たという感じです。
こういう海外の本家サイトを見ながらjQueryや、その他の技術的なことに取り組むと、jQueryなどの技術に強くなるというよりは、英語に強くなってきている気がして仕方ありません(笑)
英語が出来るようになる・・・というお話ではなく、表現の仕方であったり、英語に対して怖がることなくどんなサイトでも見ることが出来るようになっていく気がします。
ですので、もし英語の勉強をしたい方は、こういう海外サイトを見て自分で各種プログラムを実装させると面白いかもしれません。
因みにですが、英語の読み書きにストレスがなくなる・・・という程度でして、ヒアリングや日常に会話に強くなるというお話ではありません・・・って、何の話やねん。
ここでは英語よりも、jQueryが主題ですので、お間違いなく。^^;
さておき。
海外のサイトにはたくさんのプログラムが置いてありますので、是非とも慣れてみてほしい気がする今日この頃です。
執筆 : 清水 隼斗