2007/10/05

ウェブサイトを iPhone/iPod touch 対応にする最も簡単な方法

viewport を設定して iPhone/iPod touch に対応しよう

ぼちぼち iPod touch が届き始めましたね。

Safari on iPhone/iPod touch のために用意された meta 要素の viewport 属性1を使って、あなたのサイトをなんちゃって iPhone/iPod touch 対応にする方法を説明してみたいと思います。

方法は簡単です。

<meta name="viewport" content="width=1024" /> 

head 要素に上記のようなタグを入れるだけです。ただ、ここで width に指定する横幅を自分のサイトに合わせて最適化する必要があります。

Apple Store(Japan) iPod touch

ちなみに、上記の width=1024 となっている viewport の設定は Apple のホームページで使っているもの。(xhtml を使ってないためか、正確には最後のスラッシュがない形になってますが。)

なお、実のところ、viewport なんて設定しなくても iPhone/iPod touch からほとんどのウェブページは見ることができます。わずかながらレイアウトが崩れる場合や、重い JavaScript のためにエラーが出てしまうページはあるでしょうが。

なお、viewport 以上のより細かいカスタマイズをするには、iPhone/iPod touch 専用の CSS を用意したり、さらには、User Agent を見て、専用ページに振ってしまう方法もあります。

以下、自分のウェブサイトに合わせて、どのように viewport を設定すべきか考えてみます。

viewport は仮想的なウインドウのサイズ

Safari on iPhone/iPod touch が通常のウェブブラウザと違うのは、ウインドウを持たないことです。そこで、この viewport という概念が出てきます。

viewport というのは仮想的なウインドウのサイズだと思えばいいでしょう。デフォルトでは、980 ピクセル幅となっています。viewport の値は最小 200 ピクセルから、最大 10,000 ピクセルを取ることができます。

何も設定されていない素のウェッブサイトを Safari on iPhone/iPod touch で見た場合、980 ピクセル幅のウインドウでブラウズした状態になるわけです。

Safari on iPhone/iPod touch は、ページがディスプレイ幅より大きいとき、ページの横幅に合わせて縮小した表示して、(横幅)全体を表示しようとします。iPhone/iPod touch の液晶ディスプレイは 320 x 480(縦持ち時)です。では、viewport の幅を 960px に設定してページを閲覧するとどうなるでしょうか。

幅が 320px しかないディスプレイで、3倍の幅の 960px のものを表示するわけですから、ページは 1/3 に縮小されたサイズで表示されます。

最適な viewport の width 値を決める

viewport の概念をつかんだところで、自分のウェブサイトに最適な viewport の幅を決めてみます。ここでは、iPhone/iPod touch 用の CSS は特別に用意しないという前提で考えます。

viewport 幅を決めるのに必要なもの
  • Safari 3(利用不可能であれば他のウェブブラウザでも)

    Windows ユーザの方は Apple Developer Connection(要会員登録・無料)から、より新しい日本語表示に対応した Windows 版 Safari 3 Public Beta がダウンロードできます。

  • ブラウザのウインドウ幅を測るツール

    私は MouLocX を使いました。Mac OS X での同種のフリーウェアは、OSX Freewares あたりから探しましょう。

    Firefox のアドオンで MeasureIt というのもあるようです。

    Windows の場合、Vector だと「定規」で検索するといろいろ出てきますね。

viewport 幅を決める手順
  1. 調整したいウェブページを開きます。

  2. ウインドウ幅を縮めていき、水平スクロールバーの現れないぎりぎりの幅にします。

  3. その時のウインドウ幅を計測します。

これだけです。

そして次に、その値を width に設定します。当ブログは 780px くらいで水平スクロールバーが現れるので、以下のような設定にしてあります。

<meta name="viewport" content="width=780" />

もちろん、この viewport の設定は必須ではありません。width のデフォルト値は 980px なので、何も設定しない場合は、980px 相当のウインドウで開いたときの表示になります。

ただ、980 より小さい値を設定すれば、文字がその分大きく表示されるので、ユーザがダブルタップやピンチオープンなどの動作で表示を拡大しなくも、文字が読める可能性が高まります。

水平スクロールバーが表示される幅は、各々の CSS での設定や table など各要素の width によって決まってきていると思います。上記で測定した幅より小さく viewport を設定したとしても、あなたのウェブサイトはその幅では表示できないので、Safari for iPhoe/iPod touch は、自動的にスクロールバーの出ない横幅まで縮小して表示します。例えば、このブログで width=320 と iPhone/iPod touch のディスプレイ幅に合わせた設定をしようとしても、意味がないわけです。

上記で測定したウインドウ幅が 980px より大きい場合は、敢えて設定する必要もないと思います。例えば、1100px 程度で水平スクロールバーが表示されるなら、viewport の設定を特にしなくても、iPhone/iPod touch のディスプレイに 1100px がちょうど収まるように自動的に縮小されて表示されます。

ちなみに Apple のサイトは現在のところ、1000px くらいで水平スクロールバーが表示されます。何も viewport を設定しなくてもよいはずですが、最初の方で述べたように Apple では

    <meta name="viewport" content="width=1024" /> 

と、1024px 相当の幅のウインドウで表示させたように viewport を設定しています。

JavaScript でウインドウ幅を測定(追記)

他の目的のために作った Bookmarklet 「Show All Width/Height」を公開しておきます。

デスクトップユーティリティで幅を測るより、こちらのほうがスマートですね。このリンクをブックマークに登録してご利用ください。

なお、Safari 用に作っているので、他のブラウザでは値が表示されない部分があると思います。

Safari の場合、ウインドウの横幅を縮めていき、水平スクロールバーが表示された状態で、このブックマークレットを使います。そこで表示された scrollWidth の値を目安に、viewportwidth を設定すればいいでしょう。

おまけ:1280px 以上の viewport 幅を設定したい場合

思い切って viewportwidth=3200 などに設定したらどうなるでしょうか。320/3200 = 1/10 ですから、10分の1 の大きさで表示されるはずです。しかし、実際には以下の設定をしても、1/10 では表示されず、1280px 幅 (1/4) 程度の表示になり、残りの 3200-1280 = 1920px はスクロールしないと見れない状態で表示されます。なぜでしょう?

<meta name="viewport" content="width=3200" />

それは viewport 属性には、width 以外にも minimum-scale などのデフォルト値が存在するからです。

minimum-scale のデフォルト値は 0.25 です。つまり、特に指定しない限り 0.25 (1/4) 倍の表示が、最小の縮小率となっています。

ディスプレイ幅が 320px なので、0.25 倍ということは、320/0.25 = 1280px が表示できる最大のピクセル幅となります。余った 1920px 分はスクロールして見ることになります。

Safari on iPhone/iPod touch ではスクロールバーは出ませんが、フリック(指ではじく)動作でスクロールが可能です。フリックすると、一瞬スクロールバーも表示されます。

もし、何らかの理由で viewportwidth を 1280 以上に設定したい場合は、合わせて minimum-scale も設定してやらないといけないわけです。先ほどの width=3200 の例でいくと、

<meta name="viewport" content="width=3200, minimum-scale=0.1" />

のように、少なくとも minimum-scale は 0.1 以下にしなければなりません。

viewport の width 設定のまとめ

一応まとめてみると、viewportwidth の値は

  • 基本は水平スクロールバーが表示される境界の値
  • ただし、980px 以上 1280px 以下の場合は、設定してもしなくても同じ
  • 1280px 以上を設定する場合は、minimum-scale も合わせて設定する必要あり
  • 320px 以下の場合は width=320。ディスプレイ幅の 320px 以下に設定する意味はない

ということになるでしょうか。

もっと細かく表示させる大きさをコントロールしたかったら、iPhone/iPod touch 用の CSS を用意してやることになります。気が向いたら、そのうち書いてみます。

以上が現時点での私の理解ですが、勘違い、誤字脱字等ありましたら、ご指摘くださると助かります。

iPhone/iPod touch の viewport の概念の補足

まだ少しわかりにくいようなので、 viewport の概念を補足する記事を書きました。

ポスト @ 21:56:09 , 修正 @ 2007/10/16 23:51:26 | , , , | 「このエントリーを含むはてなブックマーク」ボタン この記事「ウェブサイトを iPhone/iPod touch 対応にする最も簡単な方法」を含むはてなブックマークの数

Comment

No Comments

Post Your Comment



(Smile) (Wink) (Laugh) (Foot in mouth) (Frown) (Gasp) (Cool) (Tongue)

*は入力必須です。E-Mailは公開されません。