如何为IE 11编写CSS hack?

use*_*651 190 css css-selectors css-hack internet-explorer-11

我怎样才能为IE 11破解或编写CSS?我有一个在IE 11中看起来很糟糕的网站.我只是在这里搜索,但还没有找到任何解决方案.

有没有css选择器?

Pau*_*tte 270

使用Microsoft特定CSS规则的组合来过滤IE11:

<!doctype html>
<html>
 <head>
  <title>IE10/11 Media Query Test</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <style>
    @media all and (-ms-high-contrast:none)
     {
     .foo { color: green } /* IE10 */
     *::-ms-backdrop, .foo { color: red } /* IE11 */
     }
  </style>
 </head>
 <body>
  <div class="foo">Hi There!!!</div>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

由于以下因素,此工作的过滤器:

当用户代理无法解析选择器(即,它不是有效的CSS 2.1)时,它必须忽略选择器和以下声明块(如果有的话).

<!doctype html>
<html>
 <head>
  <title>IE10/11 Media Query Test</title>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <style>
    @media all and (-ms-high-contrast:none)
     {
     .foo { color: green } /* IE10 */
     *::-ms-backdrop, .foo { color: red } /* IE11 */
     }
  </style>
 </head>
 <body>
  <div class="foo">Hi There!!!</div>
 </body>
</html>
Run Code Online (Sandbox Code Playgroud)

参考

  • 对我来说,这只有在删除ie11 hack中的逗号后才有效,例如`*:: - ms-backdrop .foo ...` (6认同)

SW4*_*SW4 225

根据不断发展的主题,我更新了以下内容:

IE 11(及以上......)

_:-ms-fullscreen, :root .foo { property:value; }
Run Code Online (Sandbox Code Playgroud)

IE 10及以上版本

_:-ms-lang(x), .foo { property:value; }
Run Code Online (Sandbox Code Playgroud)

要么

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
   .foo{property:value;}
}
Run Code Online (Sandbox Code Playgroud)

仅限IE 10

_:-ms-lang(x), .foo { property:value\9; }
Run Code Online (Sandbox Code Playgroud)

IE 9及以上版本

@media screen and (min-width:0\0) and (min-resolution: +72dpi) {
  //.foo CSS
  .foo{property:value;}
}
Run Code Online (Sandbox Code Playgroud)

IE 9和10

@media screen and (min-width:0\0) {
    .foo /* backslash-9 removes.foo & old Safari 4 */
}
Run Code Online (Sandbox Code Playgroud)

仅限IE 9

@media screen and (min-width:0\0) and (min-resolution: .001dpcm) { 
 //.foo CSS
 .foo{property:value;}
}
Run Code Online (Sandbox Code Playgroud)

IE 8,9和10

@media screen\0 {
    .foo {property:value;}
}
Run Code Online (Sandbox Code Playgroud)

仅限IE 8标准模式

.foo { property /*\**/: value\9 }
Run Code Online (Sandbox Code Playgroud)

IE 8

html>/**/body .foo {property:value;}
Run Code Online (Sandbox Code Playgroud)

要么

@media \0screen {
    .foo {property:value;}
}
Run Code Online (Sandbox Code Playgroud)

IE 7

*+html .foo {property:value;}
Run Code Online (Sandbox Code Playgroud)

要么

*:first-child+html .foo {property:value;}
Run Code Online (Sandbox Code Playgroud)

IE 6,7和8

@media \0screen\,screen\9 {
    .foo {property:value;}
}
Run Code Online (Sandbox Code Playgroud)

IE 6和7

@media screen\9 {
    .foo {property:value;}
}
Run Code Online (Sandbox Code Playgroud)

要么

.foo { *property:value;}
Run Code Online (Sandbox Code Playgroud)

要么

.foo { #property:value;}
Run Code Online (Sandbox Code Playgroud)

IE 6,7和8

@media \0screen\,screen\9 {
    .foo {property:value;}
}
Run Code Online (Sandbox Code Playgroud)

IE 6

* html .foo {property:value;}
Run Code Online (Sandbox Code Playgroud)

要么

.foo { _property:value;}
Run Code Online (Sandbox Code Playgroud)

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':'');
Run Code Online (Sandbox Code Playgroud)

html元素中添加(例如)以下内容:

data-useragent='Mozilla/5.0 (compatible; M.foo 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'
Run Code Online (Sandbox Code Playgroud)

允许非常有针对性的CSS选择器,例如:

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

脚注

如果可能,请确定并修复任何问题,而不是黑客攻击.支持渐进增强优雅降级.然而,这是一个并非总能获得的"理想世界"场景,因此 - 上述应该有助于提供一些好的选择.


归因/基本阅读

  • 如果IE实际上遵循标准足以值得信赖,那就太好了,但事实并非如此.这就是为什么存在IE特定黑客的原因,这是因为尽管IE的每个版本比之前的版本都要好一英里,但它仍然没有足够的标准支持和足够的怪癖被视为符合标准的浏览器. (14认同)
  • 虽然我绝对同意,但是无法解决所有问题.这是不可能的.例如:IE11在应用border-radius时在渲染元素的高度和宽度方面存在问题.真实的故事.因此,您可能会发现自己处于这样一种情况,即您知道自己正在编写正确的代码,而某个特定的浏览器会出现错误,从而产生使用此类黑客的必要性. (5认同)

Hbi*_*and 64

这里有一个两步解决方案是IE10和11的黑客攻击

    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */  
}
Run Code Online (Sandbox Code Playgroud)

因为IE10和IE11支持-ms-high-cotrast,你可以利用这个来定位这两个浏览器

如果你想从中排除IE10,你必须创建一个IE10特定代码,如下所示使用用户代理技巧你必须添加这个Javascript

var doc = document.documentElement;
doc.setAttribute('data-useragent', navigator.userAgent);
Run Code Online (Sandbox Code Playgroud)

和这个HTML标记

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

现在你可以像这样写你的CSS代码了

html[data-useragent*='MSIE 10.0'] h1 {
  color: blue;
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请参阅本网站,wil tutorail,Chris Tutorial


如果你想要IE11及更高版本的目标,我发现这是:

_:-ms-fullscreen, :root .selector {}
Run Code Online (Sandbox Code Playgroud)

这是获取更多信息的绝佳资源:browserhacks.com


Jef*_*ton 23

自从2013年秋天以来,我一直在写这些并将它们贡献给BrowserHacks.com - 我写的这篇文章很简单,只有IE 11支持.

<style type="text/css">
_:-ms-fullscreen, :root .msie11 { color: blue; }
</style>
Run Code Online (Sandbox Code Playgroud)

当然还有div ...

<div class="msie11">
    This is an Internet Explorer 11 CSS Hack
<div>
Run Code Online (Sandbox Code Playgroud)

因此,文本显示为蓝色与Internet Explorer 11.玩得开心.

-

我的实时测试网站上有更多IE浏览器和其他浏览器CSS攻击:

更新:http://browserstrangeness.bitbucket.io/css_hacks.html

MIRROR:http://browserstrangeness.github.io/css_hacks.html

(如果您还在寻找MS Edge CSS Hacks,那就去哪里.)


hoo*_*man 6

您可以在样式标记内使用以下代码:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
/* IE10+ specific styles go here */  
}
Run Code Online (Sandbox Code Playgroud)

以下是一个对我有用的示例:

<style type="text/css">

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */  
   #flashvideo {
        width:320px;
        height:240;
        margin:-240px 0 0 350px;
        float:left;
    }

    #googleMap {
        width:320px;
        height:240;
        margin:-515px 0 0 350px;
        float:left;
        border-color:#000000;
    }
}

#nav li {
    list-style:none;
    width:240px;
    height:25px;
    }

#nav a {
    display:block;
    text-indent:-5000px;
    height:25px;
    width:240px;
    }
</style>
Run Code Online (Sandbox Code Playgroud)

请注意,因为(#nav li)和(#nav a)在@media屏幕之外...,它们是通用样式.