【HTML】X-UA-CompatibleによるIE互換表示制御と注意点
IE11には「互換表示」というオプションがあって、
ツールバーの「ツール」→「互換表示設定」で互換表示の対象ドメインを指定できる。
互換表示対象になるとIE7相当で画面表示できる(とどこかで聞いた)。
IEはバージョンによってレンダリングの仕方(画面への描画の方法)が違うらしく
互換表示の有無によっていろいろ見え方が変わる。
互換表示の有無に関わらず表示内容を統一する場合、
以下のmetaタグ(以後X-UAと呼ぶ)をいれることでそれを制御できる。
<meta http-equiv="X-UA-Compatible" content="IE=edge">
のだが、ちょっとした注意が必要である。
以下に実例を示す。
例えば以下のような簡単なHTMLがあったとする。
■TEST_01_X-UA_NO.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TEST</title>
<style>
<!--
div.test_area {
border-color: red;
border-width: 0.5px;
border-style: solid;
margin: 2px;
padding: 2px;
}
div.inner_area {
border-color: blue;
border-witdh: 0.5px;
border-style: dashed;
margin: 2px;
padding: 2px;
}
p.test_p {
background-color: lightgreen;
}
-->
</style>
</head>
<body>
<div class="test_area">
テストです。<br/>
<div class="inner_area">
<p class="test_p">なかのテストです。</p>
</div>
</div>
</body>
</html>
赤い実線で囲われた中に青い点線で囲われたエリアをつくり、
中にそれぞれ一言添えるだけの簡単なHTMLである。
これをWin7IE11互換「なし」で表示すると、以下のような表示内容となる。(①とする)
まあ想定通り。
でもこれを同じ環境下で互換「あり」で表示する(ドメインlocalhostを互換表示対象ドメインに追加する)と、
以下のような表示内容となる。(②とする)
なぜだか外側の赤い実線の枠が消える。
さっきのHTMLにX-UAのmetaタグいれてみる。
■TEST_02_X-UA_ARI.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>TEST</title> <style> <!-- div.test_area { border-color: red; border-width: 0.5px; border-style: solid; margin: 2px; padding: 2px; } div.inner_area { border-color: blue; border-witdh: 0.5px; border-style: dashed; margin: 2px; padding: 2px; } p.test_p { background-color: lightgreen; } --> </style> </head> <body> <div class="test_area"> テストです。<br/> <div class="inner_area"> <p class="test_p">なかのテストです。</p> </div> </div> </body> </html>
で、これをWin7IE11互換「なし」で表示すると、
となってこれはX-UAなし互換なしの①と一致。(③とする)
さらにこれを互換「あり」で表示すると
となってこれもX-UAなし互換なしの①
及びX-UAあり互換なしの③と一致。
要するにX-UAをいれると、互換表示の有無に関わらず表示内容が一致する(③=④になる)ことが確認できた。
まとめると…
互換表示なし | 互換表示あり | |
X-UAなし | ||
X-UAあり |
というかんじか。
ただ、このX-UAはmetaタグの前にJavascriptが入ってると効果を発揮してくれないらしい。
(個人的にはそんな書き方する方が悪いと思うが)
例えば以下のようなHTMLである↓
■TEST_03_X-UA_ARI_ICHI_HEN.html
<html> <head> <title>TEST</title> <style> <!-- div.test_area { border-color: red; border-width: 0.5px; border-style: solid; margin: 2px; padding: 2px; } div.inner_area { border-color: blue; border-witdh: 0.5px; border-style: dashed; margin: 2px; padding: 2px; } p.test_p { background-color: lightgreen; } --> </style> <script type="text/javascript"> // COMMENT function onloadalert() { alert('ON LOAD TEST!'); } </script> ↑metaタグの前にJavascriptを記述する <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> </head> <body onload="javascript:onloadalert();"> <div class="test_area"> テストです。<br/> <div class="inner_area"> <p class="test_p">なかのテストです。</p> </div> </div> </body> </html>
Content-TypeとX-UAの前にJavaScriptとStyleタグを配置させた。
Javascriptの動作確認のためにonLoadで呼び出しているが多分ソースコード上に書かれたJavascriptが実際に起動される必要はない(ソースコード上でmetaタグの前に書かれているだけでX-UAの効果は死ぬ)。
これを互換表示させるとやっぱり②のような見栄えになり、X-UAの効果が出ない。↓
ちなみにこのHTMLにはContent-TypeとX-UAの2つのmetaタグが現れるが、
1つでもJavascriptより前の方に出現していればX-UAの効果が出る。
例えばheadタグの直下にContent-Typeを書いておくだけで、X-UAの位置はこのままでもX-UAの効果が出る。
なんだかよくわからんのである。