LogoMark.png

NavigationDesign の変更点


#author("2020-02-25T20:30:54+09:00","default:inoue.ko","inoue.ko")
*Navigation Design Samples
~

ナビゲーションメニューには様々な実装方法があります。現在では、UI用の様々なjQueryプラグインが公開されていて、それらを利用すれば、煩雑な仕組みのメニューも、HTMLにCLASSを追加するだけで実装可能ですが、まずは自分で、基本的なコードを書いて仕組みを理解することが重要です。ここでは、基本的なパターンのサンプル、またいくつかのプラグインの利用について紹介しています。
~

***CONTENTS
#contents2_1
~

**はじめに
メニューのUI(User Interface)デザインは、Webサイトの使い勝手に大きく影響します。以下のような点に配慮が必要です。
-メニューの存在そのものがわかること
&small(スマートフォンでは、ハンバーガーボタンが一般的になりました。);
-メニューの階層構造(実質的にサイトの階層構造)がわかりやすいこと
-選択部分と非選択部分が明確に区別されること
-ポインティングしやすいこと
&small(A要素に padding を持たせてクリックエリアを広げるなどの工夫が必要です。);

レスポンシブなサイトでは、PC用とモバイル用で、インターフェイスを変更する配慮が必要です。
-PC用の画面では、マウスホバーで対象が反応、また下の階層がある場合はそれが表示されるようにします。一般に :hover 擬似クラスで実現します。
-モバイルでは :hover がうまく機能しないので、クリックで下の階層が出るように設計します。クリックしなくても下の階層の有無がわかるよう、メニューの第一レベルには「▼」や「+」などのマークを表示するとよいでしょう。一般に JavaScript(jQuery)でサブメニューの出入りを制御します。
~
~

**HoverDown|forPC
メインメニューのマウスホバー時に、下位のサブメニューが出現する例です。
CSSの hover 擬似クラスのみで実現します。

-''DEMO'':https://koichi-inoue.github.io/Navi-HoverDown/
-''CODE'':https://github.com/koichi-inoue/Navi-HoverDown
~

***index.html
#gistit(koichi-inoue/Navi-HoverDown/blob/master/index.html,,400)
HTMLの方は、メインメニューである ul li の下位に サブメニューの ul li が入れ子になる形で記述します。メインメニューのブロックに class = "mainMenu"を定義。またサブメニューのブロックに class = "subMenu" を定義しています。
~

***style.css
#gistit(koichi-inoue/Navi-HoverDown/blob/master/style.css,,400)
通常は非表示(visibility: hidden;)で、マウスホバーで表示(visibility: visible;)。
要は、.mainMenuにおける li をposition: relative; として、そこを基準に .subMenu の場所を position: absolute; で指定する形でサブメニューの出現する位置を定めています。
~
~

**ToggleBasic
jQuery のSlideToggle() によりクリックで開閉する最もシンプルな事例です。
メニューアイコンには [[FontAwesome>https://fontawesome.com/]]を利用しています。

-''DEMO'':https://koichi-inoue.github.io/Navi-ToggleBasic/
-''CODE'':https://github.com/koichi-inoue/Navi-ToggleBasic
~

***index.html
#gistit(koichi-inoue/Navi-ToggleBasic/blob/master/index.html,,400)
~

***style.css
#gistit(koichi-inoue/Navi-ToggleBasic/blob/master/style.css,,400)
~

***script.js
#gistit(koichi-inoue/Navi-ToggleBasic/blob/master/script.js)
~
~

**ToggleBasic2
jQuery の toggleClasss() でCLASSの付け替えを行うパターンです。

-''DEMO'':https://koichi-inoue.github.io/Navi-ToggleBasic2/
-''CODE'':https://github.com/koichi-inoue/Navi-ToggleBasic2
~

***index.html
上記の事例と同じです。
~
***style.css
以下、要点のみ掲載します。
 .menu {
   position: absolute;
      :
   display: none;
 }
 .menu.isOpen {
   display: block;
 }

~

***script.js
#gistit(koichi-inoue/Navi-ToggleBasic2/blob/master/script.js)
~
~

**ButtonAnimation
ハンバーガーアイコンをCSSでアニメーションさせています。

-''DEMO'':https://koichi-inoue.github.io/Navi-ButtonAnimation/
-''CODE'':https://github.com/koichi-inoue/Navi-ButtonAnimation
~

***index.html
#gistit(koichi-inoue/Navi-ButtonAnimation/blob/master/index.html,,400)
~

***style.css
#gistit(koichi-inoue/Navi-ButtonAnimation/blob/master/style.css,,400)
~

***script.js
#gistit(koichi-inoue/Navi-ButtonAnimation/blob/master/script.js,,400)
~
~

**AccordionMenu
2段階のスライドトグルで、一般にアコーディオンメニューと言います。

-''DEMO'':https://koichi-inoue.github.io/Navi-Accordion/
-''CODE'':https://github.com/koichi-inoue/Navi-Accordion
~

***index.html
#gistit(koichi-inoue/Navi-Accordion/blob/master/index.html,,400)
~

***style.css
#gistit(koichi-inoue/Navi-Accordion/blob/master/style.css,,400)
~

***script.js
#gistit(koichi-inoue/Navi-Accordion/blob/master/script.js)
~

***解説
再利用に配慮し、HTML側は最小限のクラス定義で実現するようにしたため、CSS と JavaScript が若干複雑になっています。

-HTMLのメニューの構造は標準的な階層リスト構造とし、第1レベルと第2レベルの <ul> タグに ''.menu'' ''menu-child'' をそれぞれ付すだけです。
 <ul class="menu">
   <li><a href="">ITEM-01</a>
     <ul class="menu-child">
       <li><a href="#">ITEM-01-01</a></li>
       <li><a href="#">ITEM-01-02</a></li>
     </ul>
   </li>
   <li><a href="">ITEM-02</a>
     <ul class="menu-child">
       <li><a href="#">ITEM-02-01</a></li>
       <li><a href="#">ITEM-02-02</a></li>
       <li><a href="#">ITEM-02-03</a></li>
      </ul>
   </li>
   :

-下位レベルに menu-child をもつ要素に JavaScript で ドロップダウンボタンを動的に付し、isOpen と isClosed の2つの状態をCSS に記載しています。
~
~

**DrawerMenu
左からスライドして出現するタイプのメニューです。一般に、メニュー出現時にはコンテンツ部分に半透明のオーバーレイをかけて、閉じる際には、オーバーレイ部分のクリックでもそれが可能になるようにします。

-''DEMO'':https://koichi-inoue.github.io/Navi-Drawer/
-''CODE'':https://github.com/koichi-inoue/Navi-Drawer
~

***index.html
#gistit(koichi-inoue/Navi-Drawer/blob/master/index.html,,400)
~

***style.css
#gistit(koichi-inoue/Navi-Drawer/blob/master/style.css,,400)
~

***script.js
#gistit(koichi-inoue/Navi-Drawer/blob/master/script.js)
~
~

**DrawerMenu+
上記のサンプルに、ハンバーガーボタンアニメーションとサブメニューのドロップダウンを加えたものです。組み合わせただけなので、コードはGitHubのページでご確認下さい。

-''DEMO'':https://koichi-inoue.github.io/Navi-Drawer-Plus/
-''CODE'':https://github.com/koichi-inoue/Navi-Drawer-Plus
~
~

**DrawerMenuCSS
HTML+CSS のみ(JavaScriptなし)で実装した事例です。煩雑でわかりにくいので、こちらで解説しています。> [[CSS/SlideMenu]]

-''DEMO'':https://koichi-inoue.github.io/Navi-Drawer-CSS/
-''CODE'':https://github.com/koichi-inoue/Navi-Drawer-CSS
~
~

**Plugins for Navigation

***Luxbar Sample
CSS のみで実装された軽量ナビゲーションバー。埋め込みコードの生成も自動化されているので、簡単なサイトの制作を急ぎで行う場合は便利です。
https://github.com/balzss/luxbar
~

-''DEMO'':https://koichi-inoue.github.io/Luxbar_Sample/
-''CODE'':https://github.com/koichi-inoue/Luxbar_Sample
~

-利用方法
--コードの自動生成ができるデモページに接続してください
https://balzss.github.io/luxbar/
--''Getting started:'' の部分で、3つめの方法「CDN で読み込む」のコードを取得して、あなたのサイトの <head> に追加して下さい(以下の1行がそれです)。
 <link rel="stylesheet" href="https://cdn.rawgit.com/balzss/luxbar/ae5835e2/build/luxbar.min.css">
--''Menu builder:'' の部分で、メニュー項目名の入力編集ができます。
デザインスタイル、色を選択すると、下段にコードが自動生成されます。
これを、あなたのサイトのナビゲーション部分に追加すればOKです。
--メニューの2階層目をドロップダウン表示したい場合は、アイテム部分を以下のように2階層化したコードで書けばOKです。
 <li class="luxbar-item dropdown"><a href="#">Dropdown Menu</a>
   <ul>
     <li class="luxbar-item" ><a href="#">Dropdown Item 1</a></li>
     <li class="luxbar-item" ><a href="#">Dropdown Item 2</a></li>
     <li class="luxbar-item" ><a href="#">Dropdown Item 3</a></li>
   </ul>
 </li>
--なお、ブレイクポイントは、786px に固定されているようです。

~

***MaterialDesign Sample
GoogleのMaterialDesignを使用したメニューのサンプルです
Bootstrap が提供するフレームワークを利用しています。

-''DEMO'':https://koichi-inoue.github.io/MaterialDesign/
-''CODE'':https://github.com/koichi-inoue/MaterialDesign

MaterialDesignの解説はこちら > [[MaterialDesign]]

~
~


**APPENDIX
その他のツールの紹介
~
***Hover.CSS - A collection of CSS3 powered hover effects
http://ianlunn.github.io/Hover/

マウスのホバリングに反応する様々なアニメーションエフェクトを簡単に適用することができる CSSファイルです。
-1. 上記のサイトの DOWNLOAD から丸ごとダウンロード
-2. 必要なファイルは、CSSフォルダの中の hover.css のみです。
-3. hover.css をあなたのサイトフォルダに投入してください。
-4. htmlファイルの <head>部分で、それをリンクします。
 <link rel="stylesheet" href="(CSSファイルのパス)/hover.css">
これで準備完了です。
-5. [[デモサイト>http://ianlunn.github.io/Hover/]]上で使いたい効果の部分のクラス名を抽出して(ブラウザで「要素の検証」するとクラス名がわかります)任意のタグで
 <a class="クラス名" href="#">MENU</a>
などと追加記述すれば、効果が適用されます。
~

***Slicknav
http://ww1.slicknav.com/
以下にデモサイトがあります
https://pecopla.net/wp-content/themes/2015.pecopla/demo/slicknav/sample-1.html
-必要なファイルは以下の2つです。
-jquery.slicknav.min.js
-slicknav.css
~

***Accordion Menu
シンプルなアコーディオン型ナビゲーションメニュー
https://codepen.io/MrsColombo/pen/mEeQwy
~

***Swanky Pure CSS Drop Down Menu
HTMLとCSSのみで表現できるドロップダウンメニュー
https://codepen.io/jcoulterdesign/pen/qdWxEm
~

***Simple radial menu
ハンバーガーメニューをクリックすると、円形にSNSアイコンが展開します
https://codepen.io/suez/pen/vAais
~

***Formstone
フロントエンド用の様々なコンポーネントのコレクションです
https://formstone.it/
以下にナビゲーションのデモがあります
https://formstone.it/components/navigation/demo/

''使い方解説''
&color(red){とりあえず、以下のようにすれば試すことができますが、JSフレームワークを使いこなすには学習コストがかかります。};
-パッケージを以下のGitHubリポジトリからDLします。
https://github.com/Formstone/Formstone
-DLしたパッケージの dist フォルダの中の js と css をまるごと自身のWebサイトのディレクトリ直下に投入します。  
-Navigationコンポーネントのドキュメント(以下)を確認して下さい。
https://formstone.it/components/navigation/
-以下のファイルの読み込みが必要であることが記載されています。
--''Main''
 navigation.js
 navigation.css
--''Dependencies''
 jQuery
 core.js 
 mediaquery.js
 swap.js
-ということで、これらを<head>で読み込むみます。
 <head>
     <meta charset="UTF-8">
     <script src="js/jquery-3.4.1.min.js"></script>
     <script src="js/core.js"></script>
     <script src="js/mediaquery.js"></script>
     <script src="js/swap.js"></script>
     <script src="js/navigation.js"></script>
     <link href="css/navigation.css" rel="stylesheet" ></link>
     <title>Formstone Sample</title>
 </head>
-あとは [[DEMO>https://formstone.it/components/navigation/demo/]] にある HTML とJS を以下のように書いてお試し下さい。
 <body>
     <div class="nav_content">
         <button type="button" class="nav_handle">Menu</button>
     </div>
     <nav class="navigation" data-navigation-handle=".nav_handle" data-navigation-content=".nav_content">
         <a href="#">One</a>
         <a href="#">Two</a>
         <a href="#">Three</a>
     </nav>
    :
     <script>
         $(function(){
            $(".navigation").navigation({
              type: "reveal",
              gravity: "left",
              maxWidth: "10000px"
            });
          });
     </script>   
 </body>
~
~

~