如何在样式表中仅针对 IE(任何版本)? [重复]

问题描述 投票:0回答:5

我有一个继承的项目,有些地方一团糟。这是其中之一。我只需要针对 IE(任何版本),无需更改 HTML,也不需要 JavaScript 或除 CSS 之外的任何其他技术。

#nav li {
    float: left;
    height: 54px;
    background: #4f5151;
    display: table;
    border-left: 1px solid grey;
}

要明确的是:在嵌入样式表内并且不向html中的标签添加ID或类,我需要在用户使用IE时应用边框样式。我该怎么做?

编辑:找到了 Firefox 的解决方案,编辑问题以反映这一点。

css internet-explorer
5个回答
487
投票

Internet Explorer 9 及更低版本: 您可以使用条件注释为您想要专门针对的任何版本(或版本组合)加载特定于 IE 的样式表,如下所示使用外部样式表。

<!--[if IE]> <link rel="stylesheet" type="text/css" href="all-ie-only.css" /> <![endif]-->
但是,从版本 10 开始,IE 中不再支持条件注释。

Internet Explorer 10 和 11 : 使用 -ms-high-contrast 创建媒体查询,在其中放置 IE 10 和 11 特定的 CSS 样式。由于 -ms-high-contrast 是 Microsoft 特定的(并且仅在 IE 10+ 中可用),因此它只会在 Internet Explorer 10 及更高版本中进行解析。

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { /* IE10+ CSS styles go here */ }

Microsoft Edge 12:可以使用@supports规则 这里是有关此规则的所有信息的链接

@supports (-ms-accelerator:true) { /* IE Edge 12+ CSS styles go here */ }


内联规则IE8检测

我还有1个选项,但它只能检测IE8及以下版本。

/* For IE css hack */ margin-top: 10px\9 /* apply to all ie from 8 and below */ *margin-top:10px; /* apply to ie 7 and below */ _margin-top:10px; /* apply to ie 6 and below */
正如您为嵌入样式表指定的那样。我认为您需要对以下版本使用媒体查询和条件评论。


12
投票
使用 SASS 时,我使用以下 2 个媒体查询来定位 IE 6-10 和 Edge。

@media screen\9 @import ie_styles @media screen\0 @import ie_styles

https://keithclark.co.uk/articles/moving-ie-specific-css-into-media-blocks/

我还使用

@supports

 来定位更高版本的 Edge(根据需要添加任意数量)

@supports (-ms-ime-align:auto) @import ie_styles @supports (-ms-accelerator:auto) @import ie_styles

https://jeffclayton.wordpress.com/2015/04/07/css-hacks-for-windows-10-and-spartan-browser-preview/


8
投票
为了仅在我的样式表中针对 IE,我使用这个 Sass Mixin :

@mixin ie-only { @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { @content; } }
    

2
投票
在使用高对比度模式时遇到网站在 Edge 上崩溃的问题后,我发现了 Jeff Clayton 的以下作品:

https://browserstrangeness.github.io/css_hacks.html

这是一个疯狂、奇怪的媒体查询,但这些在 Sass 中更容易使用:

@media screen and (min-width:0\0) and (min-resolution:+72dpi), \0screen\,screen\9 { .selector { rule: value }; }

这适用于 IE8 以外的 IE 版本。

或者您可以使用:

@media screen\0 { .selector { rule: value }; }

它针对 IE8-11,但也会触发 FireFox 1.x(对于我的用例而言,这并不重要)。

现在我正在测试打印支持,这似乎工作正常:

@media all\0 { .selector { rule: value }; }
    

1
投票
IE 特定样式的另一个工作解决方案是

<html data-useragent="Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)">

然后是你的选择器

html[data-useragent*='MSIE 10.0'] body .my-class{ margin-left: -0.4em; }
    
© www.soinside.com 2019 - 2024. All rights reserved.