`

IE,火狐,OPERA等浏览器CSS Hack和向后兼容

    博客分类:
  • Web
 
阅读更多

在解决兼容方法上,想定出一个统一的规范,个人认为应该以下面3点为基本原则:

权衡成本:在浏览器被淘汰后,如何快速清理掉无用代码 可维护:在资源成本和完美间平衡的向后兼容 可读:省力、易记 

这里把成本放在了第一位,并不是说我们不愿意追求完美,而只是,太刻意追求完美有时候可能会阻碍我们前进;在成本后,应该是可维护和可读,这点对于团队的合作来说至关重要,而最终结果也是为了减少成本。

先把这三个原则存起来,来看看我们平时解决兼容的写法(后面会附详细的Hack方法列表):

一、CSS 选择器 Hack/* Opera */

@media all and(-webkit-min-device-pixel-ratio:10000),not all and(-webkit-min-device-pixel-ratio:0)

{head~body .sofish{display:block;}} 

这种写法的优缺点是:

优点:全面,各种HACK都有;清理无用代码里易认 缺点:选择器名称不易记;代码量多(要重复写选择器) 二、CSS 属性 Hack.sofish {

        padding:10px;

        padding:9px\9;/* all ie */

        padding:8px\0;/* ie8-9 */

        *padding:5px;/* ie6-7 */

        +padding:7px;/* ie7 */

        _padding:6px;/* ie6 */

这种写法的优缺点是:

优点:易记;代码少 缺点:不全面 三、IE 注释<!--[if IE]>IE only<![endif]-->

<!--[if !IE]>NOT IE<![endif]--> 

这种写法的优缺点是:

优点:安全;向后兼容好;易维护 缺点:用不好会增加HTTP请求;用得好代码又多 四、浏览器探测:JS/后端程序判断// 以jQuery为例,检测是否是IE6,是则加上class="ie6"

if($.browser.msie && $.browser.version =6){

        $('div').addClass('ie6');

这种写法的优缺点是:

优点:全面;易维护;可读性高 缺点:占资源;代码量大(要重写选择器) 

上面4种是我们最常用的方法。现在,让我们抽出心里存着的那3个原则,看看如何选择。要时间思考一下么?这里简单地说一下我的选择:

尽量使用单独HACK 

这样维护起来成本比较低,改动不会影响其他的浏览器,而一旦有浏览器淘汰,只要搜索关键字,就可以批量去掉这些代码。比如,ie6的单独hack:_padding:6px;;

向后兼容的目标:1年 

你想现在的网站兼容IE10么,谁不想,但这可预见性太低了,也可以说,成本太高了。暂时没必要。不过,IE9可能要发布了,所以,选择像padding:8px\0;这样的IE8+的hack,在删掉其他代码不影响向后兼容上,会更好;并且,如果IE10出来,一旦支持这个hack,而又没有这个bug,可能删掉只影响2个浏览器,也会更方便;

尽可能省资源 

你要是不考虑页面加载速度,不考虑服务器承受能力的话,那在向后兼容和淘汰的处理上可以做得很完美(从代码上),但这从某种程度上,不如不做。

五、个人推荐写法 

其实可以纠结的还真多,这里结合A-Grade浏览器的种类和HACK的种类,写两种个人认为比较合理的HACK和向后兼容相兼顾的写法,仅供大家参考的。

经济实惠型写法:注重单独的HACK。 IE的HACK比较多,选择省力易记的属性HACK;其他浏览器HACK少,选择块状的选择器HACK(推荐)

.sofish {

        padding:10px;

        padding:9px\9;/* all ie */

        padding:8px\0;/* ie8-9 目前应用于IE8的单独hack,情况比较少 */

        *padding:5px;/* ie6-7 */

        +padding:7px;/* ie7 */

        _padding:6px;/* ie6 */

}

/* webkit and opera */

@media all and(min-width:0px){.sofish{padding:11px;}}

/* webkit */

@media screen and(-webkit-min-device-pixel-ratio:0){.sofish{padding:11px;}}

/* opera */

@media all and(-webkit-min-device-pixel-ratio:10000),not all and(-webkit-min-device-pixel-ratio:0){.sofish{padding:11px;}}

/* firefox * /

@-moz-document url-prefix(){ .sofish{padding:11px;}} /* all firefox */

html>/**/body .sofish, x:-moz-any-link, x:default{ padding:11px;}/* newest firefox */ 

准完美主义写法:配合IE注释,一律采用选择器HACK(选择性推荐)

HTML:添加body class

<!--[if IE6]--><body class="ie6"><![endif]-->

<!--[if IE7]--><body class="ie7"><![endif]-->

<!--[if IE8]--><body class="ie8"><![endif]-->

<!--[if IE9]--><body class="ie9"><![endif]-->

<!--[if!IE]--><body class="non-ie"><![endif]-->.sofish { padding:10px;}

.non-ie .sofish { padding:12px;}

.ie9 .sofish { padding:9px;}

.ie8 .sofish { padding:8px;}

.ie7 .sofish { padding:7px;}

.ie6 .sofish { padding:6px;}

/* webkit and opera */

@media all and(min-width:0px){.sofish{padding:11px;}}

/* webkit */

@media screen and(-webkit-min-device-pixel-ratio:0){.sofish{padding:11px;}}

/* opera */

@media all and(-webkit-min-device-pixel-ratio:10000),not all and(-webkit-min-device-pixel-ratio:0){.sofish{padding:11px;}}

/* firefox */

@-moz-document url-prefix(){.sofish{padding:11px;}}/* all firefox */

html>/**/body .sofish, x:-moz-any-link, x:default{ padding:11px;}/* newest firefox */ 

然后,从第二种方式我们也可以发现。把IE注释用在body class上,而不是添加单独的<link />或者@import会是更好的选择。虽然分文件也是一种不错的选择,但了为页面加载速度,HTTP请求一个都不能浪费。

至于利用JS或者后端程序来判断,除非你有足够的资源,除非你解决不了(90%不会发生),不然,并不推荐用。附上一个表(via),可以参考参考:

六:全面的IE6+ / Firefox / Webkit / Opera CSS HACK列表:/***** Selector Hacks ******/

/* IE6 and below */

* html #uno  { color: red }

/* IE7 */

*:first-child+html #dos { color: red }

/* IE7, FF, Saf, Opera  */

html>body #tres { color: red }

/* IE8, FF, Saf, Opera (Everything but IE 6,7) */

html>/**/body #cuatro { color: red }

/* Opera 9.27 and below, safari 2 */

html:first-child #cinco { color: red }

/* Safari 2-3 */

html[xmlns*=""] body:last-child #seis { color: red }

/* safari 3+, chrome 1+, opera9+, ff 3.5+ */

body:nth-of-type(1)#siete { color: red }

/* safari 3+, chrome 1+, opera9+, ff 3.5+ */

body:first-of-type #ocho { color: red }

/* saf3+, chrome1+ */

@media screen and(-webkit-min-device-pixel-ratio:0){

        #diez  { color: red }

}

/* iPhone / mobile webkit */

@media screen and(max-device-width:480px){

        #veintiseis { color: red }

}

/* Safari 2 - 3.1 */

html[xmlns*=""]:root #trece  { color: red }

/* Safari 2 - 3.1, Opera 9.25 */

*|html[xmlns*=""]#catorce { color: red } 

/* Everything but IE6-8 */

:root *>#quince { color: red }

/* IE7 */

*+html #dieciocho { color: red }

/* Firefox only. 1+ */

#veinticuatro,  x:-moz-any-link  { color: red }

/* Firefox 3.0+ */

#veinticinco,  x:-moz-any-link, x:default  { color: red }

/***** Attribute Hacks ******/

/* IE6 */

#once { _color: blue }

/* IE6, IE7 */

#doce { *color: blue; /* or #color: blue */ }

/* Everything but IE6 */

#diecisiete { color/**/: blue }

/* IE6, IE7, IE8 */

#diecinueve { color: blue\9; }

/* IE7, IE8 */

#veinte { color/*\**/: blue\9; }

/* IE6, IE7 -- acts as an !important */

#veintesiete { color: blue !ie; } /* string after ! can be anything */ 

其他的就不多说了。不过,还是要提醒一下: 注释也是很重要的。虽然是HACK了,但现实中情况有时候比想象中的复杂得多,给代码一个注释,好过千言万语。

最后,还是那句,希望看到你更好的方法!

分享到:
评论

相关推荐

    CSS兼容大全IE5,IE5.5,IE6,IE7,Firefox,Opera,Safari等浏览器

    CSS 兼容大全 IE5,IE5.5,IE6,IE7,Firefox,Opera,Safari 等浏览器 CSS 兼容大全是指在不同的浏览器中,例如 IE5,IE5.5,IE6,IE7,Firefox,Opera,Safari 等,如何使网页正常显示的技术。这个技术的核心是 CSS Hack,即...

    H5 CSS hack 和浏览器内核

    浏览器内核是解析和渲染网页内容的核心组件,常见的有Trident(IE)、Gecko(Firefox)、Webkit(Safari, Chrome)和Blink(Chrome, Opera)。每种内核对CSS的解析方式和对新特性的支持程度都有所不同,导致了CSS ...

    IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表

    "IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表" 提供了一个宝贵的资源,帮助开发者解决在不同浏览器之间存在的CSS样式差异。下面我们将深入探讨这个话题,了解各种CSS hack及其在这些浏览器中的表现。 ...

    ie6、ie7、ie8、ie9、ie10、firefox、google chrome浏览器Hack及兼容性演示页面

    这里我们将深入探讨标题中提到的`ie6`到`ie10`以及`Firefox`和`Google Chrome`浏览器的兼容性问题,以及它们所基于的`Gecko`和`WebKit`内核。 首先,`IE6`至`IE10`是微软公司推出的一系列Internet Explorer浏览器,...

    浏览器兼容.doc-CSS hack姐姐兼容性问题

    然而,针对IE6、IE7、Firefox、Chrome、Opera等其他浏览器的兼容性问题,我们需要使用更复杂的CSS Hack。以下是一个示例: ```css .t1 { color: #000000; *color: #0000FF; /* 仅IE7识别 */ _color: #66CCCC; /*...

    简单CSShack:区分IE6、IE7、IE8、Firefox、Opera().pdf

    在《简单CSShack:区分IE6、IE7、IE8、Firefox、Opera》中,作者介绍了两种主要的方法来针对这些浏览器进行CSS样式区分。 方法一主要依赖于特殊的CSS选择器来区分浏览器。以下是对四种特殊符号的测试结果: 1. `&gt;`...

    各浏览器的cssHack总结

    首先,我们了解下主要的浏览器:IE(Internet Explorer)、Firefox、Chrome、Safari以及Opera。它们之间的兼容性问题主要源于对CSS规范的不同理解和实现,特别是早期版本的IE。 1. **IE浏览器的CSS Hack** - IE6和...

    css兼容与差别 IE6,IE7,IE8,FireFox,Opera,Safari.doc

    标题和描述中的文档"css兼容与差别 IE6,IE7,IE8,FireFox,Opera,Safari.doc"主要探讨的是如何解决这些浏览器中的CSS兼容性问题。 1. **浮动(float)**:在示例代码中,我们可以看到针对不同浏览器的浮动样式设置。`...

    同浏览器CSS样式兼容问题

    除了上述方法,还可以考虑使用CSS前缀,如`-webkit-`、`-moz-`、`-ms-`、`-o-`等,这些前缀分别对应Chrome/Safari、Firefox、IE和Opera浏览器,以确保特定CSS功能在各个浏览器中的兼容性。 此外,使用CSS预处理器...

    日期控制支持火狐 ie opera等多浏览器(java和ASPnet 通用)

    标题提到的资源提供了对火狐(Firefox)、IE(Internet Explorer)以及Opera等多浏览器支持的日期控件解决方案,适用于Java和ASP.NET两种后端技术。 1. **跨浏览器兼容性**: - **火狐**:Firefox使用Gecko内核,...

    各浏览器下Hack的写法

    为了确保网页在各种浏览器中的兼容性和一致性,开发者有时需要使用特定的“Hack”技巧来修正这些差异。以下是针对各主流浏览器的一些CSS Hack写法: 1. **Firefox**: 使用`@-moz-document url-prefix()`来为Fire...

    csshack最新的css作品展示

    1. 浏览器兼容性:不同浏览器对CSS的支持程度和解析方式存在差异,如IE、Firefox、Chrome、Safari和Opera等。CSS Hack帮助开发者解决这些差异,确保网站在所有主流浏览器中的表现一致。 2. CSS版本差异:CSS规范...

    CSS hack汇总

    ### CSS Hack 汇总:解决 IE6,IE7,IE8 及 Firefox 的兼容性问题 在网页设计与开发领域,确保不同浏览器间的代码兼容性是一项挑战性的任务,尤其是在处理像 Internet Explorer 6(IE6)、IE7、IE8 和 Firefox 这些...

    ie chrome firefox 兼容

    在上面的代码中,如果用户使用的是 Firefox、Chrome、Opera 或 Safari 浏览器,那么将跳转到指定的 URL 否则,将跳转到另外的 URL。 浏览器兼容性处理是 Web 开发中一个非常重要的问题,因为不同的浏览器可能会有...

    CSS浏览器兼容性的各种代码解决方案

    由于不同浏览器(如IE6.0、IE7.0、Firefox2、Opera9等)对CSS的解析存在差异,这可能导致同一网页在不同浏览器下呈现的效果各异,从而影响用户体验。为了解决这一问题,广泛采用的一种策略是CSS Hack,即通过特定的...

    web前端规范之CSSHack.pdf

    Webkit阵型则涵盖Firefox、Chrome、Safari和Opera等,它们遵循更现代的CSS标准。 **国内与国外的浏览器使用情况** 在中国,由于历史原因,Windows操作系统和IE浏览器的广泛使用导致大部分用户倾向于使用基于IE内核...

    兼容所有浏览器的CSS3圆角

    对于其他不完全支持CSS3的浏览器,如早期版本的Firefox、Safari、Chrome和Opera,我们可以使用私有前缀 `-webkit-`、`-moz-`、`-ms-` 和 `-o-` 来覆盖它们的默认样式: ```css .box { -webkit-border-radius: 10px...

    web前端规范之CSSHack[总结].pdf

    而Webkit阵营则包括Firefox、Chrome、Safari和Opera等,其中Chrome的市场份额已超过IE。 由于中国市场的特殊性,许多国内用户仍然使用IE内核的浏览器,尤其是旧版本。然而,随着技术的发展,一些新版本的国产浏览器...

    CSS-浏览器兼容实战.pdf

    书中还详细讲解了各种浏览器的特点,包括IE系列(如IE6、IE7、IE8、IE9)以及非IE浏览器(如Firefox、Safari、Opera、Chrome),并分析了它们对CSS支持的差异。 CSS的浏览器兼容性问题主要体现在滤镜、透明度、伪类...

    CSS Hack(Safari、Opera、Firefox3和IE7)

    本文将重点介绍针对Safari、Opera、Firefox 3以及IE7的CSS Hack。 1. **仅 Safari 和 Opera 识别的 Hack** Safari 和 Opera 浏览器通常对CSS新特性有较好的支持,但它们在某些方面存在独特的解析方式。可以利用`@...

Global site tag (gtag.js) - Google Analytics