ECサイト構築・リニューアルならクラウド型ECサイト構築ASPサービスサイトへ
資料請求
TOP

CATEGORY

SERVICE

vhを使ったレスポンシブなフルスクリーンコンテンツの作り方

vhを使ったレスポンシブなフルスクリーンコンテンツの作り方

近頃フルスクリーン写真を使ったサイトデザインが増えてきました。

第一印象のインパクトやデザイン性など、見ていて楽しくなるサイト作りの方法として注目を浴びている様子です。

しかしフルスクリーン写真を利用したデザインをレスポンシブで実現使用すると少し厄介な問題があります。

今回は「vh」という単位を利用した、フルスクリーンコンテンツの作り方を紹介します。

「vh」とは?

「vh」とは、「viewport height」という意味合いの単位です。

デバイスの表示領域(viewport)の高さに対しての割合を設定することができ、1vh = viewportの1/100で計算されています。

viewportを基準としたものにはこの他「vw(viewport width)」「vmin(viewport minimun)」「vmax(viewport max)」の3種類があり、vmax以外についてはほとんどの最新版ブラウザで対応しています。

Can i use で対応状況をチェック
Can i use で対応状況をチェック

サンプルコードと動作サンプル

今回は画面下にメニューのついた、フルスクリーン画像を使ったページを作成しました。

サンプルページはこちら
サンプルページはこちら

スクリーンショット部分のhtmlは非常にシンプルで、このような内容です。

<div class="hero-row para num1" id="cnt-1">
    <p>
        viewportに対応した<br/>
        レスポンシブな高さ調整サンプル
    </p>
</div>
<div class="fix-bar">
    <a href="#cnt-1">1</a>
    <a href="#cnt-2">2</a>
    <a href="#cnt-3">3</a>
    <a href="#cnt-4">4</a>
    <a href="#cnt-5">5</a>
    <a href="#cnt-6">6</a>
</div>

そしてCSS。こちらも単位にvhを使っている以外は至って普通のコードです。

.hero-row{
    height: 90vh;
}

.fix-bar{
    height: 10vh;
    position: fixed;
    z-index: 999;
    bottom: 0;
    width: 100%;
    left: 0;
}

vhやwidthのを調整することで、「画面の2分割」なども実現可能です。

画面分割サンプル

jQueryを使ったバグ・非対応ブラウザ対策

このように「vh」は、レスポンシブサイトを作る際に非常に便利な単位です。

しかし一方で少し厄介な問題点も抱えています。

それは「Android/iOSで使いづらい」という問題です。

「vh」はAndroidでは最新版の4.4からの対応のため、最新機種以外ではそもそも単位として認識してもらえません。

そしてiOSでは実装済なのですが、よりによってiOS7では「vh」のみバグが発生しているために正常に動作してくれえません。

iPadから見た状態。 vhの解釈が仕様通りになっていません。
iPadから見た状態。
vhの解釈が仕様通りになっていません。

そのため現時点で「vh」をサイトで使用する場合、JavaScriptや他の単位でのフォローが必要となります。

今回はjQueryでUA判定後、Android/iOSではvhを使わずに処理させてみました。

<script>
var agent = navigator.userAgent;
if(agent.search(/iPhone/) != -1 || 
  agent.search(/iPad/) != -1 ||
  agent.search(/iPod/) != -1 ||
  agent.search(/Android/) != -1){
	var androidVh100 = window.innerHeight / 100 * 90;
	var androidVh50 = window.innerHeight / 2;
	var androidVh5 = window.innerHeight / 10;
	$('.hero-row').css({
	  'height': (androidVh100)
  	});	
        $('.desc-row').css({
          'height': (androidVh50)
        });	
        $('.fix-bar').css({
          'height': (androidVh5)
        });	
}
</script>

これでAndroidやiOSでもviewportに対応した高さでコンテンツを生成することが可能となります。

今回の動作サンプル

まとめ

いかがでしたでしょうか?

Androidの非対応端末が多いことやiOSでのバグなど、「vh」はまだまだ扱いに困る単位です。

しかしファーストビュー(Above the fold)を作りこむ際や固定ナビゲーションを作る際など、viewport基準で設定できるということは非常に便利です。

今のうちに扱いに慣れておくことで、多くのブラウザで使えるようになったタイミングに備えておきませんか?

岡本


                   
商品の販売に“夢中”になれる
クラウド型ECサイト構築ASP

ECサイト構築、リニューアルを2000社以上支援してきた知見から
ECの専門家として御社のEC事業成長をサポートします。

  • 導入実績2000社以上


    導入実績

  • 注文単価増加率114%

    導入1年後の
    注文単価
    増加率

  • 売上成長率128%

    導入1年後の
    売上成長率

  • EC支援歴20年


    EC支援歴

         

レスポンシブWebデザインカテゴリの最新記事