■キー割当表示 [Shift-H] |
─ KeyNavi:キーボードを活用して ホームページを快適に─ |
ホーム [0] HTML,CSSバグ&回避法リスト:1.目次 [1] 5. ブラウザ別にスタイルシートを指定 | ・サイトマップ [Shift-S] |
HTML,CSSバグ&回避法リスト |
■ 5. ブラウザ別にスタイルシートを指定 |
|
注1: | 「NS,NN=Netscape Navigator」「IE=Internet Explorer」の略です。 |
注2: | ブラウザ名で特に指定が無いものはWindows版についての記述です。 |
注3: | スタイルシートについては、特に断りの無い限り互換モードについての記述です。 |
■ 5.1 Netscape4.xに対する対策の必要性 |
NS4に対してのみスタイルシートを使わない | ||
NS4も含めて共通のスタイルシートを指定 | ||
NS4互換,非互換の部分に分け 非互換のものはNS4に適用しない | ||
スタイルシートは使わずtableタグやfontタグ等を駆使してデザイン | ||
実際にNS4でページを表示させたり 前章の内容を参考に スタイルシートをNS4互換・非互換の部分に分けます。 そして以下の2つのファイルを用意します。
次に以下に述べる何れかの方法によってNS4に対する対策を施します。
■ 5.2 @importを使ってNS4を除外 |
実験ページ:@importを使ったNS4バグ回避 (NS4.01はクラッシュ?)
■ 5.3 複数mediaを指定してNS4を除外 |
NS4ではメディアタイプとして「media="screen"」と単独指定したものは 動作しますが「media="all"」としたり複数のタイプを列挙した場合には スタイルシートの指定を無視するようです。 この性質を利用して以下のように記述できます。
■ 5.4 JavaScriptでブラウザ判別 |
以下の例ではJavaScriptでNS4か否かを判定し NS4の場合にのみ special.cssを読み込ませる<link>タグを出力するようにしています。
注1: | NS4ではJavaScriptを無効にするとスタイルシートも無効になるようです (試してみたところWin版NS4.05,4.5,4.75, Linux版4.07,4.78など)。 そのため上記のように記述しておいて問題ないでしょう。 |
注2: | 上記スクリプトは<link>を出力するので <head>...</head>内に置かれます。 このため MacIE5.0では ページ外からの文中リンク参照がうまく動作しない可能性があります。 <script>タグがあるとページ内リンクがずれる |
■ 5.5 サーバ側スクリプトでブラウザ判別 |
一般に スクリプト側でユーザの使用しているブラウザのUserAgent値 が得られるのでそれによってブラウザの種類やバージョンを判別できます。
IE | Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) |
Mozilla/4.0 (compatible; MSIE 5.0; Mac_PowerPC) | |
Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) | |
Netscape4.x | Mozilla/4.7 [ja] (Win98; U) |
Mozilla/4.61 [ja] (X11; I; Linux 2.2 i686) | |
Netscape6+ | Mozilla/5.0 (Windows; U; Win98; ja-JP; rv:0.9.4) Gecko/20011019 Netscape6/6.2 |
Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.0.2) Gecko/20021120 Netscape/7.01 | |
Mozilla | Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:0.9.6) Gecko/20011120 |
Opera | Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.03 [ja] |
Mozilla/4.0 (compatible; MSIE 5.0; Linux 2.4.7-10 i686) Opera 6.1 [en] | |
Safari | Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/85 (KHTML, like Gecko) Safari/85 |
iCab | Mozilla/4.5 (compatible; iCab 2.9.1; Macintosh; U; PPC) |
iMode | DoCoMo/1.0/N503i/c10 |
DoCoMo/2.0 P2101V(c100) | |
j-phone | J-PHONE/2.0/J-SH03 |
Ez-Web | UP.Browser/3.04-CA11 UP.Link/3.2.2.2 |
DreamCast | Mozilla/3.0 (DreamPassport/3.0) |
Web-TV | Mozilla/3.0 WebTV/1.2 (compatible; MSIE 2.0) |
これによってNS4かどうかも分かるので ユーザの使用しているブラウザに適したスタイルシートを 出力することができます。
この方法の問題点としては プロキシの設定等によりUserAgentの値が変更された場合に ブラウザ判定ができないことが挙げられます。
上の例でいえば、 ユーザがNS4を使っていて且つPHP側で得られるUserAgent値が空だと 困ったことになります。 NS4に対しspecial.cssが出力されてしまい 結果的にフォームが機能しなくなるでしょう。
また サーバが無いローカル環境ではテストしにくいという問題もあります。 Webの巡回プログラムなどで自動的に取得されたホームページを 後でローカルで見る場合にも問題になります。
■ 5.6 条件分岐コメントでIE5+を判別 |
NS4の判定には使えませんが IE5+の特定バージョンの判定(一致・以上・以下)、 サポート外ブラウザ(NSやIE4-,Operaなど)かどうかの判定ができるので IE5+の拡張機能を利用する時には便利です。
IE5.x | <!--[if IE 5]> ... <![endif]--> |
IE5+ | <!--[if gte IE 5]> ... <![endif]--> |
IE5+以外 | <![if lt IE 5]> ... <![endif]> |
他の例や実際に実行してみるには以下のページを見てみてください。
■ 5.7 まとめ |
方法 | 機能 | 備考 |
@import指定 | ・NS4,IE3のみ除外可 | ・環境に関係なく利用可 |
複数media指定 | ・NS4のみ除外可 | |
JavaScript利用 |
・各ブラウザ,バージョン毎にCSS指定可 ・CSS指定以外にも利用可 |
・JavaScriptを無効にした時の対策要 ・ページ内リンクの問題発生 |
CGI(サーバ側スクリプト)利用 |
・UserAgent値が得られない時の対策必要 ・サーバ設定必要、ローカルでは動作せず |
|
条件分岐コメント | ・IE5+のみ判定可能 |
上記の方法はそれぞれ一長一短があるので 組合わせて使ってもいいでしょう。
表示上必須 且つNS4互換機能の指定 (common.css) | ||
フォームのスタイル指定などNS4非互換機能の指定 (special.css) | ||
IE5+のみの拡張機能の指定 (ie5.css) | ||
上記のようにすると
NS4にはcommon.cssのみ、それ以外にはspecial.cssも適用。 | ||
IE5+の時には IE5独自拡張機能を記した ie5.cssも適用。 | ||
CGIを使ってないのでUserAgent値が得られない時も大丈夫。 またサーバのないローカル環境でも処理可能。 | ||
JavaScriptを使ってないので スクリプトが無効か否かの判断が不要。 | ||
common.cssの指定はspecial.cssの後に置く | ||
special.cssにもcommon.cssの内容を書いておく | ||
最低限必要なものはタグ内でインライン指定する | ||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HTML,CSSバグ&回避法リスト 目次
【数字キーでアクセス】
例 : 「2.1節」は「2」キーを2回連打して移動。「Q or P」で戻る。
「Ctrl-矢印」でフォーカス移動。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ホーム [0] HTML,CSSバグ&回避法リスト:1.目次 [1] 5. ブラウザ別にスタイルシートを指定 | ・サイトマップ [Shift-S] |
■キー割当表示 [Shift-H] | ─ KeyNavi Project 2003 ─ |