73
80

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.

iOS safariで画面下部のメニューバーが消えないようにする

Posted at

iOSのsafariでは、画面下部に標準メニューバーが存在しています。

しかし、このメニューバーの挙動が厄介で、
webサイトを開いた状態ではメニューバーが表示されているものの、

1.jpg

少し画面をスクロールすると、このメニューバーがひょいっと下に隠れてしまいます。ついでに画面上部のアドレスバーも小さくなってしまいますね。

2.jpg

サイト上でスクロールに応じた演出や、
position: absolute; や position: fixed; を使って表示位置をシビアに調整しないといけない演出をやりたいとき、
この仕様がとても邪魔になってしまいます。

iOS7までは、viewportにminimal-uiなるものを指定することで、
このメニューバーを 一切表示しないという選択肢があったのですが、
iOS8からはこのminimal-uiが廃止されてしまいました。

そこで、cssを使って メニューバーが隠れないようにする実装方法を紹介します。

やり方は簡単です。
まず、bodyのすぐ下に子孫に、画面全体を覆うdivを置きます。
いわゆるwrapperみたいなやつですね。

index.html
<body>
	<div class="wrapper">
		ここにコンテンツを書く
	</div>
</body>

そして、以下のようにcssを指定します。

main.css
.wrapper{
	height: 100vh;
	overflow: scroll;
	-webkit-overflow-scrolling: touch;
}

4.jpg

つまり、wrapperの高さは中身のコンテンツの高さによらず、常に表示領域の高さと同じ。
そして、overflow: scroll; をあてることで、中身のコンテンツをスクロールできるようにします。
body自体をスクロールするのではなく、wrapperという箱を作ってその中でスクロールさせるということです。
-webkit-overflow-scrolling: touch; は、スクロールを滑らかにするiOS専用のcssプロパティです。
これがないとoverflow: scroll; がカクカクしたスクロールになってしまうので書きましょう。

これで、メニューバーが隠れることなくサイト内コンテンツを閲覧してもらうことができます。

73
80
0

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
73
80

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?