ナビゲーションメニューとナビゲーションメニューアイコンのサンプルと解説。

スマートデバイス向けCSSナビゲーションメニュー実装解説

スマートフォン向けナビゲーションメニューなサンプルを3つ用意してそれぞれで実装解説したいと思います。実装に入る前に少し注意というかコツみたいなお話をしておきます。それは必要なボックス要素のtopを<body>に対して取り敢えず0に揃えるということです。必要なbox要素に<body>に対してcssでposition: absolute;、position: fix;、top: 0;などを指定することでbody上部に固定してあげます。どんなことでもそうだと思いますが、一度0や白紙にしてやることで全体が見えやすくなると思います。

それではcssナビゲーションメニューを3種類用意してそれぞれで実装例を示して解説していきたいと思います。

スマートデバイス向けCSSナビゲーションメニュー#01実装例

上のモバイルデバイス向けCSSナビゲーションメニュー実装例のソースをHTML、JavaScript、Cssそれぞれを示して解説していきたいと思います。

HTML

ナビゲーションメニュー#01 HTML実装解説

今回実装した3種類のナビゲーションメニューのhtmlで共通に必要なことは、<article>タグの中に<nav>タグが含まれるか、含まれないかです。正直<nav>タグがどこに配置してあっても実装することはできます。実際<footer>タグの下に記述している例などもありますのでそこはそれぞれの個性や考え方で少し変わってきます。

JavaScript(JQuery)共通

ナビゲーションメニュー JavaScript(JQury)実装解説

ナビゲーションメニューもメニューアイコンと同じようにJQuryで必要なところにopenクラスをつけ外しします。アニメーション切り替え用のトグルスイッチです。

ナビゲーションメニュー3種類とも共通ですので以下割愛させて頂きます。

CSS

ナビゲーションメニュー#01 CSS実装解説

ナビゲーションが縦に移動するだけの実装です。<article>タグの中に<nav>タグが含まれるので冒頭のところで少し述べたように<article>タグにcssでpostion:absolute; top:0;を指定してbodyのtopに固定します。

headerとarticleにcssのz-indexプロパティーでそれぞれ100と10を指定します。positionプロパティーを指定したbox要素には深さの階層(z軸)がありz-indexはその深さの階層を指定するものです。値が大きい方が階層の重なりは上にいきます。

positionプロパティーを指定したbox要素では通常htmlファイルの中で下に記述されている順で深さの階層は上になります。<div>タグが5つならんでいてすべてにpositionプロパティーを指定すると一番下の<div>タグが一番上の階層に重なります。z-indexプロパティーは値を指定することで重なりの順を変えることができます。

冒頭のほうで少し述べさせていただいたナビゲーションメニューの実装で<nav>タグを<footer>タグの下に持ってくるのは一番下の深度の階層は一番上なので、cssでのz-indexプロパティーの指定を回避することができるからです。

深度の階層やcssのz-indexプロパティーの知識があれば皆さんが実装し易い方法で実装して構わないと思います。多分どこでも実装できると思います。

次はナビゲーションメニューの<nav>タグにcssのmarginプロパティーのトップに‐55%を指定してナビゲーションが見えなくなるまでコンテンツを上に引き上げます。この設定は海外のサイトなどで確認するとブラウザによって異なるようです。chromeでは-50%、その他のブラウザでは-100%を指定してくださいとなっていますのでそれぞれのブラウザでまずは-50%、-100%を指定してそこから微調整して頂ければと思います。

ナビゲーションメニューのデフォルトの設定はこれで終わりになります。あとはcssナビゲーションアイコンと同様にopenクラスが有るか無いかでcssのtrsitionプロパティーを使用してmarginのトップの位置を‐55%と0でアニメーションさせて完成です。実行時時間に1000msを指定してあります。

スマートデバイス向けCSSナビゲーションメニュー#02実装例

二つ目のナビゲーションメニューはナビゲーションがコンテンツに重なる実装です。割とスタンダードに使われているナビゲーションメニューです。分かり易いようにナビゲーションを少し透明にしていますが実際ははずして構いません。実装例のソースをHTML、Cssそれぞれを示して解説していきたいと思います。JavaScriptは前回と共通です。

HTML

ナビゲーションメニュー#02 HTML実装解説

前回とかわりません。<nav>タグも<article>タグの中に含まれています。<nav>タグを<article>タグの外に出して実装することもできますが、今回は中に入れたまま実装してみたいと思います。

css

ナビゲーションメニュー#02 CSS実装解説

ナビゲーションメニュー#01では<article>タグに設定していたposition: absolute;とtop: 0;をナビゲーションメニュー#02では<nav>タグに付け替えて<article>タグのpositionプロパティーとtopプロパティーを外します。外さずに実装することもできますが今回は前回との比較もあるのではずしておきます。

<article>タグのトップに<nav>タグのトップを合わせることもできますが、<body>のトップに合わせた方が高さの計算が楽になります。高さをデバイスの高さに合わせたい時、<body>のトップに合わせたbox要素の高さはすべて100%か100vhで指定できます。

positionプロパティーを設定した<header>と<nav>タグにそれぞれz-indexプロパティーで100、10を指定します。

transformプロパティーでtranslateY(-100%)を指定します。

trasitionプロパティーでtranslateY(-100%)、translateY(0)でナビゲーションをアニメーションさせて完成です。実行時間は1000msに設定してあります。

スマートデバイス向けCSSナビゲーションメニュー#03実装例

今度は横に移動するスマートデバイス向けCSSナビゲーションメニューです。横移動のナビゲーションメニュー、縦移動のナビゲーションメニューとともにCSSナビゲーションメニューの実装でスタンダードなものを二つ組み合わせて実装してみました。

実装例のソースをHTML、CSSそれぞれを示して解説していきたいと思います。JavaScriptは共通なので割愛します。

HTML

ナビゲーションメニュー#03 HTML実装解説

今回のナビゲーションメニューは<nav>タグを<article>タグの外に出して実装しています。<article>要素にに横に移動するアニメーションを実装するため<nav>タグを内部に残しておくと、<nav>要素も横に移動してしまうためです。

<nav>タグを内部に残しておいてもナビゲーションメニューは実装できますが、シンプルに分かり易くするため今回は外にだして実装してみました。

CSS

ナビゲーションメニュー#03 CSS実装解説

最後のナビゲーションメニューの解説に入ります。まず<header>要素にposition: relative、z-index:100;、<nav>要素にposition: absolute;、top: 0;をcssで指定します。それぞれの重なりを確認しながら、うまくいかなければpositionプロパティーやz-indexプロパティーを重なりの順を考えながら、必要な要素に指定して下さい。

ナビゲーションメニューの<nav>要素にtransform: translateY(-100%);を設定して<nav>要素のbottomを<body>要素のtopの位置まで引き上げます。これでデフォルトの設定は終わりです。

ナビゲーションメニューアイコンをクリックし、openクラスが付加された状態で<nav>要素にtransform: translateY(0%);、<article>要素にtransform: translateX(-100%);を指定します。

ナビゲーションメニューの<nav>要素と<article>要素にtranslateプロパティーでアニメーションの実行時間とディレイタイムを設定して終了です。

モバイルデバイス向けCSSナビゲーションメニューとCSSナビゲーションメニューアイコンの実装解説まとめ

モバイルデバイス向けCSSナビゲーションメニューとCSSナビゲーションメニューアイコンの実装解説を何種類か例をあげながら記事にしてみましたが、いかがだったでしょうか?

ウェブの閲覧媒体がスマートフォンに移行した現在、モバイルデバイス向けCSSナビゲーションメニューとCSSナビゲーションメニューアイコンを含むスマートデバイスに向けたUIの実装は制作側としては完全に必須の技術です。

今回の記事がホームページ制作に関わるすべの方の一助になれば幸いに思います。それではまた。

おススメ関連記事

    コメント

    0

    コメントして下さい

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です