IE8の新しい標準モードとモードスイッチ
先月、MicrosoftのIE Teamが発表したIE8がAcid2テストに合格するという話題は、大きな衝撃を与えました。
しかし発表からしばらくして、より標準準拠に近づいたレンダリングをIE8で行うには、DOCTYPEスイッチのようにHTML文書に何らかの「ヒント」を与える必要があるとの情報も流れていました(「IE8 passes Acid2」)。そして先ほど、その詳細とまた経緯が明らかになりました。
A List Apartの「Beyond DOCTYPE: Web Standards, Forward Compatibility, and IE8」という記事によると、新しい「ヒント」は次のようなものになると紹介されています。
- meta要素を記述し、対象としているIEのバージョンを指定する。
<meta http-equiv="X-UA-Compatible" content="IE=8" />
- サーバのHTTPヘッダから、対象とするバージョンを指定する。
X-UA-Compatible: IE=8
「このページはIE8と互換性がある」とHTML文書(またはHTTPヘッダ)側で指定することにより、そのページが「IE8の標準モード」でレンダリングされるようです。
さて、これまでDOCTYPE宣言による判別を行ってきたIEですが、なぜIE8からはこのような方法を取ったのでしょうか。これについて、IEプラットフォームアーキテクトであるChris Wilsonが、IEBlogに掲載した「Compatibility and IE8」という記事にて、互換性を確保するためと説明しています。
IE7ではCSSの属性セレクタやXML宣言への対応など、Web標準準拠においていくつかの向上が図られました。しかしIE8での変更は、その変更をさらに上回るものです。Acid2に関わる技術の実装はもちろん、hasLayoutの廃止など、レンダリングエンジンに根本的な変更を行っている部分もあります。
このため、DOCTYPEによる標準モードの切り替えをIE8でも行ってしまうと、今後Web標準準拠を考え作られたコンテンツが、IE8の標準モードで正確にレンダリングされるページなのか、IE7の標準モードなのか、はたまたIE6なのかということが分からなくなってしまいます。つまりは、標準モードの解釈にさらなる非互換が生じてしまうのです。
まず、当然のことながらIE8用の標準モードにあわせたページをIE7やIE6で見ると、表示が崩れてしまいます。それだけであればIE7やIE6に対し、別個に対処することで解決できます。しかしながら、IE6やIE7の標準モードにあわせたページが、IE8の標準モードで崩れずに表示できるかどうかは分からないのです。
たとえば、アンダースコアハックがあります。IE6の標準モードではアンダースコアハックを利用することができたため、IE6用の対策として広く使われていました。ところがIE7の標準モードではアンダースコアハックが利用できなくなったため、アンダースコアハックに依存した標準モードのページでレイアウトが崩れるなどの不具合が起こってしまったのです。
似たようなことがIE8でも起こるとの懸念があることから、「どの標準モード’をターゲットとしているか」を明示する必要があるのではないかと考えられているのです。IE6やIE7は今後数年も大きなシェアを持ち続けると予想されるため、標準準拠度の高いIE8と、そうではないIE6、IE7を同じDOCTYPEスイッチで区別するのは、互換性の確保という問題から現実的な解決策ではないのです。
少し長くなってしまったため、簡単にポイントをまとめます。
- IE8には、「互換モード」、「標準モード」、「より進んだIE8の標準モード」という、3つのレンダリングモードがある。
- 互換モードはIE6、IE7のものと一緒。標準モードはIE7のものと一緒。
- 互換性を保つため、IE8の標準モードにはmeta要素やHTTPヘッダによる指定が必要。
ブラウザの標準準拠度の違い生み出す互換性の問題は、準拠度の低いブラウザが使われ続ける限り、また、そのようなブラウザを対象としたコンテンツが減っていかない限り残り続けます。このような問題を解決するためにも、Web標準への準拠をいっそう推し進める必要があると考えています。
コメント
> IE8を利用するユーザーにはあまり問題ありませんが、IE6やIE7を利用するユーザーには大きな問題となります。
これは逆ではないですか?
IE8の標準モードのコンテンツはどのように宣言してもしょせんIE6/7では正しく表示できません。
一方、IE7の標準モードのコンテンツを、IE8の標準モードで表示すると正しく表示できない可能性があります。それを回避するために、あえてIE8で「IE7の標準モード」を残すのではないでしょうか。
つまり支障があるのはIE8の方。
metaタグのcontent部分が抜けてるような…?
levelさま、
引用の部分、おっしゃるとおり書き違えておりました。
言い回しなどもふくめ、先ほど修正いたしました。
ご指摘、有難うございます。
maqさま、
こちらは抜け落ちてしまっていたようです。大変失礼いたしました。
ご指摘、有難うございます。