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

名词

描述
expression 由运算符、特征和(或)值组合形成一个条件语句
downlevel browser 任何浏览器除了IE5+,其他低版本浏览器不支持条件注释
uplevel browser IE5+支持条件注释
downlevel-hidden 低版本浏览器会忽视条件注释。如果表达式为true时,IE5+会渲染HTML页面
downlevel-revealed 低版本浏览器经过条件注释的解析。如果表达式为true时,IE5+会渲染HTML页面

使用条件注释的好处

下列表格中展示了基本语法类型,第一个注释是最基本的HTML注释。表格比较并展示每一种条件注释的不同语法的用法。

注释类型 语法或可能的值
HTML标准注释 <!-- Comment content  -->
downlevel-hidden <!--[if expression]> HTML <![endif]-->
downlevel-revealed <![if expression]> HTML <![endif]>
 
expression是由功能、操作符和值组成的。下表列出了支持的功能,并介绍了每个功能支持的值。
  

Item Example 注释
IE [if IE] 对应IE的版本功能来查看该网页
value [if IE 7] 一个整数或浮点标号对应于浏览器的版本。如果是与版本号匹配的浏览器版本,则返回true。
WindowsEdition [if WindowsEdition] Windows 7的IE8。  "WindowsEdition"对应Windows的版本功能。
value [if WindowsEdition 1] 整数对应Windows版本。如果正在使用的的值相匹配,则返回true。
true [if true] 结果始终为true.
false [if false] 结果始终为false.

下表描述了可用于创建条件表达式的运算符。

Item Example 注释
! [if !IE] NOT运算符.。被放置在要素、运算符或表达式之前,扭转表达式的布尔含义。
lt [if lt IE 5.5] 小于运算符。如果第一个参数小于第二个参数,返回true。
lte [if lte IE 6] 小于或等于运算符。如果第一个参数小于或等于第二个参数,返回true。
gt [if gt IE 5] 大于运算符。如果第一个参数大于第二个参数,返回true。
gte [if gte IE 7] 大于或等于运算符。如果第一个参数大于或等于第二个参数,返回true。
( ) [if !(IE 7)] 子表达式运算符。配合使用布尔运算符来创建更复杂的表达式。
& [if (gt IE 5)&(lt IE 7)] AND运算符。如果所有的子表达式的值为真,返回true。
| [if (IE 6)|(IE 7)] OR运算符。如果任何一个子表达式的计算结果为true,返回true。

Downlevel-hidden条件注释

此示例显示了一个低版本隐藏的条件注释,其中包含文本。

 <!--[if IE 8]>
<p>Welcome to Internet Explorer 8.</p>
<![endif]-->
Downlevel-hidden条件注释类似于基本的HTML注释,包含连字符(“ - ”)在开启和关闭标签。条件显示在标签的开口部,和[ENDIF]被放置在标签的封闭部分之前。内容放在注释标签内。
因为前四个字符和注释的最后三个字符是相同的HTML注释元素,所以低版本浏览器会忽略注释块内的HTML内容。由于内容被有效地不支持条件注释的浏览器隐藏,这种类型的条件注释被称为低版本隐藏。
如果条件表达式的结果为真,则对注释块里面的内容进行分析,并通过Internet Explorer 5及更高版本的渲染。针对Internet Explorer而专门设计的内容,这种做法特别有效。
下一个示例演示了如何在客户端脚本块放置一个条件注释;在这种情况下,消息在IE5+浏览器如何显示的。
 <!--[if gte IE 7]>
<script>
alert("Congratulations! You are running Internet Explorer 7 or a later version of Internet Explorer.");
</script>
<p>Thank you for closing the message box.</p>
<![endif]--> 
在上面的例子中,浏览器的版本只有主要的数字进行比较,因为它是在条件表达式指定的唯一数字。要比较这两个主要和次要版本号,要同时指定数字。
 
ownlevel-revealed条件注释
ownlevel-revealed条件注释允许在不承认条件注释的浏览器上包含内容。尽管条件注释被忽略,但它包含的HTML内容却没有被忽略。如果条件为true,IE5+仍然解析和渲染内容。ownlevel-revealed条件注释和Downlevel-hidden条件注释是互补的。
下面片段展示了一个典型的低版本条件注释:
 <![if lt IE 8]>
<p>Please upgrade to Internet Explorer version 8.</p>
<![endif]>

当比较这种类型HTML注释时,发现在注释块在"<!"和 ">"之后(前)没有连字符("--") ,因此,注释分隔符被视为无法识别的HTML。因为浏览器不能识别Downlevel-hidden条件注释,那么它就什么都不做了。

版本号

条件表达式可以用来确定查看网页浏览器的版本或Windows上用于运行浏览器的版本。在这两种情况下,表达式的值称为版本号,必须正确地指定,以获得所需的结果。
检测浏览器的版本时,主要的浏览器版本被指定为整数。要检查是否有轻微的浏览器版本,版本号遵循由一个小数点和四位数组成的规则。例如,微软的Internet Explorer5.5的发布版本的版本载体是5.5000。
在下面的例子中,仅主要版本号被指定。
 <!--[if IE 5]>
<p>Welcome to any incremental version of Internet Explorer 5!</p>
<![endif]-->
下面的测试正确地识别Internet Explorer 5。
 <!--[if IE 5.0000]>
<p>Welcome to Internet Explorer 5.0!</p>
<![endif]-->

例子 

 <!--[if IE]><p>You are using Internet Explorer.</p><![endif]-->
<![if !IE]><p>You are not using Internet Explorer.</p><![endif]> <!--[if IE 7]><p>Welcome to Internet Explorer 7!</p><![endif]-->
<!--[if !(IE 7)]><p>You are not using version 7.</p><![endif]--> <!--[if gte IE 7]><p>You are using IE 7 or greater.</p><![endif]-->
<!--[if (IE 5)]><p>You are using IE 5 (any version).</p><![endif]-->
<!--[if (gte IE 5.5)&(lt IE 7)]><p>You are using IE 5.5 or IE 6.</p><![endif]-->
<!--[if lt IE 5.5]><p>Please upgrade your version of Internet Explorer.</p><![endif]--> <!--[if true]>You are using an <em>uplevel</em> browser.<![endif]-->
<![if false]>You are using a <em>downlevel</em> browser.<![endif]> <!--[if true]><![if IE 7]><p>This nested comment is displayed in IE 7.</p><![endif]><![endif]-->

关于IE条件注释(译)的更多相关文章

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

    前面的话 本文中所有IEx+代表包含x及x以上:IEx-代表包含x及x以下,仅个人习惯.例:IE7+代表IE7.IE8…… 本文中所有例子全部经过测试,欢迎交流. HTML识别 条件注释法(IE10+ ...

  2. IE条件注释详解

    IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句,作用是可以灵活的为不同IE版本浏览器导入不同html元素,如:样式表,html标签等.很显然这种方法的最大好处就在于属于微软官方给出的兼容解决 ...

  3. JScript中的条件注释详解(转载自网络)

    JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...

  4. IE中的条件注释(转载自网络)

    IE条件注释是微软从IE5开始就提供的一种非标准逻辑语句,作用是可以灵活的为不同IE版本浏览器导入不同html元素,如:样式表,html标签等.很显然这种方法的最大好处就在于属于微软官方给出的兼容解决 ...

  5. 前端备忘录 — IE 的条件注释

    CSS hack 由于不同厂商的浏览器,比如 Internet Explorer,Safari,Mozilla Firefox, Chrome 等,或者是同一厂商的浏览器的不同版本,如 IE6 和 I ...

  6. 关于CSS中对IE条件注释的问题

    一.通用区分方式:IE6.IE7能识别*,标准浏览器(如FF)不能识别*:IE6能识别*,但不能识别 !important:IE7能识别*,也能识别 !important:IE8能识别\0,不能识别* ...

  7. IE的条件注释

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> <!--[if IE]> 所有的IE可识别 <![ ...

  8. 条件注释判断IE浏览器

    最近在用jquery 2.0 才知道已不支持IE6/7/8 但又不想换回 jquery 1.X; 找了一资料发现条件注释可以解决这个问题 这个也像程序中的条件判断,先来介绍几个单词lt :Less t ...

  9. HTML中的IE条件注释

    IE条件注释是一种特殊的HTML注释,这种注释只有IE5.0及以上版本才能理解.比如普通的HTML注释是: <!--This is a comment--> 而只有IE可读的IE条件注释是 ...

随机推荐

  1. Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. oracle第一章

    1.oracle对比sqlserver oracle sqlserver 数据文件.dbf 数据文件.mdf 控制文件.ctl   日志文件.log 日志文件.log     2.内置用户 1.sys ...

  3. SAP客户标准信用额度修改和创建

    好吧,前提要说一下,信贷是到客户的信贷范围级别的. FUNCTION zfm_credit. *"---------------------------------------------- ...

  4. C#识别验证码技术-Tesseract

    相信大家在开发一些程序会有识别图片上文字(即所谓的OCR)的需求,比如识别车牌.识别图片格式的商品价格.识别图片格式的邮箱地址等等,当然需求最多的还是识别验证码.如果要完成这些OCR的工作,需要你掌握 ...

  5. 闲聊CSS之关于clearfix--清除浮动[转]

    .clearfix:after { content: " "; display: block; clear: both; height:; } .clearfix { zoom:; ...

  6. 如何在android项目中引用project作为类库引用

    前言: 在我们开发项目的时候,存在很多多个项目共有一个资源.逻辑代码的情况,这种情况一般我们采用在开发项目中导入别的项目作为引用的类库.资源等. 操作: 1.  新建一个android项目common ...

  7. 使用siege进行Web压力测试

    因为最近公司线上node项目出一些不稳定的情况,考虑在这方面能不能做进一步的优化,既然要做优化首先要知道问题出在哪里? 因为暂无法定位是node层问题还是api层出现问题,由于在开发环境小并发量程序运 ...

  8. ASIHTTPRequest 在release(打包)模式下数据获取或post失败问题

    ASIHTTPRequest 在relase模式下失效 表现为,调用网络请求后没有任何反应 原因之一: ARC模式下,在ASIHTTPRequest 前面会加上__weak来解决循环应用,这个__we ...

  9. 访问FLASH设备-W25X16

    /************************************* *文件名称:w25x16_spi.c * *功能描述:访问和写入数据到闪存w25x16 * *建立日期:2016-03-1 ...

  10. 【python】import 模块、包、第三方模块

    xx.py文件,称为模块(module),把不同模块归整到一起的文件夹,叫做包(package) 不同包下的模块可以重名,但是都不能和系统内建模块重名 包里面一定要有个__init__.py文件,否则 ...