ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

ブラウザのスタイルシート対応について

ブラウザの互換モード

 HTMLやスタイルシートの規格は、W3Cによって標準化が進められており、最新のブラウザでは、W3Cの標準に準拠した「標準モード」で表示されるようになっています。 ただ、古い形式のHTMLやCSSで記述されたWebページも表示できるようにするための「互換モード」も装備されている場合があります。 この「標準モード」と「互換モード」の切替に使われているのが、HTMLのDOCTYPE宣言です。 ですから、W3Cの標準に準拠した形式でHTMLやCSSを記述する場合には、DOCTYPE宣言は必須です。
 よく使われるDOCTYPE宣言には、以下のような種類があります。 IE8, IE7, IE6, Firefox3, Safari4, Opera10, Sleipnir2で、「標準モード」で動作することを確認しました。
DOCTYPE宣言 備考
宣言なし 互換モード
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
"http://www.w3.org/TR/html4/strict.dtd">
標準モード
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
標準モード
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
標準モード
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
標準モード
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tranditional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
標準モード
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
標準モード
 XHTML形式の場合は、DOCTYPE宣言の前に、XML宣言も必要となります。 xml宣言のencoding指定は、HTMLファイルの文字コードの種類により、「Shift_JIS、EUC-JP、ISO-2022-JP、UTF-8、UTF-16」などに設定する必要があります。
 ただ、IE6ではXML宣言に対応していないため、IE6にも対応したい場合には、HTML4.01を利用するか、XML宣言を省略した方が良いです。私が使っている範囲では、XHTML1.0 Tranditional指定で、XML宣言を省略しても、問題なく表示されています。
XML宣言 備考
<?xml version="1.0" encoding="Shift_JIS"?> IE6では互換モード
 なお、W3Cにより仕様策定中のHTML5では、下記のようにシンプルな宣言となる予定です。
DOCTYPE宣言
<!DOCTYPE html>

IE8の互換表示機能

 Microsoft社のIE8は、W3Cの標準に近いブラウザになりました。 しかし、IE7以前のブラウザと同じような表示をするための、「互換表示機能」が追加されていて、ボタンなどで簡単に切り替えることができる仕様となっています。
 W3Cの標準に準拠したHTMLを作成している場合、「互換表示機能」を利用すると、正しく表示されません。 そのため、IE8の「互換表示機能」をOFFにする必要があります。
 IE8の「互換表示機能」をOFFにするためには、下記の記述をする必要があります。
IE8の互換表示機能をOFFにするための記述
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

CSSハック

 CSSハックとは、IE6など、スタイルシートを正しく表示できない古いブラウザに対する、特別の記述のことです。
 IE6以前のブラウザにだけ有効な指定をするCSSハックで良く使われているのは、アンダースコアハックとアスタリスクハックです。
 スタイルシートが、後の記述が優先して適用されることを利用して、値の変更をすることもできます。

アンダースコアハック

 アンダースコアハックとは、プロパティ名の先頭に「_(アンダースコア)」を記述することで、IE6以前のブラウザでのみ有効な指定をすることです。値を変更したい場合は、通常のプロパティ指定の後に、アンダースコア付きのプロパティ指定をすることで、IE6以前のブラウザで値を変更することができます。
IE6以前のブラウザで、値を追加したい場合の例
div.hack {
  _width: 10px; /* for IE6 */
}
IE6以前のブラウザで、値を変更したい場合の例
div.hack {
  width: 10px;
  _width: 8px; /* for IE6 */
}

アスタリスクハック

 アスタリスクハックとは、セレクタ名の先頭に「*(アスタリスク)」を記述することで、IE6以前のブラウザでのみ有効な指定をすることです。値を変更したい場合は、通常のセレクタ指定の後に、アスタリスク付きのセレクタ指定をすることで、IE6以前のブラウザで値を変更することができます。
IE6以前のブラウザで、値を追加したい場合の例
* div.hack { /* for IE6 */
  width: 8px;
}
IE6以前のブラウザで、値を変更したい場合の例
div.hack {
  width: 10px;
}
* div.hack { /* for IE6 */
  width: 8px;
}

IEのW3C標準仕様対応ライブラリ(Google Code)

IE7.js、IE8.js

 IE(Internet Explorer)の動作をW3C標準仕様に準拠させるためのライブラリとして、Dean Edwards氏が開発した、IE7.js や、IE8.js があります。MITライセンスですので、誰でも利用可能なソースとして、Google Codeで公開されています。
 CSSハックで、IE6に対応できない場合などに便利ですが、完全互換となるわけではありません。 ですから、IE6対応時など、最低限の利用にした方が良いと思います。
IE6対応用に、IE7.jsを利用する場合の例
<!--[if lt IE 7]>
  <script src="IE7.js" type="text/javascript"></script>
<![endif]-->

透過png対応

 このライブラリを使うと、IE6を透過pngに対応させることもできます。
 透過pngに対応するためには、ファイル名を「*-trans.png」という名前に変更することにより、cssのbackgroundプロパティで利用できます。
 ただ、repeat指定や、position変更などには対応されていないようです。



Copyright (C) 1995-2009 ASH.
URL:http://ash.jp/ Mail:info@ash.jp