[js] calcを使えない時にウインドウの高さを取得する!

[js] calcを使えない時にウインドウの高さを取得する!

先日家に帰ったら流れていた「SING/シング」でMISIAが声優をしていてびっくりしたyanagimachiです。
あと長澤まさみの歌声初めて聞いたけど普通にうまかったです。
興味出た方は一度ぜひ!


さて、ウインドウの高さ-下付きの広告の高さのオーバーレイとか作りたいときって結構困ります。
HTMLや広告のCSSは以下のようなものとします。

//HTML
  <section class="block-overlay">
    <!-- overlay ここの高さを指定したい -->
  </section>
  <aside class="block-ad">
    <!-- 下付きの広告 -->
  </aside>
//CSS 下付きの広告
.block-ad {
    position: fixed;
    bottom: 0;
    left: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 50px;
    background: rgba(#32a138, .9); //SCSSのコード
}

calcが使えるときは簡単

calcを使って100%-50pxするだけです。

.block-overlay {
    position: fixed;
    top: 0;
    left: 0;
    padding: 10px;
    width: 100%;
    height: calc(100% - 50px); //100% から50px引く
    background: rgba(#000, .8); //SCSSのコード
}

デモ

calcが使えないときは?

Andorid4.4系(のアップデートされたものだけ?)とそれ以下ではcalcが使えないので、jsを使います。

考え方としてはウインドウの高さを取得して、広告エリアの50pxを引きます。
とすると「$(window).height() - 50」でいいのでは?と思うのですが、ここで2つほど問題があります。

  • 一部のブラウザではにスクロールバーなどの幅が加味されない
  • iPhoneのSafariではアドレスバー(URLバー)の高さなどが加味されない

簡単に行くかな〜と思ったのですが、結構厄介です。
そこで「window.innerHeight」を使います。

//js
  $(window).on('load resize', function(){ //読み込みかリサイズしたとき
    //.block-overlayの高さをウインドウの高さ-50pxにする
    $('.block-overlay').css('height', window.innerHeight - 50);
  });

デモ


すんなり行くなーと思っても対応ブラウザによっては色々罠がありますね。
気をつけたいものです。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ