[CSS]ビューポートのサイズに合わせてナビゲーションの形状を変更するテクニック
Post on:2011年7月20日
ビューポートのサイズに合わせてスタイルシートを適用するMediaQueriesを利用して、ナビゲーションの形状を変更するテクニックを紹介します。
Convert a Menu to a Dropdown for Small Screens
デモページ
[ad#ad-2]
デモではブラウザのサイズを変更することで、確認できます。
デモページ:通常時の表示
ブラウザのサイズを小さくすると、ナビゲーションが自動的にプルダウンに変更されます。
デモページ:スクリーンサイズが960pxより小さい時の表示
以下は各ポイントを意訳したものです。
実装
これら2つのナビゲーションを実装するには、ul要素とselect要素の2つが必要です。
HTML:Step 1
まずは、nav要素内にul要素とselect要素の2つを記述します。
※最終形は、異なります。
<nav> <ul> <li><a href="/" class="active">Home</a></li> <li><a href="/collections/all">Books</a></li> <li><a href="/blogs/five-simple-steps-blog">Blog</a></li> <li><a href="/pages/about-us">About Us</a></li> <li><a href="/pages/support">Support</a></li> </ul> <select> <option value="" selected="selected">Select</option> <option value="/">Home</option> <option value="/collections/all">Books</option> <option value="/blogs/five-simple-steps-blog">Blog</option> <option value="/pages/about-us">About Us</option> <option value="/pages/support">Support</option> </select> </nav>
CSS:MediaQueries
通常時はselect要素は非表示にし、960pxより小さい場合はul要素を非表示、select要素を表示にします。
nav select { display: none; } @media (max-width: 960px) { nav ul { display: none; } nav select { display: inline-block; } }
[ad#ad-2]
しかし、二つのHTMLを用意することは、メンテナンスの面で非常に手間となります。
そこで、jQueryを使用して、二つの要素をダイナミックに変更します。
JavaScript:ナビゲーションの要素の変更
// Create the dropdown base $("<select />").appendTo("nav"); // Create default option "Go to..." $("<option />", { "selected": "selected", "value" : "", "text" : "Go to..." }).appendTo("nav select"); // Populate dropdown with menu items $("nav a").each(function() { var el = $(this); $("<option />", { "value" : el.attr("href"), "text" : el.text() }).appendTo("nav select"); });
それから、ドロップダウンを機能させるJavaScriptも忘れずに。
JavaScript:ドロップダウン用
$("nav select").change(function() { window.location = $(this).find("option:selected").val(); });
スクリプトを使用することで、最終的なHTMLはシンプルになります。
HTML:最終版
<nav> <ul> <li><a href="#" class="active">Home</a></li> <li><a href="#books">Books</a></li> <li><a href="#blog">Blog</a></li> <li><a href="#about">About Us</a></li> <li><a href="#support">Support</a></li> </ul> </nav>
sponsors