<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Travellers Tales</title>
<link>http://travel-lab.info/tech/pblog/index.php</link>
<pubDate>Fri, 05 Oct 2007 21:56:09 +0900</pubDate>
<description>
Travellers Tales - RSS 2.0 (Really Simple Syndication).
</description>
<item>
<title>ウェブサイトを iPhone/iPod touch 対応にする最も簡単な方法</title>
<link>http://travel-lab.info/tech/pblog/article.php?id=157</link>
<guid>http://travel-lab.info/tech/pblog/article.php?id=157</guid>
<pubDate>Fri, 05 Oct 2007 21:56:09 +0900</pubDate>
<description>viewport を設定して iPhone/iPod touch に対応しよう
ぼちぼち iPod touch が届き始めましたね。
Safari on iPhone/iPod touch のために用意された meta 要素の viewpo...</description>
<content:encoded>
<![CDATA[<h4>viewport を設定して iPhone/iPod touch に対応しよう</h4>
<p>ぼちぼち iPod touch が届き始めましたね。</p>
<p>Safari on iPhone/iPod touch のために用意された meta 要素の viewport 属性<sup id="fnref:Tl-157-viewport"><a href="#fn:Tl-157-viewport" rel="footnote">1</a></sup>を使って、あなたのサイトをなんちゃって iPhone/iPod touch 対応にする方法を説明してみたいと思います。</p>
<p>方法は簡単です。</p>
<pre><code>&lt;meta name="viewport" content="width=1024" /&gt; 
</code></pre>
<p>head 要素に上記のようなタグを入れるだけです。ただ、ここで width に指定する横幅を自分のサイトに合わせて最適化する必要があります。</p>
<p class="float-right"><a href="http://click.linksynergy.com/fs-bin/click?id=PHwy5xH5vHE&amp;offerid=102056.10001035&amp;subid=0&amp;type=4"><img width="300" height="300" alt="Apple Store（Japan） iPod touch" src="http://ad.linksynergy.com/fs-bin/show?id=PHwy5xH5vHE&amp;bids=102056.10001035&amp;subid=0&amp;type=4&amp;gridnum=-1" /></a></p>
<p>ちなみに、上記の <code>width=1024</code> となっている <code>viewport</code> の設定は <a href="http://www.apple.com/jp/">Apple のホームページ</a>で使っているもの。（xhtml を使ってないためか、正確には最後のスラッシュがない形になってますが。）</p>
<p>なお、実のところ、viewport なんて設定しなくても iPhone/iPod touch からほとんどのウェブページは見ることができます。わずかながらレイアウトが崩れる場合や、重い JavaScript のためにエラーが出てしまうページはあるでしょうが。</p>
<p>なお、viewport 以上のより細かいカスタマイズをするには、iPhone/iPod touch 専用の CSS を用意したり、さらには、User Agent を見て、専用ページに振ってしまう方法もあります。</p>
<p>以下、自分のウェブサイトに合わせて、どのように viewport を設定すべきか考えてみます。</p>
<h4>viewport は仮想的なウインドウのサイズ</h4>
<p>Safari on iPhone/iPod touch が通常のウェブブラウザと違うのは、ウインドウを持たないことです。そこで、この viewport という概念が出てきます。</p>
<p><code>viewport</code> というのは仮想的なウインドウのサイズだと思えばいいでしょう。デフォルトでは、980 ピクセル幅となっています。<code>viewport</code> の値は最小 200 ピクセルから、最大 10,000 ピクセルを取ることができます。</p>
<p>何も設定されていない素のウェッブサイトを Safari on iPhone/iPod touch で見た場合、980 ピクセル幅のウインドウでブラウズした状態になるわけです。</p>
<p>Safari on iPhone/iPod touch は、ページがディスプレイ幅より大きいとき、ページの横幅に合わせて縮小した表示して、（横幅）全体を表示しようとします。iPhone/iPod touch の液晶ディスプレイは 320 x 480（縦持ち時）です。では、<code>viewport</code> の幅を 960px に設定してページを閲覧するとどうなるでしょうか。</p>
<p>幅が 320px しかないディスプレイで、3倍の幅の 960px のものを表示するわけですから、ページは 1/3 に縮小されたサイズで表示されます。</p>
<h4>最適な viewport の width 値を決める</h4>
<p><code>viewport</code> の概念をつかんだところで、自分のウェブサイトに最適な <code>viewport</code> の幅を決めてみます。ここでは、iPhone/iPod touch 用の CSS は特別に用意しないという前提で考えます。</p>
<h5>viewport 幅を決めるのに必要なもの</h5>
<ul>
<li><p><a href="http://www.apple.com/jp/safari/" title="アップル - Safari 3 パブリックベータ">Safari 3</a>（利用不可能であれば他のウェブブラウザでも）</p>
<p>Windows ユーザの方は <a href="https://connect.apple.com/" title="ADC Member Site">Apple Developer Connection</a>（要会員登録・無料）から、より新しい日本語表示に対応した Windows 版 Safari 3 Public Beta がダウンロードできます。</p></li>
<li><p>ブラウザのウインドウ幅を測るツール</p>
<p>私は <a href="http://homepage.mac.com/kyasu/soft/macx.html#moulocx" title="Kyasu's Original Soft -mac X-">MouLocX</a> を使いました。Mac OS X での同種のフリーウェアは、<a href="http://www16.plala.or.jp/x-tomo/Pages/appearance.html#MouLocX" title="OSX Freewares - appearance">OSX Freewares</a> あたりから探しましょう。</p>
<p><a href="http://banpe-yu.seesaa.net/article/15968869.html" title="MeasureIt -Firefox拡張機能- - banpe-yu♪ Firefox拡張機能 紹介">Firefox のアドオンで MeasureIt</a> というのもあるようです。</p>
<p>Windows の場合、<a href="http://search.vector.co.jp/search?query=%92%E8%8BK" title="Vector：ソフトウェア・ライブラリ＆PCショップ - 検索結果 - 定規">Vector だと「定規」で検索</a>するといろいろ出てきますね。</p></li>
</ul>
<h5>viewport 幅を決める手順</h5>
<ol>
<li><p>調整したいウェブページを開きます。</p></li>
<li><p>ウインドウ幅を縮めていき、水平スクロールバーの現れないぎりぎりの幅にします。</p></li>
<li><p>その時のウインドウ幅を計測します。</p></li>
</ol>
<p>これだけです。</p>
<p>そして次に、その値を <code>width</code> に設定します。当ブログは 780px くらいで水平スクロールバーが現れるので、以下のような設定にしてあります。</p>
<pre><code>&lt;meta name="viewport" content="width=780" /&gt;
</code></pre>
<p>もちろん、この <code>viewport</code> の設定は必須ではありません。<code>width</code> のデフォルト値は 980px なので、何も設定しない場合は、980px 相当のウインドウで開いたときの表示になります。</p>
<p>ただ、980 より小さい値を設定すれば、文字がその分大きく表示されるので、ユーザがダブルタップやピンチオープンなどの動作で表示を拡大しなくも、文字が読める可能性が高まります。</p>
<p>水平スクロールバーが表示される幅は、各々の CSS での設定や <code>table</code> など各要素の <code>width</code> によって決まってきていると思います。上記で測定した幅より小さく <code>viewport</code> を設定したとしても、あなたのウェブサイトはその幅では表示できないので、Safari for iPhoe/iPod touch は、自動的にスクロールバーの出ない横幅まで縮小して表示します。例えば、このブログで <code>width=320</code> と iPhone/iPod touch のディスプレイ幅に合わせた設定をしようとしても、意味がないわけです。</p>
<p>上記で測定したウインドウ幅が 980px より大きい場合は、敢えて設定する必要もないと思います。例えば、1100px 程度で水平スクロールバーが表示されるなら、viewport の設定を特にしなくても、iPhone/iPod touch のディスプレイに 1100px がちょうど収まるように自動的に縮小されて表示されます。</p>
<p>ちなみに Apple のサイトは現在のところ、1000px くらいで水平スクロールバーが表示されます。何も <code>viewport</code> を設定しなくてもよいはずですが、最初の方で述べたように Apple では</p>
<pre><code>    &lt;meta name="viewport" content="width=1024" /&gt; 
</code></pre>
<p>と、1024px 相当の幅のウインドウで表示させたように <code>viewport</code> を設定しています。</p>
<h5>JavaScript でウインドウ幅を測定（追記）</h5>
<p>他の目的のために作った Bookmarklet 「<a href="javascript:w=window;w.document.width;alert('width/height:%5Ct%5Ct'+w.document.width+'/'+w.document.height+'%5Cn'+'scrollWidth/Height:%5Ct'+w.document.body.scrollWidth+'/'+w.document.body.scrollHeight+'%5Cn'+'innerWidth/Height:%5Ct'+w.innerWidth+'/'+w.innerHeight+'%5Cn'+'outerWidth/Height:%5Ct'+w.outerWidth+'/'+w.outerHeight+'%5Cn'+'clientWidth/Height:%5Ct'+w.document.body.clientWidth+'/'+w.document.body.clientHeight);
">Show All Width/Height</a>」を公開しておきます。</p>
<p>デスクトップユーティリティで幅を測るより、こちらのほうがスマートですね。このリンクをブックマークに登録してご利用ください。</p>
<p>なお、Safari 用に作っているので、他のブラウザでは値が表示されない部分があると思います。</p>
<p>Safari の場合、ウインドウの横幅を縮めていき、水平スクロールバーが表示された状態で、このブックマークレットを使います。そこで表示された <code>scrollWidth</code> の値を目安に、<code>viewport</code> の <code>width</code> を設定すればいいでしょう。</p>
<h4>おまけ：1280px 以上の viewport 幅を設定したい場合</h4>
<p>思い切って <code>viewport</code> を <code>width=3200</code> などに設定したらどうなるでしょうか。320/3200 = 1/10 ですから、10分の1 の大きさで表示されるはずです。しかし、実際には以下の設定をしても、1/10 では表示されず、1280px 幅 (1/4) 程度の表示になり、残りの 3200-1280 = 1920px はスクロールしないと見れない状態で表示されます。なぜでしょう？</p>
<pre><code>&lt;meta name="viewport" content="width=3200" /&gt;
</code></pre>
<p>それは <code>viewport</code> 属性には、<code>width</code> 以外にも <code>minimum-scale</code> などのデフォルト値が存在するからです。</p>
<p><code>minimum-scale</code> のデフォルト値は <code>0.25</code> です。つまり、特に指定しない限り 0.25 (1/4) 倍の表示が、最小の縮小率となっています。</p>
<p>ディスプレイ幅が 320px なので、0.25 倍ということは、320/0.25 = 1280px が表示できる最大のピクセル幅となります。余った 1920px 分はスクロールして見ることになります。</p>
<p>Safari on iPhone/iPod touch ではスクロールバーは出ませんが、フリック（指ではじく）動作でスクロールが可能です。フリックすると、一瞬スクロールバーも表示されます。</p>
<p>もし、何らかの理由で <code>viewport</code> の <code>width</code> を 1280 以上に設定したい場合は、合わせて <code>minimum-scale</code> も設定してやらないといけないわけです。先ほどの <code>width=3200</code> の例でいくと、</p>
<pre><code>&lt;meta name="viewport" content="width=3200, minimum-scale=0.1" /&gt;
</code></pre>
<p>のように、少なくとも <code>minimum-scale</code> は 0.1 以下にしなければなりません。</p>
<h4>viewport の width 設定のまとめ</h4>
<p>一応まとめてみると、<code>viewport</code> の <code>width</code> の値は</p>
<ul>
<li>基本は水平スクロールバーが表示される境界の値</li>
<li>ただし、980px 以上 1280px 以下の場合は、設定してもしなくても同じ</li>
<li>1280px 以上を設定する場合は、<code>minimum-scale</code> も合わせて設定する必要あり</li>
<li>320px 以下の場合は <code>width=320</code>。ディスプレイ幅の 320px 以下に設定する意味はない</li>
</ul>
<p>ということになるでしょうか。</p>
<p>もっと細かく表示させる大きさをコントロールしたかったら、iPhone/iPod touch 用の CSS を用意してやることになります。気が向いたら、そのうち書いてみます。</p>
<p>以上が現時点での私の理解ですが、勘違い、誤字脱字等ありましたら、ご指摘くださると助かります。</p>
<h4>iPhone/iPod touch の viewport の概念の補足</h4>
<p>まだ少しわかりにくいようなので、 viewport の概念を補足する記事を書きました。</p>
<ul>
<li><a href="http://travel-lab.info/tech/pblog/article.php?id=158" title="Travellers Tales : iPhone/iPod touch の viewport の概念の補足">iPhone/iPod touch の viewport の概念の補足</a></li>
</ul>
<div class="footnotes">
<hr />
<ol>
<li id="fn:Tl-157-viewport">
<p><a href="http://developer.apple.com/jp/iphone/designingcontent.html#lay_out_content_for_iphone_viewport" title="Apple Developer Connection - iPhone for Web Developers - iPhone向けWebアプリケーションとコンテンツの最適化">Apple Developer Connection - iPhoneのビューポート向けにコンテンツを配置する</a>
<!-- more -->&#160;<a href="#fnref:Tl-157-viewport" rev="footnote">&#8617;</a></p>
</li>
</ol>
</div>
]]>
</content:encoded>
</item>
</channel>
</rss>