WEBサイトのナビメニューをスマホ版で横スクロールさせる

WEBサイトのナビメニューをスマホ版で横スクロールさせる

WEBサイトのナビメニューをスマホ版で横スクロールさせる

グローバルメニューである横並びメニューはPCモニター向けに設置されたメニューなので、スマホ版でそのままは使えません。

画面幅の狭いスマホでもナビゲーションバーを横スクロールさせる事ができれば、スマホ向けボタンなどを準備する必要がありません。

width: max-content;で折り返しさせずに全てを表示させ、overflow: auto;で隠れた部分を表示するのがポイントです。

スマホ版でPC版と同じメニューを使う

PC版のWEBサイトで上部に並ぶのが、いわゆるグローバルメニューですね。

PCの様に画面が広いことを想定された横並びメニューです。

ただしスマホ版では当然画面幅が狭くなるため、そのままでは使う事はできません。

この横並びメニューは消して、専用のメニューボタンを用意するのがほとんどでしょう。

サイトによって様々ですが、ボタンを押すと縦に並べてメニューが展開される訳です。

シンプルに横並びを維持

正直、わざわざ専用のメニューボタンを押すのが面倒な人もいます。

そんなに大規模でないWEBサイトであれば、なおの事でしょう。

メニューボタンを押して、次に行きたいページのメニューを押して、と二度手間になるからです

横並びメニューを残す

そこで本記事では、スマホ版でも横並びメニューを残し、画面に入らない部分は横スクロールで表示させる方法についてご紹介します。

つまりメニューバー自体を指で横に動させる様にする訳です。

そうすれば、スマホ版のメニュー構造をわざわざ導入する必要がなくなりますね。

実装方法

では早速実装をしてみましょう。

横並びメニュー部分は以下の様にul、liタグで構成しています。

今回は横スクロールに焦点を置いているので、サブメニュー(プルダウンメニュー)などは無視した形にしています。

ソースコード

HTML

通常のメニュー構造のHTMLソースです。画面に収まらない様、あえて多めに並べています。

<div class="nav"> <ul> <li><a href="#">HOME</a></li> <li><a href="#">HTML</a></li> <li><a href="#">SEO</a></li> <li><a href="#">WEBWORKS</a></li> <li><a href="#">セキュリティ</a></li> <li><a href="#">WORDPRESS</a></li> <li><a href="#">FREELANCE</a></li> <li><a href="#">その他</a></li> </ul> </div>

CSS

上記ソースに対して設定するCSSです。

.nav { background-color: #000; overflow-x: auto; } .nav ul { display: flex; width: max-content; margin: 0 auto; } .nav ul li a { display: flex; align-items: center; justify-content: center; display: inline-block; padding: 10px 25px; height: 50px; font-size: 15px; color: #fff; text-decoration: none; } .nav ul li a:hover { background-color: #cc0000; }

解説

いたってシンプルなCSSになっています。

liタグはdisplay: flexで横に並ぶようにし、項目は全て中央寄せで設定しています。

指でスクロールさせる事を前提としているので、ナビゲーションは適度な高さを維持しています。

CSSのポイント

横スクロールを実現している部分は以下の2つです。

親要素のnavに対して「overflow-x: auto;」を指定
navの下の階層ulに対して「width: max-content;」を指定

width: max-content;

通常、要素は親要素の外に出ないので、親要素の幅を超えそうになると折り返しされるのが普通です。

そこで折り返しされずに突き抜ける様にするのが「maz-content」です。

maz-contentを設定すると、表示幅を超えていてもコンテンツが全く折り返されません。

max-contentは現在主要なブラウザ全てで対応しています。

これにより画面幅に関係なく、メニューがどこまでも横並びする事になります。

この機能を利用して、スマホ版でも横並びを維持させる訳です。

画面幅を超えた分の要素を、overflow-x: auto;でスクロールさせている訳です。

実装サンプル

実際のサンプルが以下となります。

iframe内で表示

上記の様にiframeで埋め込むと画面自体が狭いため、既にスクロールバーが出た状態になっていますね。

スマホで直接確認した場合は横スクロールは出ませんが、指で動かす事ができます。

以下のリンクから、別ページで確認することができます。

この記事をシェアする

一押し人気コーナー紹介

HTMLカテゴリの関連記事