浏览器兼容之条件注释,cssHack

对于形形色色的浏览器,随之而来的就是一些兼容问题,大多应该都是IE下的兼容问题,因为任何浏览器下出现渲染不一致都极有可能是我们自己的结构或样式不符合W3C的某些要求,或者说违背了浏览器的某些规则而先造成的,所以我们应该尽量通过结构或CSS的修改来达到各浏览器渲染一致效果!

条件表达式(注:条件注释只能用在IE5-IE9,因为微软已经在IE10以后的版本中已禁用IE特有的条件注释功能,详情见:https://msdn.microsoft.com/zh-cn/library/ie/hh801214%28v=vs.85%29.aspx

    <!--[if IE n]>
        ...
    <![endif]-->
<!--专对于IEn的一些样式-->
    <!--[if gt IE n]>
        ...
    <![endif]-->
<!--专对于IEn以上版本的一些样式-->
    <!--[if lt IE n]>
        ...
    <![endif]-->
<!--专对于IEn以下版本的一些样式-->
<!--[if gte IE n]>
        ...
    <![endif]-->
<!--专对于IEn及以上版本的一些样式-->
<!--[if lte IE n]>
        ...
    <![endif]-->
<!--专对于IEn及以下版的一些样式-->
  <!--[if !ie]><-->    <!--<![endif]-->
<!--专对于除IE以外的一些样式-->

条件样式不但能用在样式上,还能用在javascript上,但是请留意条件注释只会在IE9及以下版本下识别。

例如下面这一段代码只会在IE9下才会起用用,但是你把9改成10,在IE10下是没有任何效果的

  <!--[if IE 9]>
    <style type="text/css">
        .typ{background:blue}
    </style>
    <script type="text/javascript">
        alert("this is IE浏览器!");
    </script>
    <![endif]-->
  <!--下面的这一段代码在IE10下是没有任何效果的-->
  <!--[if IE 10]>
    <style type="text/css">
        .typ{background:blue}
    </style>
    <script type="text/javascript">
        alert("this is IE浏览器!");
    </script>
    <![endif]-->
<!--下面的这一段代码除了在火狐,chrome下会弹出外,在IE10也会弹出-->
  <!--[if !ie]><-->    <script type="text/javascript">
        alert("this is not IE浏览器!");
      </script>    <!--<![endif]-->

综上所述,条件注释只能用来用来解决IE9下的兼容问题,当然一般遇到样式兼容问题一般都是IE6-IE8下。

cssHack解决样式兼容问题:cssHack分为从css选择器和css属性上来区别不同的Hack写法

css选择器写法

/*1、IE6以及IE6以下版本浏览器*/
    * html .demo {color: green;}

/*2、仅仅IE7浏览器*/
   *:first-child+html .demo {color: green;}

/*3、除IE6之外的所有浏览器(IE7-9, Firefox,Safari,Opera)*/
    html>body .demo {color: green;}

/*4、IE8-9,Firefox,Safari,Opear*/
     html>/**/body .demo {color: green;}

/*5、IE9+*/
    :root .demo {color: red;}

/*6、Firefox浏览器*/
    @-moz-document url-prefix() {
                      .demo {
                         color: red;
                      }
                    }

/*6、Webkit内核浏览器(Safari和Google Chrome)*/
    @media screen and (-webkit-min-device-pixel-ratio:0)    {
                        .demo { color: red; }
                    }

/* 7、Opera浏览器*/
   @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){
                        head~body  .demo { color: red; }
                    }

/*8、iPhone / mobile webkit*/
   @media screen and (max-device-width: 480px) {
                        .demo { color: red  }
                    }

CSS属性Hack写法

/*1、IE6浏览器*/
    .demo {_color: red;}

 /*2、IE6-7浏览器识别*/
    .demo {*color: red;}

 /*3、所有浏览器除IE6浏览外*/
    .demo {color/**/:red;}

/*4、IE6-9浏览器*/
    .demo {color: red\9;}

 /*5、IE7-8浏览器*/
    .demo {color/*\**/:red\9;}

使用实例

.demo {
  color: red;/*所有现代浏览器*/
  color: green\9;/*所有IE浏览器*/
  color: lime\0;/*IE8-9浏览器*/
  *color: red;/*IE6-7浏览器*/
 +color: blue;/*IE7浏览器*/
 _color: orange;/*IE6浏览器*/
 }
 :root .demo {color: #963\9;}
 @-moz-document url-prefix(){  .demo{color:#897;}/* all firefox */
  }
@media screen and (-webkit-min-device-pixel-ratio:0){
    .demo { color: #000; }/*webkit*/
}
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0){
    head~body  .demo { color: red; }/*opera*/
}

其实据个人工作经验大多布局兼容问题都会发在IE6-IE8,对于现代浏览器基本没什么兼容问题,所以记住常用IE下的兼容写法就好啦!

详细原文见:http://www.w3cplus.com/create-an-ie-only-stylesheet

详细原文见:http://www.w3cplus.com/css/create-css-browers-hacks

 
时间: 2024-08-04 05:45:35

浏览器兼容之条件注释,cssHack的相关文章

浏览器条件注释

原文链接:http://www.blueidea.com/tech/site/2006/3561.asp 浏览器的条件注释理论,用下面一段例子来解释这个问题 (X)HTML 下面一段代码是测试在微软的IE浏览器下的条件注释语句的效果: <!--[if IE]><h1>您正在使用IE浏览器</h1><![endif]--><!--[if IE 5]><h1>版本 5</h1><![endif]--><!--

IE条件注释

条件注释是IE专门提供的一种语法,其他浏览器会将其作为注释而忽略这些语句. 作用:根据不同的IE版本加载对应的CSS或者JS文件,甚至css代码和html代码. 重要提示 自IE10起,标准模式不再支持条件注释.而是采用特征检测给浏览器不支持的功能来提供备用策略.有关标准模式的详细信息,请参阅定义文档兼容性. 术语 熟悉下列术语有助于你学习文档兼容性. 名词 描述 expression 由运算符.特征和(或)值组合形成一个条件语句 downlevel browser 任何浏览器除了IE5+,其他

HTML中的IE条件注释

IE条件注释是一种特殊的HTML注释,这种注释只有IE5.0及以上版本才能理解.比如普通的HTML注释是: <!--This is a comment--> 而只有IE可读的IE条件注释是: <!--[if IE]> <![endif]--> “非IE条件注释”: <!--[if !IE]>--> non-IE HTML Code <!--<![endif]--> “非特定版本IE条件注释”(很少用到): <!--[if ! l

关于IE条件注释

本文翻译自此篇文章.翻译纯属业余. 许多网站为了确保他们的站点能够在不同的浏览器上有不同的显示效果而使用特征检测,一些传统的网站使用其他技术,诸如在服务器或客户端上使用脚本去检测浏览器类型.在这里我们引入比使用脚本检测浏览器更有优势的方法--条件注释.条件注释可以轻易地更早发现早期的IE版本.条件注释是层叠样式表(CSS)用于区分IE特定版本的首选方式. 重要提示 自IE10起,标准模式不再支持条件注释.而是采用特征检测给浏览器不支持的功能来提供备用策略.有关标准模式的详细信息,请参阅定义文档兼

浏览器兼容处理(HTML条件注释、CSSHack和JS识别)

前面的话 本文中所有IEx+代表包含x及x以上:IEx-代表包含x及x以下,仅个人习惯.例:IE7+代表IE7.IE8…… 本文中所有例子全部经过测试,欢迎交流. HTML识别 条件注释法(IE10+已经不支持条件注释) [注意]两个--和左中括号[之间不能有空格,否则无效 [1]IE9-(<!--[if IE]><![endif]-->) <!DOCTYPE html> <html lang="en"> <head> <

用条件注释判断浏览器版本解决页面兼容问题

在IE8.IE9上可能好好的,当我们在IE6.IE7或者是其他的浏览器上再浏览这些页面时,可能会发现我们的页面已经面目全非了,那么如何解决兼容问题呢,本文就为大家一一道来对于浏览器兼容问题,我们应该碰到很多了,在平时写一些页面时,在IE8.IE9上可能好好的,当我们在IE6.IE7或者是其他的浏览器上再浏览这些页面时,可能会发现我们的页面已经面目全非了,作为一名前端开发人员,这是最让人发疯的问题了,那么我们该怎么解决这些问题呢? 首先,我们写的页面在不同的浏览器上之所以会出现表现不同的问题,是因

用条件注释判断浏览器版本,解决兼容问题

对于浏览器兼容问题,我们应该碰到很多了,在平时写一些页面时,在IE8.IE9上可能好好的,当我们在IE6.IE7或者是其他的浏览器上再浏览这些页面时,可能会发现我们的页面已经面目全非了,作为一名前端开发人员,这是最让人发疯的问题了,那么我们该怎么解决这些问题呢? 首先,我们写的页面在不同的浏览器上之所以会出现表现不同的问题,是因为不同的浏览器在解析页面时,他们所遵循的规则并不是完全相同的.比如IE,不同的版本解析都不同,何况是不同的浏览器厂商,不同的内核呢.但是我们在遇到兼容性问题时,应该首先检

使用条件注释完成浏览器兼容

最近做的纯PC站需要兼容到IE8,一般使用css hack就能够完成,但如果兼容到IE7及以下就很头疼了,使用条件注释动态加载脚本是个不错的选择. 注释不同的浏览器版本 : (1).支持所有的IE浏览器(不包括IE10标准模式) <!--[if IE]>只有IE6,7,8,9浏览器显示(IE10标准模式不支持)<![endif]--> (2).所有非IE浏览器(不包括IE10标准模式) <!--[if !IE]><!-->只有非IE浏览器显示(不包括IE10

Ie - 条件注释区分IE、非IE浏览器

条件注释判断浏览器在实际中经常使用,比如css样式,js文件的兼容等根据浏览器不同进行判断加载,感兴趣的朋友可以参考下 1.条件注释: IE中的条件注释(Conditional comments)对IE的版本和IE非IE有优秀的区分能力,也是WEB设计中常用的一种hack方法. 条件注释的基本结构和HTML的注释(<!– –>)是一样的.因此IE以外的浏览器将会把它们看作是普通的注释而完全忽略它们.IE将会根据if条件来判断是否如解析普通的页面内容一样解析条件注释里的内容. IE浏览器的条件注