9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

スクロールについてくる、フローティングメニューの作り方

Last updated at Posted at 2014-11-26

長文注意。

【レスポンシブ対応の要望】
最近のWebサイトは、PC、スマホなどの異なる環境に対応するために
レスポンシブ対応をしているケースが多いですね。

現在作成中のサイトも、画面をスクロールしても、
メニュー部分がスクロールするようにフローティングメニューを実装したいという
要望がありました。

この記事では、
常に画面の最上部に、各種メニューを表示し、かつ
下記の条件を満たす場合どうすれば良いかを考えます。

条件1:スクロールしてもついてきて、いつも画面最上部に表示される。
条件2:他の表示パーツ(本文やフッター、ウィジェットなど)の閲覧に
    支障をきたさない。(重ならない)
条件3:レスポンシブ対応のため、ブラウザのサイズに応じて
    メニューも含めた表示パーツの幅、高さが変化する。

【トップに配置するパーツを固定すると考える】
・今回の場合、「常にブラウザ上の表示領域のトップに、メニューバーが表示される」
 状態を再現したい。この場合、メニューとして表示したいモノを
 画面のトップ位置に固定する。といった所に落ち着きます。

 つまり、CSSで幅や高さなどを指定しているところに

position : fixed;
 などと記述し、絶対的な位置を場所に指定します。
 加えて、他のパーツと重なった時に上側に表示されるように

 メニュー z-index : 100; 
 本文 z-index : 1;
 などのように、指定します。

 

これだけならば単純なのですが・・・

 

珍事発生


【メニューだけ固定したら本文が上のめりになった?!】
 これでいつでも表示領域のトップ部分にメニューが表示される…のですが、
 メニューの下の位置に表示していた、本文の部分がメニュー領域に食い込んで
 しまいました(汗
 
 これでは、どんなにがんばっても本文の上のほうが、
 メニューに隠れてしまい表示されません。
 
 これでもよいケースもあるかもしれませんが、本文に相当する箇所に
 入力フォームなどの、隠れたら困るものがあると大問題です。

 ならば…
 
【メニューの高さだけ、本文の表示位置を下にずらせばよい】
 こういう考えに至りました。
 仮に、メニュー部分の高さをX(px)とした場合本文部分のCSSを

 margin-top : Xpx;

などと書いてあげれば、うまくいくはず。
 ここでまた問題が。

メニューのサイズは可変です。高さ変わります

 ドラえもーん どうしよう!!!

 はい jQuery !
 メニュー部分のサイズが変わる可能性があるアクション
 (読み込み時、ブラウザ操作時など)発生時に、
 高さを変える処理を行えばよいわけです。

ブラッシュアップ予定。

9
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?