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/