2. フレームもやめましょう (平成16年 8月 6日)
3. 段組カラムには適切なナヴィゲーションを付けましょう (平成17年 9月 2日 更新)
6. ダイナミックHTMLは無効にしておきましょう (平成17年 9月 3日 更新)
携帯端末(PHS)にオペラが搭載された機種が発売されて以来、幾つかのフルブラウザが携帯端末に実装されたり、配布されるようにもなりました。
これまでの携帯端末は専用のウェブしか閲覧出来なかったため、PCサイトの運営者は無視してもそれ程問題は無かったでしょう。
しかし、フルブラウザが携帯端末に搭載出来たとしたら、話は別です。
オペラやネットフロントなど、モバイル端末に搭載されるフルブラウザはPC向けのコンテンツを携帯端末でも閲覧すると言う全く別の発想でブラウザを供給しております。
事実、オペラが携帯端末での閲覧のために開発したと思われるスモールスクリーンモードは、殆どのコンテンツを取敢えず表示させる事が出来ます。
しかし、そのために様々な最適化の手法が導入されております。
携帯端末で閲覧した場合、制作する側が想定していないような見え方となる可能性があるのです。
その結果、何とか読める程度だったり、意味が掴めなかったりする可能性があります。
ここでは、モバイルでのフルブラウザ利用が珍しくなくなっている現状から、制作者たちが取敢えずやるべき対策を考えて見たいと思います。
モバイル向けフルブラウザ対策は、オペラなど特定の環境に合せると言うだけではありません。
モバイル向けフルブラウザ対策を適切に施したPC向けウェブは、特定のブラウザ(恐らくはインターネットエクスプローラ)しか想定していないウェブよりも遙かに多くの環境で適切に閲覧出来るものとなります。
それは、モバイル向けフルブラウザ対策は、使いやすいウェブ作りの一般論に基づいているからです。
つまり、モバイル向けフルブラウザを意識するものの、実際には無数の環境に対応出来るような対策を施す事になるのです。
例えば、オペラのスモールスクリーンモードでは、横幅を取るようなテーブルレイアウトなどは解除して表示させようとします。
また、テーブルを解除するという事は、テーブルに設定された背景色が消されてしまう事を意味します。
その結果、ブラウザの設定によっては前景色と背景色が近くなって読めなくなってしまう事があるのです。
オペラ以外のモバイル向けフルブラウザも、当然ながらレイアウト目的と判断されたテーブルに対しては、何らかの措置を施す事が予想されます。
もはや、テーブルレイアウトは、閲覧者にとっても制作者にとってもやってはいけないものになりつつあるのです。
テーブルを使ったレイアウトは否定出来ない
と言う意見もあります。
実際、テーブルレイアウトをする場合でも、適切な対処をする事で問題が解消されるようになります。
テーブルを解除すると言う事は、テーブルによる順序の制御が出来ない事を意味します。
つまり、テーブル関連のタグが無くても問題無く読めるような順序で文書を書かなければなりません。
テーブルレイアウトを行う場合でもテーブルのセルの内容にはしっかりスタイルを当てておく必要があります。
テーブルのセルは、見出しセルが<th>要素、その他のセルが<td>要素となりますが、その内容にしっかりスタイルを当てるようにしましょう。
例えば、以下のような場合は問題がおきるかも知れません。
…<td bgcolor="#ccffff"> <font color="#007700">テーブルのセル</font> </td>…
この場合、セルの背景が水色、文字は深緑と言う組合せですが、テーブルのセルの開始タグが無効になってしまう可能性があり、その場合背景色が何色になるのか予想出来ません。
一番いいのは<font>要素やbgcolor属性を排除する事です。
例えば、以下のような専用のスタイル定義ファイルを用意します。
ここで、クラス名
は記述内容に相応しいクラス名とします。
.クラス名{background: #cff;color: #070;}
一方、HTML文書側は以下のようにします。
…<td> <span class="クラス名">テーブルのセル</span> </td>…
これだけで、携帯端末でも問題無く表示可能となるでしょう。
一方フレームですが、携帯端末の小さな画面ではフレームによって更に小さく切り刻まれてしまうと、とても見るに堪えられないサイトになってしまいます。
このため、モバイルオペラにはフレームを切替える機能があります。
しかしながら、実際にこの機能を使ってフレーム式のサイトをご覧になればお分かり頂けると思いますが、とにかく操作が面倒なのです。
また、オペラ以外でも携帯端末向けブラウザでは、フレームについて何らかの措置を執る事が予想されます。
更に言うなら、携帯端末以外でも、視覚障碍者にはフレームの構造を見渡す事は困難です。
そう言った点でも、フレームは問題が多過ぎます。
対策としては、フレームを使わずに、コンテンツとナヴィゲーションを一つのページに収める事です。
フレーム以外にも、画面を二、三段のカラムに分割してメインのコンテンツの左右にサブのコンテンツやナヴィゲーションを組込んだ構成のサイトは結構多いようです。
これがテーブルによるものか、CSSによるものかは問わず、携帯端末では全てのカラムを一度に見渡す事は不可能です。
この為、HTML文書で言えば前の方に置かれたカラムから順番に表示していく事になります。
全てのカラムが一度で見渡せれば、目を追うだけで済む事なのですが、そうは行かないとなると、カラムからカラムへの移動を容易にするナヴィゲーションが求められます。
具体的には、カラムの始めには他のカラムへ移動出来るアンカーを降ろし、末尾にはカラムの先頭へのアンカーを降ろしておきます。
勿論、これらのアンカーはPC環境では不要でしょうから、PC向けのCSSスタイル定義ファイルでは画面から隠し、モバイル専用のCSSでは表示されるような専用のクラスを当てて置けばよいでしょう。
現在の音声ブラウザとして代表的な『ホームページリーダ』でアクセスすると、「display: none;」プロパティを当てている要素が読上げられないと言う問題があります。
このため、グラフィカルなブラウザでは非表示にするのではなく画面から隠してしまうと言うテクニックを使うと良いでしょう。
詳しくは、ホームページリーダ対策で解説しました。
尚、携帯端末には通常通りの表示で良いでしょう。
また、各カラムの冒頭には、他のカラムへのアンカーの前に何のカラムかを見出しとして書いておくと更に便利になります。
もちろん、この見出しもPCでは恐らく不要でしょうから、CSSでPCでは非表示となるようにすれば良いでしょう。
今、一番上にサイトの題名が見出しとなっていて、その下に左にメニュー、右にメインコンテンツと言う二段カラムを表組みで実現しているとします(一部排除勧告が出ている属性あり)。
<h1>(サイト名)</h1><table width="100%"><tr><td width="30%">(メニュー本体)</td><td width="70%">(メインコンテンツ本体)</td></tr></table>
この様な場合、以下のようにすれば問題も少なくなるでしょう。
<dl class="forNonPC"><dt>ページ内操作方法(アクセスキー対応ブラウザのみ)。</dt><dd><dl><dt><a accesskey="0" href="#C-MAIN">本文への移動</a></dt><dd>0ボタンを押下</dd><dt><a accesskey="9" href="#C-SUB">メニューへの移動</a></dt><dd>9ボタンを押下</dd></dl></dd></dl><hr class="forNonPC" /><h1>(サイト名)</h1><div id="C-SUB"><h2 class="forNonPC">メニュー</h2><ul class="forNonPC"><li><a href="#C-MAIN">本文へ</a></li></ul>(メニュー本体)<ul class="forNonPC"><li><a href="#C-SUB">メニューの先頭へ</a></li></ul></div><div id="C-MAIN"><h2 class="forNonPC">本文</h2><ul class="forNonPC"><li><a href="#C-SUB">メニューへ</a></li></ul>(メインコンテンツ本体)<ul class="forNonPC"><li><a href="#C-MAIN">本文の先頭へ</a></li><li><a href="#C-SUB">メニューへ</a></li></ul></div>
#C-SUB {width: 30%;margin: 0;border: 0;padding: 0;float left;…}#C-MAIN {width: 70%;margin: 0;border: 0;padding: 0;float right;…}.forNonPC {position: absolute;top: 0em;left: -1000em;width: 900em;}
他ページへのナヴィゲーションも操作しやすい位置に記述し、ページが長過ぎるようなら適宜他の箇所へのアンカーを降ろしておきます(これは前項とも重なりますね)。
これらのアンカーがPC向けでは不要であるなら、専用のスタイルを当ててPCでは非表示にすればよいのです。
ウェブデザインにおいて一番好ましい方法は、物理要素(<font>要素など)でのマークアップは行わず、出来るだけCSSによるデザインを行うようにする事です。
PCでは不要でも、携帯端末などにはあると便利なアンカーや案内表示もあります。
そう言ったものは、PC向けCSS(media="screen, projection ")では非表示にして、モバイル向けCSS(media="handheld, tty ")では表示させるなどと言うように、メディア別にスタイル定義ファイルを用意するだけで表示を切替えられます。
このように、CSSを上手に活用すれば、HTMLを殆ど変える事無く適切な表示や案内が出来、非常に便利なウェブとなるのです。
モバイル向けのスタイル定義ファイルを作成するに当たって、注意すべき事を挙げておきます。
スタイル定義ファイルは、以下のように<link>要素でリンクする事が出来ます。
/」を取り払ってください。<link rel="stylesheet" type="text/css" media="screen,projection" href="PC専用のスタイル定義ファイルへのURI" /> <link rel="stylesheet" type="text/css" media="handheld ,tty" href="モバイル専用のスタイル定義ファイルへのURI" />
尚、物理要素で実現出来ないものだけスタイルシートでデザインをするというやり方では、モバイルオペラなどの携帯端末環境で問題を起こす事があります。
必ず、全てのスタイルをCSSで当てるようにしてください。
レイヤを用いたダイナミックHTMLは、小さな携帯端末では却って使いにくくなる原因にもなります。
つまり、携帯端末ではレイヤが邪魔になる事があります。
全てのダイナミックHTMLが邪魔になるとは思えませんが、多くは問題を来たす事となるでしょう。
そこで、狭い画面には不適当だと判断したら、そのような機能を実現するスクリプトには、携帯端末を排除する処理を付け加えましょう。
安直なやり方ですが、現状ではユーザエージェント文字列を利用して弾くしか無いようです。
具体的には、ユーザエージェント文字列に「Win」「Mac」などのデスクトップ用OSを表す文字列が含まれていない場合に弾けばよいでしょう。
例えば、HTML文書に以下のようなテキストを埋込むJAVAスクリプトがあり、それが携帯端末では邪魔になるとします。
…
document.write('<p>スクリプトが出力したものです。</p>');
…
この場合、以下のようにスクリプトの冒頭で携帯端末を弾くという対策が執れます。(平成17年 9月 3日 修正)
…
// 携帯端末を排除する。
if ((navigator.userAgent.indexOf('Mozilla/')>-1 || navigator.userAgent.indexOf('Opera/')>-1) &&
navigator.userAgent.indexOf('Win')<0 &&
navigator.userAgent.indexOf('Mac')<0 &&
navigator.userAgent.indexOf('X11')<0 &&
navigator.userAgent.indexOf('Linux')<0 &&
navigator.userAgent.indexOf('B-right/V')<0 ||
navigator.userAgent.indexOf('UP.Browser')>-1 ||
navigator.userAgent.indexOf('Nokia/')>-1 ||
navigator.userAgent.indexOf('SIE-')==0 ||
navigator.userAgent.indexOf('MOT-')==0) {
return(0);
}
…
document.write('<p>スクリプトが出力したものです。</p>');
…
但し、この方法は実は完璧なものではありません。
この判定をすり抜けてしまうモバイルフルブラウザもあり得るからです。
このため、万が一そう言う環境があったとしても問題が起こり難くなるようなスクリプトが書けるのなら、そのようにすべきと言えます。
後述の方法を併用するのも有用でしょう。
もう一つの方法は、スクリプトがHTML文書に埋込むテキストに対して、特別なクラスを与えておき、HTML文書のヘッダ部にはそのクラスに対して携帯端末では表示させないようなスタイルを出力すると言うやり方があります。
例えば、HTML文書に以下のようなテキストを埋込むJAVAスクリプトがあり、それが携帯端末では邪魔になるとします。
…
document.write('<p>スクリプトが出力したものです。</p>');
…
この場合、以下のようにJAVAスクリプトが出力するHTML要素に特別なクラスを当てて出力するようにします。
…
document.write('<p class="forPCOnly">スクリプトが出力したものです。</p>');
…
更に、HTML文書のヘッダ部に、以下のようなスタイル定義を出力するスクリプトを埋込みます。
<style type="text/css">.forPCOnly {display: none;}</style><style type="text/css" media="screen, projection, tv">.forPCOnly {display: block;}</style>
こうする事で、PCのビジュアル系ブラウザ以外では問題となるブロックの表示が抑制されます。
モバイルオペラがエアーエッジフォンに搭載されて以来、様々な端末にフルブラウザが搭載されるようになりました。
オペラに限っても、幾つものヴァージョンナンバが利用されております。
従って、手持ちのオペラ 7以降でテストすれば良いでしょう。
実際に適切に対策を立てたなら、オペラ 7以降のスモールスクリーンモードに切替えて閲覧した際に、画面の幅が小さくならずにクライアント領域いっぱいに描かれる筈です。
これは、最適化をしなくても適切に折返しする事でコンテンツが表示可能だと判断された場合には、スモールスクリーン向けの最適化は発動されない事を意味します。
この様な表示になっていたのなら、表示面は取敢えず問題無いと言えるでしょう。
クライアント領域いっぱいに描かれず、横幅が制限されて描かれた場合は、スモールスクリーン向けの最適化が行われております。
この場合は以下の点に注意してください。
表組みなどを取払った結果、表示順序はHTML文書での順序に従います。
それでちゃんと読めるでしょうか?
意味が通じるでしょうか?
最適化で取払われた要素に当てられたスタイルは無効となります。
特に前景色と背景色が近くなってしまうと読めなくなります。
これらの問題をクリアしていれば、取敢えず表示面での問題は無いと思われます。
続いて、操作性を診てみましょう。
ページ内の移動もストレス無く出来るでしょうか?
そういった事を調べてみて下さい。
これらの問題を全てクリアしたなら、携帯端末対策は取敢えず完了したと言えるでしょう。
お手持ちのサイトはPCブラウザ・携帯端末以外の様々な環境へも対応出来るようになった筈です。