IE9のみの特定のCSSルールを定義する方法は?
-
28-10-2019 - |
質問
友達、IE9の特定のCSSルールを定義するのを手伝ってください。たとえば、このように
/* IE 6 fix */
* html .twit-post .delete_note a { background-position-y: 2px; }
* html .twit-post .delete_note a:hover { background-position-y: -14px; }
解決
注目されている回答もIE10をターゲットにしています。そのため、より完全なリストの場合:
IE 6
* html .ie6 {property:value;}
また
.ie6 { _property:value;}
IE 7
*+html .ie7 {property:value;}
また
*:first-child+html .ie7 {property:value;}
IE 6および7
@media screen\9 {
.ie67 {property:value;}
}
また
.ie67 { *property:value;}
また
.ie67 { #property:value;}
IE 6、7、8
@media \0screen\,screen\9 {
.ie678 {property:value;}
}
IE 8
html>/**/body .ie8 {property:value;}
また
@media \0screen {
.ie8 {property:value;}
}
IE 8標準モードのみ
.ie8 { property /*\**/: value\9 }
IE 8,9および10
@media screen\0 {
.ie8910 {property:value;}
}
IE 9のみ
@media screen and (min-width:0) and (min-resolution: .001dpcm) {
// IE9 CSS
.ie9{property:value;}
}
IE 9以降
@media screen and (min-width:0) and (min-resolution: +72dpi) {
// IE9+ CSS
.ie9up{property:value;}
}
IE 9および10
@media screen and (min-width:0) {
.ie910{property:value;}
}
IE 10のみ
_:-ms-lang(x), .ie10 { property:value\9; }
つまり、10以降
_:-ms-lang(x), .ie10up { property:value; }
また
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
.ie10up{property:value;}
}
すなわち11(および上記..)
_:-ms-fullscreen, :root .ie11up { property:value; }
JavaScriptの代替
Modernizr
Modernizrはページの読み込みで迅速に実行され、機能を検出します。次に、結果を含むJavaScriptオブジェクトを作成し、HTML要素にクラスを追加します
ユーザーエージェントの選択
JavaScript:
var b = document.documentElement;
b.setAttribute('data-useragent', navigator.userAgent);
b.setAttribute('data-platform', navigator.platform );
b.className += ((!!('ontouchstart' in window) || !!('onmsgesturechange' in window))?' touch':'');
以下を追加します(例) html
エレメント:
data-useragent='Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)'
data-platform='Win32'
非常にターゲットを絞ったCSSセレクターを許可します。
html[data-useragent*='Chrome/13.0'] .nav{
background:url(img/radial_grad.png) center bottom no-repeat;
}
脚注
可能であれば、ブラウザのターゲティングを避けてください。識別する問題を特定して修正します。サポート プログレッシブエンハンスメント と 優雅な劣化. 。それを念頭に置いて、これは生産環境で常に取得できるわけではない「理想的な世界」シナリオです。そのため、上記はいくつかの良い選択肢を提供するのに役立つはずです。
帰属 /本質的な読書
他のヒント
CSSスタイルを予備することができます
:root
このようにIE9固有のものにするには:
:root #element { color:pink \0/IE9; } /* IE9 */
使用する つまり、条件付きコメント:
<!--[if ie 9]>
your stuff here
<![endif]-->
9は、インターネットエクスプローラーに固有の「CSSハック」です。
これは、単に 9で終わるCSSの1つの特定のラインを意味します。
あなたの例では、あなたのCSSがこのように見えた場合...
html .twit-post .delete_note a
{
background-position-y: 2px\9;
}
html .twit-post .delete_note a:hover
{
background-position-y: -14px\9;
}
結果は、バックグラウンドポジションY:-14px; IE 9で
IE6の特定のコードを書きたい場合と同じことができると思いますが、代わりにIE9と言います:)
<!--[if IE 9]>
Special instructions for IE 9 here
<![endif]-->
条件付きCSSを使用してください:(コードを上に配置します <head>
HTMLで、IE9はその余分なCSSファイルを読み取ります)
<!--[if (gte IE 9)|!(IE)]><!-->
place the link to the CSS file here
<![endif]-->
これは、アプローチがクラスのハックではなく新しいCSSファイルを使用することを意味します。これにより、CSSが有効であることが保証されます。
場合によっては、ネガティブ値を使用していることがわかりました(コンパイラを使用してファイルを減らす場合)を使用して:
margin-right: -15px\9; /* This fails */
margin-right: ~"-18px\9"; /* This passes */
IE9をターゲットにする必要はありません。最新のCSSを処理することができ、ハッキングすべきではありません。これは、開発の時代遅れの方法です。