- 浏览: 404248 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
goahead2010:
有用
JS遍历对象或者数组 -
bishibaodian:
不要在这样找笔试题了,一次就这么几个,还没过瘾就没有了,去安装 ...
整理了一份招PHP高级工程师的面试题 -
smallearth:
不错
整理了一份招PHP高级工程师的面试题 -
ipodao:
暂时没发现啊!
IE域名带有下划线导致的session丢失 -
ipodao:
谢了
JS遍历对象或者数组
在解决兼容方法上,想定出一个统一的规范,个人认为应该以下面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了,但现实中情况有时候比想象中的复杂得多,给代码一个注释,好过千言万语。
最后,还是那句,希望看到你更好的方法!
发表评论
-
年月日三级联动菜单
2012-09-05 16:01 1674<html xmlns="http:// ... -
javascript中创建对象的几种方式
2012-09-05 13:25 1011随着web 2.0 的兴起(最具代表性的是Aja ... -
清除js缓存
2012-07-20 18:26 5281客户端有一个HTML文件,是用来提交输入信息的.但问 ... -
JS操作cookie
2012-07-20 16:56 902var Cookie=new Object(); C ... -
iframe下的cookie设置
2012-07-11 22:05 1952http://viralpatel.net/blogs/how ... -
IE域名带有下划线导致的session丢失
2012-07-11 22:01 1549IE下如果域名包含_ 则会导致之前session存入的信息丢失 ... -
Iframe父页面和子页面之间的JS调用
2012-07-11 21:59 19901.index.html <!DOCTYPE h ... -
CSS3的一些特效
2012-04-25 14:28 726http://www.cnblogs.com/damonlan ... -
js中undefined,null,NaN的区别
2012-03-31 11:25 33401.类型分析: js中的数据类型有undefined, ... -
jQuery---循环滚动新闻列表
2012-03-09 11:29 913Demo1:http://www.cssrain.cn/dem ... -
html提交表单中input image和img
2012-02-29 18:16 163761.<input type="image&qu ... -
DTD文件定义
2012-02-29 22:27 866DTD文件定义 一个DT ... -
doctype声明、浏览器的标准、怪异等模式
2012-02-08 22:26 1755群里看到一个面试题,doctype 标准(严格)模式(S ... -
Javascript正则表达式
2012-02-07 22:13 749创建一个正则表达 ... -
HTTP协议
2012-02-01 16:29 916引言 HTTP协议我想任何IT 人士都耳熟能详了 ... -
Zend Studio中安装Aptana及几个配置说明
2012-01-29 11:51 950Zend Studio加Aptana的完美结合.我想,无 ... -
10 个很棒的 jQuery 代码片段
2011-11-25 17:42 839图片预加载 (function($) { var ca ... -
HTTP session cookie原理及应用
2011-09-24 14:55 2152PHP 的COOKIE coo ... -
CSS子选择器
2011-09-14 17:04 913<html> <head> < ... -
ajax提交表单
2011-09-14 17:02 911示例代码如下: <html> <he ...
相关推荐
CSS 兼容大全 IE5,IE5.5,IE6,IE7,Firefox,Opera,Safari 等浏览器 CSS 兼容大全是指在不同的浏览器中,例如 IE5,IE5.5,IE6,IE7,Firefox,Opera,Safari 等,如何使网页正常显示的技术。这个技术的核心是 CSS Hack,即...
浏览器内核是解析和渲染网页内容的核心组件,常见的有Trident(IE)、Gecko(Firefox)、Webkit(Safari, Chrome)和Blink(Chrome, Opera)。每种内核对CSS的解析方式和对新特性的支持程度都有所不同,导致了CSS ...
"IE6/IE7/IE8/Firefox/Chrome/Safari的CSS hack兼容一览表" 提供了一个宝贵的资源,帮助开发者解决在不同浏览器之间存在的CSS样式差异。下面我们将深入探讨这个话题,了解各种CSS hack及其在这些浏览器中的表现。 ...
这里我们将深入探讨标题中提到的`ie6`到`ie10`以及`Firefox`和`Google Chrome`浏览器的兼容性问题,以及它们所基于的`Gecko`和`WebKit`内核。 首先,`IE6`至`IE10`是微软公司推出的一系列Internet Explorer浏览器,...
然而,针对IE6、IE7、Firefox、Chrome、Opera等其他浏览器的兼容性问题,我们需要使用更复杂的CSS Hack。以下是一个示例: ```css .t1 { color: #000000; *color: #0000FF; /* 仅IE7识别 */ _color: #66CCCC; /*...
在《简单CSShack:区分IE6、IE7、IE8、Firefox、Opera》中,作者介绍了两种主要的方法来针对这些浏览器进行CSS样式区分。 方法一主要依赖于特殊的CSS选择器来区分浏览器。以下是对四种特殊符号的测试结果: 1. `>`...
首先,我们了解下主要的浏览器:IE(Internet Explorer)、Firefox、Chrome、Safari以及Opera。它们之间的兼容性问题主要源于对CSS规范的不同理解和实现,特别是早期版本的IE。 1. **IE浏览器的CSS Hack** - IE6和...
标题和描述中的文档"css兼容与差别 IE6,IE7,IE8,FireFox,Opera,Safari.doc"主要探讨的是如何解决这些浏览器中的CSS兼容性问题。 1. **浮动(float)**:在示例代码中,我们可以看到针对不同浏览器的浮动样式设置。`...
除了上述方法,还可以考虑使用CSS前缀,如`-webkit-`、`-moz-`、`-ms-`、`-o-`等,这些前缀分别对应Chrome/Safari、Firefox、IE和Opera浏览器,以确保特定CSS功能在各个浏览器中的兼容性。 此外,使用CSS预处理器...
标题提到的资源提供了对火狐(Firefox)、IE(Internet Explorer)以及Opera等多浏览器支持的日期控件解决方案,适用于Java和ASP.NET两种后端技术。 1. **跨浏览器兼容性**: - **火狐**:Firefox使用Gecko内核,...
为了确保网页在各种浏览器中的兼容性和一致性,开发者有时需要使用特定的“Hack”技巧来修正这些差异。以下是针对各主流浏览器的一些CSS Hack写法: 1. **Firefox**: 使用`@-moz-document url-prefix()`来为Fire...
1. 浏览器兼容性:不同浏览器对CSS的支持程度和解析方式存在差异,如IE、Firefox、Chrome、Safari和Opera等。CSS Hack帮助开发者解决这些差异,确保网站在所有主流浏览器中的表现一致。 2. CSS版本差异:CSS规范...
### CSS Hack 汇总:解决 IE6,IE7,IE8 及 Firefox 的兼容性问题 在网页设计与开发领域,确保不同浏览器间的代码兼容性是一项挑战性的任务,尤其是在处理像 Internet Explorer 6(IE6)、IE7、IE8 和 Firefox 这些...
在上面的代码中,如果用户使用的是 Firefox、Chrome、Opera 或 Safari 浏览器,那么将跳转到指定的 URL 否则,将跳转到另外的 URL。 浏览器兼容性处理是 Web 开发中一个非常重要的问题,因为不同的浏览器可能会有...
由于不同浏览器(如IE6.0、IE7.0、Firefox2、Opera9等)对CSS的解析存在差异,这可能导致同一网页在不同浏览器下呈现的效果各异,从而影响用户体验。为了解决这一问题,广泛采用的一种策略是CSS Hack,即通过特定的...
Webkit阵型则涵盖Firefox、Chrome、Safari和Opera等,它们遵循更现代的CSS标准。 **国内与国外的浏览器使用情况** 在中国,由于历史原因,Windows操作系统和IE浏览器的广泛使用导致大部分用户倾向于使用基于IE内核...
对于其他不完全支持CSS3的浏览器,如早期版本的Firefox、Safari、Chrome和Opera,我们可以使用私有前缀 `-webkit-`、`-moz-`、`-ms-` 和 `-o-` 来覆盖它们的默认样式: ```css .box { -webkit-border-radius: 10px...
而Webkit阵营则包括Firefox、Chrome、Safari和Opera等,其中Chrome的市场份额已超过IE。 由于中国市场的特殊性,许多国内用户仍然使用IE内核的浏览器,尤其是旧版本。然而,随着技术的发展,一些新版本的国产浏览器...
书中还详细讲解了各种浏览器的特点,包括IE系列(如IE6、IE7、IE8、IE9)以及非IE浏览器(如Firefox、Safari、Opera、Chrome),并分析了它们对CSS支持的差异。 CSS的浏览器兼容性问题主要体现在滤镜、透明度、伪类...
本文将重点介绍针对Safari、Opera、Firefox 3以及IE7的CSS Hack。 1. **仅 Safari 和 Opera 识别的 Hack** Safari 和 Opera 浏览器通常对CSS新特性有较好的支持,但它们在某些方面存在独特的解析方式。可以利用`@...