ブラウザのスタイルシート対応について
ブラウザの互換モード
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変更などには対応されていないようです。