シンプルな暮らし。

スマートフォンサイトの作り方(6/8) - Viewportの設定

スマートフォンサイトの作り方(6/8) - Viewportの設定

問題児のViewport。いろんな端末でいろんな挙動を示すらしく、Viewportに何を指定するのか悩みました。

リキッドで横幅320pxをターゲットとしている場合

最低の横幅を320pxと想定して作成されたリキッドの画面であれば何も悩まずに以下を指定すればOKですね。

<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

リキッドで横幅320px以上をターゲットとしている場合

今回の案件はPC画面とHTMLを共有している影響で、横幅320pxに収まりませんので、上記の指定ができません。なぜ320pxにこだわるかと言うと、個人的な経験則ですが以下の仕様が存在すると思われるから。

  • Viewportの横幅に指定する値がブラウザの横幅解像度(たいていは320px。ディスプレイの解像度ではなく、devicePixelRatioで換算した値)以上
  • ユーザーによる画面拡大操作(user-scalable)を許可しない


上記ふたつの条件が揃った場合に、Viewportで指定した横幅の数値が無視されるようです。結果として、Viewportの横幅が「320px」に強制的に解釈されて画面が拡大されてしまいます。※Galaxy S(Android2.2での検証結果)

devicePixelRatioとの関係

また注意するべき点は、横幅というのは、ディスプレイの解像度ではなく、devicePixelRatioで換算したブラウザでの値になる点。算出方法は「ブラウザの表示領域(横幅と縦幅) = ディスプレイ亜解像度 / devicePixelRatio」となります。端末ごとのdevicePixelRatio値を[to-R]さんでまとめられているものを参考にして以下の表にまとめています。

キャリア デバイス名 devicePixelRatio 画面サイズ ディスプレイ解像度 ブラウザ解像度
docomo GalaxyS 1.5 約 4.0インチ 480 * 800 320 * 533
docomo Galaxy Tab 1.5 約 7.0インチ 600 * 1024 400 * 683
docomo Xperia(SO-01B) 1.5 約 4.0インチ 480 * 854 320 * 569
docomo HT-03A 1 約3.2インチ 800 * 480 800 * 480
docomo LYNX(SH-10B) 1 約 5.0インチ 960 * 480 960 * 480
docomo REGZA Phone(T-01C) 1.5 約 4.0インチ 480 * 854 320 * 569
docomo Xperia arc 1.5 約 4.2インチ 480 * 854 320 * 569
au IS01 1 約5.0インチ 960 * 480 960 * 480
au IS03 2 約3.5インチ 960 * 640 480 * 320
au IS06 1.5 3.7インチ 800 * 480 533 * 320
au htc EVO WiMAX ISW11HT 1.5 約4.3インチ 800 * 480 533 * 320
SoftBank iPhone3GS 1 3.5インチ 320 * 480 320 * 480
SoftBank iPhone4 2.0 3.5インチ 640 * 960 320 * 480
SoftBank HTC Desire(X06HT) 1 3.7インチ 800 * 480 800 * 480
SoftBank HTC Desire HD(001HT) 1.5 約4.3インチ 800 * 480 533 * 320
SoftBank GALAPAGOS(003SH) 1.5 3.8インチ 800 * 480 533 * 320
EMOBILE HTC Aria 1 3.2インチ 480 * 320 480 * 320
Google Nexus S 1.5 4.0インチ 480 * 800 320 * 533

ネット上でもいろんな情報がありますが、個人的には上記の2つの条件が揃った場合にViewportが無効になりました。恐らく多くのAndroid端末で同じ挙動ではないかと予測しています。

逆を言えば、どちらかの条件に該当しなければ良いので、今回はAndroidの場合には「user-scalable=no」を諦めました。iPhoneは上記の条件に該当しませんので、「user-scalable=yes」とします。

width1.html
meta name="viewport" content="width=device-width,user-scalable=no"
○問題なく表示できます。

width2.html
meta name="viewport" content="width=320,user-scalable=no"
○問題なく表示できます。

width3.html
meta name="viewport" content="width=400,user-scalable=no"
×なぜか横幅320pxでuser-scalable=yesで描画されます。
widthを320以下にするか、user-scalableをyesにすると意図した横幅で表示してくれます。

width4.html
meta name="viewport" content="width=400,user-scalable=yes"
○問題なく表示できます。
width3.htmlとの違いはser-scalable=の値だけ。結果的にwidth=320以上でser-scalable=yesの場合はだめだってことですね。

ads by google

Ads by goolge

Recent Entries

Ads by Rakuten