<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->
<!--[if IE]> 所有的IE可识别 <![endif]-->
<!--[if IE 6]> 仅IE6可识别 <![endif]-->
<!--[if lt IE 6]> IE6以下版本可识别 <![endif]-->
<!--[if lte IE 6]> IE6以及IE6以下版本可识别 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可识别 <![endif]-->
<!--[if IE 7]> 仅IE7可识别 <![endif]-->
<!--[if lt IE 7]> IE7以下版本可识别 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可识别 <![endif]-->
<!--[if IE 8]> 仅IE8可识别 <![endif]-->
<!--[if IE 9]> 仅IE9可识别 <![endif]-->
如:
<!--[if IE 9]>
<link rel="stylesheet" type="text/css" href="ie9.css"/>
<![endif]-->
或
<!--[if IE 9]>
<style>
.header-menu>li{
color:#fff;
}
</style>
<![endif]-->
IE10/11不支持条件性注释后的
替代方法
专门针对IE的条件性注释(Conditional comments)是个很奇葩的东西,它是专门给IE浏览器准备的,因为其它浏览器根本不能识别这种标记。之所以需要这种东西,是因为IE实现的网页渲染效果和其它浏览器又很多出入,使用条件性注释可以区别对待的针对浏览器编写CSS等代码。
- <span class="token comment"><!--[if IE]>
- <link href="ie.css" rel="stylesheet">
- <![endif]--></span>
- <span class="token comment"><!--[if IE6]>
- <style type="text/css">
- /* styles for IE6 goes here */
- </style>
- <![endif]--></span>
- <span class="token comment"><!--[if lt IE7]>
- <style type="text/css">
- /* styles for IE7 goes here */
- </style>
- <![endif]--></span>
- <span class="token comment"><!--[if lte IE8]>
- <style type="text/css">
- /* styles for IE8 goes here */
- </style>
- <![endif]--></span>
- <span class="token comment"><!--[if gt IE9]>
- <style type="text/css">
- /* styles for IE9 goes here */
- </style>
- <![endif]--></span>
- <span class="token comment"><!--[if gte IE9]>
- <style type="text/css">
- /* styles for IE9 goes here */
- </style>
- <![endif]--></span>
- <span class="token comment"><!--[if !IE]> --></span>
- <span class="token style language-css"><span class="token tag" style="color:rgb(153,0,85);"><span class="token tag"><span class="token punctuation" style="color:rgb(153,153,153);"><</span>style</span> <span class="token attr-name" style="color:rgb(102,153,0);">type</span><span class="token attr-value" style="color:rgb(0,119,170);"><span class="token punctuation" style="color:rgb(153,153,153);">=</span><span class="token punctuation" style="color:rgb(153,153,153);">"</span>text/css<span class="token punctuation" style="color:rgb(153,153,153);">"</span></span><span class="token punctuation" style="color:rgb(153,153,153);">></span></span>
- <span class="token comment">/* styles goes here but should not appear in IE5-9 */</span>
- <span class="token tag" style="color:rgb(153,0,85);"><span class="token tag"><span class="token punctuation" style="color:rgb(153,153,153);"></</span>style</span><span class="token punctuation" style="color:rgb(153,153,153);">></span></span></span>
- <span class="token comment"><!-- <![endif]--></span>
但当IE的版本到到达10/11后,开始不支持这种条件性注释(MSDN上的说明)。
说来也合情合理,从IE9开始,IE开始被WEB开发人员接受,很多人将IE9后的浏览器和火狐、谷歌浏览器统称为现代浏览器,因为它们开始实现新的HTML5和CSS3统一标准。但愿望是美好的,现实却是残酷的,很多WEB开发人员在开发实践中发现,同一个CSS在IE9/10/11上显示的效果和其它浏览器渲染的效果还是不一样。也就是说,我们还是需要条件性注释。
那么,在不支持条件性注释的IE10/11上,如何实现条件性注释的效果呢?
方法一:使用IE=EmulateIE9属性指示浏览器采用IE9渲染技术
IE9是支持条件性注释的。
- <span class="token tag" style="color:rgb(153,0,85);"><span class="token tag"><span class="token punctuation" style="color:rgb(153,153,153);"><</span>meta</span> <span class="token attr-name" style="color:rgb(102,153,0);">http-equiv</span><span class="token attr-value" style="color:rgb(0,119,170);"><span class="token punctuation" style="color:rgb(153,153,153);">=</span><span class="token punctuation" style="color:rgb(153,153,153);">"</span>X-UA-Compatible<span class="token punctuation" style="color:rgb(153,153,153);">"</span></span> <span class="token attr-name" style="color:rgb(102,153,0);">content</span><span class="token attr-value" style="color:rgb(0,119,170);"><span class="token punctuation" style="color:rgb(153,153,153);">=</span><span class="token punctuation" style="color:rgb(153,153,153);">"</span>IE<span class="token punctuation" style="color:rgb(153,153,153);">=</span>EmulateIE9<span class="token punctuation" style="color:rgb(153,153,153);">"</span></span><span class="token punctuation" style="color:rgb(153,153,153);">></span></span>
在html网页的head
里加入上面的元标记,这样IE10/11就能识别条件性注释了,我们也就可以像IE6/7/8那样编写针对性的CSS代码了。但这样做有个弊端,很显然,浏览器这样就会才能IE9的渲染模式,而不是最新的IE10/11技术。
方法二:使用媒体查询语句+-ms-high-contrast
属性
CSS的媒体查询语句(media query)是一种高级的CSS条件语句,它能根据一些属性和属性值计算判断CSS是否可以生效。在这里,我们要使用一个IE10/11独有的属性,它就是-ms-high-contrast
,只有IE10/11实现了这个属性,它可以有两个值active
或none
,使用下面的媒体查询语句:
- <span class="token atrule" style="color:rgb(0,119,170);"><span class="token rule">@media</span> all and <span class="token punctuation" style="color:rgb(153,153,153);">(</span><span class="token property" style="color:rgb(153,0,85);">-ms-high-contrast</span><span class="token punctuation" style="color:rgb(153,153,153);">:</span> none<span class="token punctuation" style="color:rgb(153,153,153);">)</span>, <span class="token punctuation" style="color:rgb(153,153,153);">(</span><span class="token property" style="color:rgb(153,0,85);">-ms-high-contrast</span><span class="token punctuation" style="color:rgb(153,153,153);">:</span> active<span class="token punctuation" style="color:rgb(153,153,153);">)</span></span> <span class="token punctuation" style="color:rgb(153,153,153);">{</span>
- <span class="token comment">/* IE10+ CSS styles go here */</span>
- <span class="token punctuation" style="color:rgb(153,153,153);">}</span>
火狐浏览器、谷歌浏览器不能识别这个属性,所以不会执行这个查询语句里的CSS,从而实现了条件性执行的效果。
方法三:使用Javascript判断浏览器的类型
先用JavaSCript判断是否是IE浏览器,如果是,就在页面的<html>
标记上添加一个“ie”的类名:
- <span class="token keyword" style="color:rgb(0,119,170);">var</span> ms_ie <span class="token operator" style="color:rgb(166,127,89);">=</span> <span class="token keyword" style="color:rgb(0,119,170);">false</span><span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token keyword" style="color:rgb(0,119,170);">var</span> ua <span class="token operator" style="color:rgb(166,127,89);">=</span> window<span class="token punctuation" style="color:rgb(153,153,153);">.</span>navigator<span class="token punctuation" style="color:rgb(153,153,153);">.</span>userAgent<span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token keyword" style="color:rgb(0,119,170);">var</span> old_ie <span class="token operator" style="color:rgb(166,127,89);">=</span> ua<span class="token punctuation" style="color:rgb(153,153,153);">.</span><span class="token function" style="color:rgb(221,74,104);">indexOf</span><span class="token punctuation" style="color:rgb(153,153,153);">(</span><span class="token string" style="color:rgb(102,153,0);">'MSIE '</span><span class="token punctuation" style="color:rgb(153,153,153);">)</span><span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token keyword" style="color:rgb(0,119,170);">var</span> new_ie <span class="token operator" style="color:rgb(166,127,89);">=</span> ua<span class="token punctuation" style="color:rgb(153,153,153);">.</span><span class="token function" style="color:rgb(221,74,104);">indexOf</span><span class="token punctuation" style="color:rgb(153,153,153);">(</span><span class="token string" style="color:rgb(102,153,0);">'Trident/'</span><span class="token punctuation" style="color:rgb(153,153,153);">)</span><span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token keyword" style="color:rgb(0,119,170);">if</span> <span class="token punctuation" style="color:rgb(153,153,153);">(</span><span class="token punctuation" style="color:rgb(153,153,153);">(</span>old_ie <span class="token operator" style="color:rgb(166,127,89);">></span> <span class="token operator" style="color:rgb(166,127,89);">-</span><span class="token number" style="color:rgb(153,0,85);">1</span><span class="token punctuation" style="color:rgb(153,153,153);">)</span> <span class="token operator" style="color:rgb(166,127,89);">||</span> <span class="token punctuation" style="color:rgb(153,153,153);">(</span>new_ie <span class="token operator" style="color:rgb(166,127,89);">></span> <span class="token operator" style="color:rgb(166,127,89);">-</span><span class="token number" style="color:rgb(153,0,85);">1</span><span class="token punctuation" style="color:rgb(153,153,153);">)</span><span class="token punctuation" style="color:rgb(153,153,153);">)</span> <span class="token punctuation" style="color:rgb(153,153,153);">{</span>
- ms_ie <span class="token operator" style="color:rgb(166,127,89);">=</span> <span class="token keyword" style="color:rgb(0,119,170);">true</span><span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token punctuation" style="color:rgb(153,153,153);">}</span>
- <span class="token keyword" style="color:rgb(0,119,170);">if</span> <span class="token punctuation" style="color:rgb(153,153,153);">(</span> ms_ie <span class="token punctuation" style="color:rgb(153,153,153);">)</span> <span class="token punctuation" style="color:rgb(153,153,153);">{</span>
- document<span class="token punctuation" style="color:rgb(153,153,153);">.</span>documentElement<span class="token punctuation" style="color:rgb(153,153,153);">.</span>className <span class="token operator" style="color:rgb(166,127,89);">+</span><span class="token operator" style="color:rgb(166,127,89);">=</span> <span class="token string" style="color:rgb(102,153,0);">" ie"</span><span class="token punctuation" style="color:rgb(153,153,153);">;</span>
- <span class="token punctuation" style="color:rgb(153,153,153);">}</span>
有了这个标志性css class后,我们就可以在CSS里区别性的编写css代码了。
- <span class="token selector" style="color:rgb(102,153,0);">.testClass</span><span class="token punctuation" style="color:rgb(153,153,153);">{</span>
- <span class="token comment">/*这里写通用的css*/</span>
- <span class="token punctuation" style="color:rgb(153,153,153);">}</span>
- <span class="token selector" style="color:rgb(102,153,0);">.ie .testClass</span><span class="token punctuation" style="color:rgb(153,153,153);">{</span>
- <span class="token comment">/*这里写专门针对IE的css*/</span>
- <span class="token punctuation" style="color:rgb(153,153,153);">}</span>
这三种方法都能实现在IE10/11里条件性注释的替代效果,各有各的使用场景,我们根据软件的运行环境来选择使用哪一种。
延伸阅读:
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML、JavaScript)并渲染、展示网页。因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解析也有所不同,因此同一网页在不同的内核浏览器里的渲染、展示效果也可能不同。
浏览器内核种类繁多,商用的加上非商业的免费内核,大约会超过10款,我们今天重点看一下目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto。
一、Trident内核(代表:Internet Explorer)
说起Trident,很多人都会感到陌生,但提起IE(Internet Explorer)则无人不知无人不晓,由于其被包含在全世界使用率最高的操作系统Windows中,得到了极高的市场占有率,所以我们又经常称其为IE内核。
Trident(又称为MSHTML),是微软开发的一种排版引擎。它在1997年10月与IE4一起诞生,一直在被不断地更新和完善。而且除IE外,许多产品都在使用Trident核心,比如Windows的Help程序、RealPlayer、Windows Media Player、Windows Live Messenger、Outlook Express等等都使用了Trident技术。
Trident实际上是一款开放的内核,Trident引擎被设计成一个软件模块,使得其他软件开发人员很容易将网页浏览功能加到他们自行开发的应用程序里,其接口内核设计相当成熟,因此涌现出许多采用IE内核而非IE的浏览器,但是Trident只能用于Windows平台。使用Trident渲染引擎的浏览器包括:IE、傲游、世界之窗浏览器、Avant、腾讯TT、Sleipnir、GOSURF、GreenBrowser和KKman等。
二、Gecko内核(代表:Mozilla Firefox)
Gecko是开放源代码、以C++编写的网页排版引擎,目前被Mozilla家族网页浏览器以及Netscape 6以后版本浏览器所使用。这款软件原本是由网景通讯公司开发的,现在则由Mozilla基金会维护。由于Gecko的特点是代码完全公开,因此,其可开发程度很高,全世界的程序员都可以为其编写代码,增加功能。因为这是个开源内核,因此受到许多人的青睐,采用Gecko内核的浏览器也很多,这也是Gecko内核虽然年轻但市场占有率能够迅速提高的重要原因。
Gecko排版引擎提供了一个丰富的程序界面以供与互联网相关的应用程序使用,例如网页浏览器、HTML编辑器、客户端/服务器等。虽然最初的主要对象是Mozilla的衍生产品,如Netscape和Mozilla Firefox,但是现在已有很多其他软件利用这个排版引擎。此外Gecko也是一个跨平台内核,可以在Windows、BSD、Linux和Mac OS X中使用。
正在和曾经使用Gecko引擎的浏览器有Firefox、网景6~9、SeaMonkey、Camino、Mozilla、Flock、Galeon、K-Meleon、Minimo、Sleipni、Songbird、XeroBank。Google Gadget引擎采用的就是Gecko浏览器引擎。
WebKit 是一个开放源代码的浏览器引擎(Web Browser Engine),WebKit最初的代码来自KDE的KHTML和KJS(它们均为开放源代码,都是自由软件,在GPL协议下授权)。所以WebKit也是自由软件,同时开放源代码。它的特点在于源码结构清晰、渲染速度极快。主要代表产品有Safari和Google的浏览器Chrome。
WebKit内核在手机上的应用也十分广泛,例如Google的Android平台浏览器、Apple的iPhone浏览器、Nokia S60浏览器等所使用的浏览器内核引擎,都是基于WebKit引擎的。 WebKit内核也广泛应用于Widget引擎产品,包括中国移动的BAE、Apple的Dashboard以及Nokia WRT在内采用的均为WebKit引擎。
四、Presto内核(代表:Opera)
Presto是由Opera Software开发的浏览器排版引擎,供Opera 7.0及以上使用。它取代了旧版Opera 4至6版本使用的Elektra排版引擎,包括加入动态功能,例如网页或其部分可随着DOM及Script语法的事件而重新排版。Presto的特点就是渲染速度的优化达到了极致,它是目前公认的网页浏览速度最快的浏览器内核,然而代价是牺牲了网页的兼容性。
Presto实际上是一个动态内核,与Trident、Gecko等内核的最大区别就在于脚本处理上,Presto有着天生的优势,页面的全部或者部分都能够在回应脚本事件时等情况下被重新解析。此外该内核在执行JavaScript时有着最快的速度,根据同等条件下的测试,Presto内核执行同等JavaScript所需的时间仅有Trident和Gecko内核的约1/3。Presto是商业引擎,了Opera以外较少浏览器使用Presto内核,这在一定程度上限制了Presto的发展。
相关推荐
在早期版本的IE(如IE6、IE7)中,由于浏览器的兼容性问题,自定义滚动条样式并不完全支持,而从IE8开始,引入了`-ms-scrollbar`伪元素来允许一定程度的样式调整。然而,这些样式仅限于颜色、宽度和边框,不能像现代...
通过合理运用上述提到的各种CSS Hack技术和兼容性解决方案,可以有效地解决不同版本IE浏览器以及其他非IE浏览器之间的兼容性问题,从而确保网站在各种环境下都能够呈现出一致且良好的用户体验。
"commonInitialize.css"就是这样一个专门用于全局CSS样式初始化的文件。 首先,我们来理解一下什么是CSS样式初始化。每个浏览器都有自己的默认样式,这些样式可能会导致在不同的浏览器中展示同一网页时出现不一致的...
针对IE的不同版本,可以使用条件注释来加载特定的CSS文件: ```html <!--[if lt IE 7]> <link rel="stylesheet" type="text/css" href="ie6.css"> <![endif]--> ``` #### 引入前缀与后缀: 在CSS属性名前加上浏览器...
3. **CSS Hack**:对于某些简单的圆角效果,可以使用特定的CSS hack针对IE6-8编写样式,例如使用`expression`或`filter`属性。但这种方法并不推荐,因为它会导致代码复杂性增加,且性能较差。 4. **渐进增强**:...
Internet Explorer(IE)作为曾经的主流浏览器,尤其在IE9和IE10版本上,开发者常常会遇到CSS(层叠样式表)加载不上的问题。这主要是由于IE9和IE10对某些CSS特性支持不足以及对文件加载机制的差异导致的。本篇将...
在进行Web开发的过程中,我们经常会遇到浏览器兼容性问题,尤其是早期的Internet Explorer(IE)版本如IE6、IE7和IE8与现代浏览器如Firefox之间的差异。为了确保网站能够在不同浏览器下正常显示,开发者需要使用特定...
在网页开发过程中,CSS(层叠样式表)是不可或缺的一部分,用于定义页面的布局和样式。然而,由于各个浏览器对CSS规范的实现存在差异,尤其是IE(Internet Explorer)和Firefox,开发者经常面临样式兼容性问题。本文...
标题中的“ie-css3(让ie6 ie7 ue8支持css3).rar”指的是一个针对Internet Explorer(IE)浏览器的解决方案,尤其是版本6、7和8,这些版本不原生支持CSS3的新特性。这个压缩包包含了一个名为“ie-css3(让ie678支持css...
网页CSS样式采集 IE插件 IE CSS调制软件IEDevToolBarSetup(1).rar 如果你用过POST 或者GET发送数据截获类的软件就改知道了 很好用的ie插件,可以指哪里,就显示哪里的样式,前端必备! 并且可以存储网页中的任意部分...
在标题和描述中提到的"CSS插件 ie.rar",可能是一个压缩包,里面包含了专为IE浏览器优化或解决CSS兼容性问题的插件。"rar"是一种常见的压缩文件格式,用于打包多个文件或文件夹到一个单一的可下载文件中。在这个案例...
使用ie-css3.htc的方法很简单,只需要在CSS样式表中将ie-css3.htc文件作为行为(behavior)属性关联到需要CSS3效果的元素: ```css selector { behavior: url(/path/to/ie-css3.htc); /* 其他CSS3属性,如border-...
这样,只有IE8及以下版本的浏览器才会加载`ie8.css`文件。 2. **DOCTYPE声明**: 使用正确的DOCTYPE声明,如`<!DOCTYPE html>`,可以确保IE8在标准模式下工作,而非怪异模式。怪异模式会导致浏览器使用更旧的渲染...
通过以上分析可以看出,这套CSS通用样式集合覆盖了前端开发中常见的布局需求,如全局样式设置、文档结构样式、输入控件样式、列表样式、图片样式、链接样式、文本对齐方式以及其他常用样式。这些样式不仅能够帮助...
由于IE的不同版本对Web标准的支持程度不同,特别是对于CSS(层叠样式表)的解析和执行,开发者常常会遇到兼容性问题。例如,IE6、7、8对于盒模型、浮动、定位、渐变、阴影等CSS特性支持不足或者实现方式与其他现代...
然而,由于历史原因,尤其是较旧版本的Internet Explorer(IE)浏览器,对CSS3的支持并不完全,这给开发者带来了兼容性问题。本文将深入探讨如何通过一句JavaScript代码来解决IE对CSS3的兼容问题,并提供一个实际...
1. **创建.htc文件**:首先,你需要一个包含CSS3样式转换代码的`.htc`文件,如`ie-css3.htc`。这个文件通常包含一些JavaScript代码,用于实现IE不支持的CSS3特性,如渐变、阴影、圆角等。 2. **定义CSS类名**:在...
在某些情况下,可能仍需要针对特定的IE版本编写额外的CSS hack或者使用JavaScript进行样式调整。此外,随着IE浏览器逐渐被淘汰,开发者应该更加关注现代浏览器的标准兼容性,逐步减少对这些兼容库的依赖。 总之,ie...
标题中的“css样式表兼容总结,兼容火狐,ie6,ie7,FF”指的是在网页设计中,CSS样式表需要处理不同浏览器之间的兼容性问题,特别是老版本的Internet Explorer(IE6和IE7)以及Firefox。描述中的“css样式表火狐,ie6,ie...