IE8的CSSselect器

目标元素只在IE浏览器中使用

IE6:

* html #nav li ul { left: -39px !important; border: 1px solid red; } 

IE7:

 *+html #nav li ul { left: -39px! important; } 

有谁知道如何瞄准IE8?

我不打算讨论是否应该使用这个方法,但是这样可以让你只为IE8-9设置特定的CSS属性(注意:它不是一个select器,所以和你有点不一样问):

在每个css声明之后使用'\ 0 /',所以:

 #nav li ul { left: -39px\0/ !important; } 

并build立另一个答案,你可以做到这一点,以指定各种风格的IE6,IE7和IE8:

 #nav li ul { *left: -7px !important; /* IE 7 (IE6 also uses this, so put it first) */ _left: -6px !important; /* IE 6 */ left: -8px\0/ !important; /* IE 8-9 */ } 

来源: http : //dimox.net/personal-css-hacks-for-ie6-ie7-ie8/

2013更新:IE10 +不再支持条件注释。

原始答案:

有些人似乎感到困惑,因为这不回答问题的信件,只有精神 – 所以澄清:

浏览器select器没有这样的东西。 有些黑客利用特定浏览器的CSSparsing器中的错误和/或故障,但是依靠这些function正在设置自己的失败。 有一个标准的,被接受的方式来处理这个问题:

仅使用条件注释来定位IE。

例:

 <!--[if gte IE 8]> <style> (your style here) </style> <![endif]--> 

这两个<!-->内的所有内容都将被所有非IE浏览器忽略,并且小于IE8的IE版本将跳过它。 只有IE8和更高版本将处理它。 2013年更新: IE10 +也将忽略它作为评论。

看看这些:

 /* IE8 Standards-Mode Only */ .test { color /*\**/: blue\9 } /* All IE versions, including IE8 Standards Mode */ .test { color: blue\9 } 

(来源: David Bloom对IE8标准模式的CSS破解 )

你可以这样使用。 它比…更好

 <link rel="stylesheet" type="text/css" media="screen" href="css/style.css" /> <!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="css/ie7.css" /><![endif]--> <!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="css/ie6.css" /><![endif]--> ------------------------------------------------------------- <!--[if lt IE 7 ]> <body class="ie6"> <![endif]--> <!--[if IE 7 ]> <body class="ie7"> <![endif]--> <!--[if IE 8 ]> <body class="ie8"> <![endif]--> <!--[if !IE]>--> <body> <!--<![endif]--> 

div.foo {color:inherit;} .ie7 div.foo {color:#ff8000; }

这个问题是古老的,但..

刚开始的身体标签后..

 <!--[if gte IE 8]> <div id="IE8Body"> <![endif]--> 

在结束标签之前

 <!--[if gte IE 8]> </div> <![endif]--> 

CSS ..

 #IE8Body #nav li ul {} 

你可以使用条件语句为所有的IE浏览器做到这一点,或通过封装所有内容在一个div浏览器名称+版本服务器端

仅适用于IE8的CSS样式:

 .divLogRight{color:Blue; color:Red\9; *color:Blue;} 

只有IE8将是红色的。

第一个蓝色:适用于所有浏览器。

红色:只有IE6,7,8

第二个蓝色:只有IE6,7


所以Red =仅适用于IE8。

有关浏览器黑客(包括Internet Explorer(IE),Safari,Chrome,iPhone和Opera)的完整摘要,请访问以下链接: http : //paulirish.com/2009/browser-specific-css-hacks/

build立在image72的优秀答案,你可以有这样的先进的CSSselect器:

 <!--[if lt IE 7]><body class="IE IE7down IE8down IE9down IE10down"><![endif]--> <!--[if IE 7]><body class="IE IE7 IE7down IE8down IE9down IE10down IE7up"><![endif]--> <!--[if IE 8]><body class="IE IE8 IE8down IE9down IE10down IE7up IE8up"><![endif]--> <!--[if IE 9]><body class="IE IE9 IE9down IE10down IE7up IE8up IE9up"><![endif]--> <!--[if gte IE 10]><body class="IE IE10 IE10down IE7up IE8up IE9up IE10up"><![endif]--> <!--[if !IE]>--><body class="notIE"><!--<![endif]--> 

所以在你的CSS你可以做到这一点:

 .notIE .foo { color: blue; } /* Target all browsers except IE */ .IE9up .foo { color: green; } /* Taget IE equal or greater than 9 */ .IE8 .foo { color: orange; } /* Taget IE 8 only */ .IE7down .foo { color: red; } /* Target IE equal or less than 7 */ .IE8 .foo, .IE9 .foo { font-size: 1.2em; /* Target IE8 & IE9 only */ } .bar { background-color: gray; } /* Applies to all browsers, as usual */ /* Maybe show a message only to IE users? */ .notIE #betterBrowser { display: none; } /* Any browser except IE */ .IE #betterBrowser { display: block; } /* All versions of IE */ 

这是伟大的,因为:

  • 这是完全符合标准 (没有丑陋/危险的CSS黑客)
  • 不需要单独的样式表
  • 您可以轻松地定位任何版本的IE以及复杂的组合

在ASP.NET世界中,我倾向于使用内置的BrowserCapsfunction在body标签上写出一组类,使您能够定位任何浏览器和平台的组合。

所以在预渲染,我会运行这样的代码(假设你给你的标签一个ID并使其运行在服务器):

 HtmlGenericControl _body = (HtmlGenericControl)this.FindControl("pageBody"); _body.Attributes.Add("class", Request.Browser.Platform + " " + Request.Browser.Browser + Request.Browser.MajorVersion); 

这段代码使你能够像这样在你的CSS中定位一个特定的浏览器:

 .IE8 #nav ul li { .... } .IE7 #nav ul li { .... } .MacPPC.Firefox #nav ul li { .... } 

我们创build一个System.Web.UI.MasterPage的子类,并确保我们的所有母版页都从我们专门的母版页inheritance,这样每个页面都可以免费添加这些类。

如果你不在ASP.NET环境中,你可以使用jQuery,它有一个浏览器插件,在页面加载时dynamic地添加类似的类名。

这种方法有利于从标记中删除条件注释,也可以保持CSS文件中的主要样式和浏览器特定样式在大致相同的位置。 这也意味着你的CSS更加面向未来(因为它不依赖于可能被修复的错误),并且帮助你的CSS代码变得更有意义,因为你只需要看

 .IE8 #container { .... } 

代替

 * html #container { .... } 

或更糟!

我有一个解决scheme,我只使用时,我build立了我的HTML&CSS有效的,并在大多数浏览器工作,我偶尔用这个来自拉斐尔利马这个惊人的一块JavaScript的黑客。 http://rafael.adm.br/css_browser_selector/

它保持我的CSS和HTML有效和干净,我知道这不是理想的解决scheme,使用JavaScript来修复黑客,但只要您的代码原本尽可能接近(愚蠢的IE只是有时打破东西),然后移动一些像素用JavaScript并不像有些人想象的那么大。 加上时间/成本的原因是一个快速和简单的修复。

鉴于不断演变的线索,请参阅下面的更完整的答案:

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; } 

IE 10及以上

 _:-ms-lang(x), .ie10up { property:value; } 

要么

 @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { .ie10up{property:value;} } 

IE 11(及以上)

 _:-ms-fullscreen, :root .ie11up { property:value; } 

Javascript替代品

Modernizr的

Modernizr在页面加载时可以快速运行以检测function; 然后创build一个包含结果的JavaScript对象,并将类添加到html元素中

用户代理select

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' 

允许非常有针对性的CSSselect器,例如:

 html[data-useragent*='Chrome/13.0'] .nav{ background:url(img/radial_grad.png) center bottom no-repeat; } 

脚注

如果可能,请避免使用浏览器定位 确定并解决您确定的任何问题。 支持渐进式增强优雅的降级 。 考虑到这一点,这是一个“理想的世界”情况,在生产环境中并不总是可以获得的,因此上述情况应该有助于提供一些很好的select。


归因/基本阅读

  • 基思·克拉克
  • 保罗爱尔兰人
  • networking虔诚
  • 扳手

我意识到这是一个古老的问题,但这是Googlesearch的第一个结果,我认为我find了比排名最高的build议和OPselect做的更好的解决scheme。

 #nav li ul:not(.stupidIE) { color:red } 

所以在技术上这与OP所要求的是相反的,但这意味着你必须首先应用你想要的IE8规则,然后将其应用于其他任何事情。 当然,你可以把任何东西放在()中,只要它是有效的CSS,并不真正select任何东西。 IE8扼stream线,并不适用它,但以前的IE浏览器(好吧,我只检查了IE7,我已经停止关心IE6),只是忽略:不(),并申请声明。 当然,其他所有的浏览器(我testing过的Safari 5,Opera 10.5,Firefox 3.6)都可以像你所期望的那样使用CSS。

所以这个解决scheme,我想像其他任何纯粹的CSS解决scheme会假设,如果IE开发人员添加支持:不select,那么他们也将解决什么差异导致你的目标IE8。

好吧,这不是CSS的破解,但出于无法find方法来从IE8 ie8目标,由于没有具体的CSS文件的政策,我不得不做下列,我认为别人可能会觉得有用:

 if (jQuery.browser.version==8.0) { $(results).css({ 'left':'23px', 'top':'-253px' }); } 

\ 9不能与font-family一起使用,而是需要像上面提到的Chris那样使用“ \ 0 /!important ”,例如:

 p { font-family: Arial \0/ !important; } 

IE8没有任何select器黑客。 这个问题的最佳资源是http://browserhacks.com/#ie

如果你想针对特定的IE8,你应该在html中做评论

 <!--[if IE 8]> Internet Explorer 8 <![endif]--> 

或者你可以使用属性黑客:

 /* IE6, IE7, IE8, but also IE9 in some cases :( */ #diecinueve { color: blue\9; } /* IE7, IE8 */ #veinte { color/*\**/: blue\9; } /* IE8, IE9 */ #anotherone {color: blue\0/;} /* must go at the END of all rules */ 

欲了解更多有关这一检查信息: http : //www.paulirish.com/2009/browser-specific-css-hacks/