jQuery:アドレスバーとメニューバー分の高さも解決。ウィンドウの高さいっぱいに表示する

height: 100vhではなくjQueryを使って高さを制御することで、スマホ閲覧時にアドレスバー(上)やメニューバー(下)分の高さが含まれてしまう問題を解消しました。

01. height: 100vh; で実装した時に起こる問題

前述した通りですが、PCでは問題がないheight: 100vh;。スマホ閲覧時にのみ、アドレスバー(上)やメニューバー(下)分の高さが出てしまうという問題が発生します。

これはスマホの機種に依存する問題なので、解決法があるのか? と思いましたが、jQueryのinnerHeight(ツールバーの高さを含まない)を用いることで解決ができるようです。

02. 問題を解決してみる

実装した例

See the Pen jQuery : innerHeight by Yurie (@kkrg) on CodePen.

実装方法

まずはhtmlとCSSです。構成はお好きなように。

html
<div id="mv"></div>
CSS
#mv {
    background: url(画像のURL) no-repeat center top / cover;
}

次にjQueryをinnerHeightを使って書いていきます。

jQuery
<script>
$(function () {
    var h = $(window).height();
    var mv = $('#mv').innerHeight();
    if ( h > mv) {
        $('#mv').css('height' , h);
    }
});
</script>

03. 応用

header要素などをpositionで浮かせていれば良いのですが、ヘッダーがある場合、ヘッダーの高さ分やはり高さが出てしまいます。そんな時には、ヘッダーの高さ分を差し引いてあげると具合が良さそうです。

実装した例

See the Pen jQuery : innerHeight-hedder by Yurie (@kkrg) on CodePen.

実装方法

変わるのはjQueryの記述です。

jQuery
<script>
$(function () {
    var h = $(window).height();
    var mv = $('#mv').innerHeight();
    var mv2 = h - 64; // 64(px)はヘッダーの高さ
    if ( h > mv) {
        $('#mv').css('height' , mv2);
    }
});
</script>
URLをコピーする