接着上一篇,统一思想,遵循标准。如何遵循标准,其实标准有很多,结构标准,表现标准,行为标准。选择标准规范,就优先选择w3c推荐的标准。
结构标准可选项
看下维基百科的html推荐标准都有哪些:
http://zh.wikipedia.org/wiki/html#html
n多标准,建议选择适合你公司和团队的标准,其实核心理念还是让项目统一遵循一个标准,严格的xhtml是这样的。
<?xml version="1.0" encoding="utf-8"?>
<!doctype html
public "-//w3c//dtd xhtml 1.0 strict//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>virtual library</title>
</head>
<body>
<p>moved to <a href="example.org.http://example.org/">example.org</a>.</p>
</body>
</html>
xhtml的媒体类型是application/xhtml+xml ,而不是被大多设备都识别的text/html。增加xml头部声明还会造成ie6的quirks模式。总得来说,不是通用性很强的标准,使用的时候需要舍弃w3c的一些说明,改良后的应该是去掉xml声明,去掉媒体类型是application/xhtml+xml。不要给你们团队的开发造成不必要的困扰。
<!doctype html
public "-//w3c//dtd xhtml 1.0 strict//en"
"http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd">
<html lang="en-us" xml:lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>introduction to html</title>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>
<body>
</body>
</html>
我这里建议选择xhtml1.0标准的过渡型,如果你觉得xhtml过于花俏,不适用,html4.0的严格型也是很好的选择。html2.0已经被html5所取代,貌似看起来html4还是更具有向后的延续性。
|||
其实上面所说的,也就是让w3c标准兼容终端,本应该终端按照w3c规范来开发解析器,但是种种的原意,终端各持己见,置w3c标准于不顾,而用户体验永远是第一位的。所以我们既然遵循标准,又要兼容终端。
我们不是标准的制定者,仅仅是实施者。就要考虑到项目的用户群体的特性,使用哪个终端多一点,显而易见,ie6的使用者仍然是大多数的。而且xhtml的严格定义方式不符合ie6的解析方式。通过权衡,即选择了w3c的推荐标准,虽然不是最新的,也兼容了现有终端的情况。
废话有点多了,概要的说明一下,选择一个适合项目大多数用户终端的标准,就html来说,4.0和xhtml1.0(改良后)都是不错的,但是要遵循html的结构化和语义化的要求,标签必须小写,闭合合理,嵌套正确,摒弃表现型标记,结构代码和表现代码分离。html1.0也可以编写成xml结构化的状态,即时没有xml声明。
css是最头疼的一块,如果严格按照w3c的css2.1规范,是很难兼容到ie系列浏览器的,特别是ie5.5 ie6两种,他们的解析和w3c相差甚远,所以css文件就必须进入hack,一种是css自身的私有属性和私有识别的代码,一种是ie浏览器特有的条件注释。细节就不多讲了。
如何既遵循标准,有兼容浏览器。那就是使用符合标准或者近似符合的浏览器作为主要开发软件,我建议安装有firebug插件的firefox作为第一个调试工具,等界面完成后,再调试其他浏览器,通过csshack或者条件注释,或者两者混搭。
理想的css兼容方案是,ie8,firefox这类通过acid2 测试的浏览器使用标准的css代码,对没有通过测试的(就是ie系列)使用条件注释。例如:
<link rel="stylesheet" type="text/css" href="w3c.css" />
<!--[if ie 7]>
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->
<!--[if lt ie 7]>
<link rel="stylesheet" type="text/css" href="ie7lt.css" />
<![endif]-->
ie5.5的份额太少,可以考虑不兼容,兼容也主要是盒模型上的兼容。
理想的终究会存在很多现实的问题,比如ie的请求数过多,这是速度上的损失,代码维护不方面,同一个页面需要维护多个css文件,容易产生遗漏,避免这两个因素,css hack是做好的方式,主样式+私有样式解决兼容问题。
针对ie,常见bug的处理,haslayout的触发,放在标准css代码的后面。比如:
.clearfix:after{content:"/0020"; display:block; height:0; clear:both;}
.clearfix{*zoom:1;/*ie haslayout*/}
.box {float:left;margin-left:20px;_display:inline;/*双倍margin bug*/}
以后的浏览器对css的处理都采用w3c css2.1规范为主,私有属性为辅的策略,比如firefox的-moz-,ie8的-ms-,sefari和chrome的-webkit-,opera的-o-。
javascript的标准兼容终端,我不是很清楚,基本的还可以看出,应用w3c的dom操作文档树,而不是ie的document.all,摒弃ie的jscript和vbscript。而且js是可以去判断终端的,实例:
var ua = navigator.useragent.tolowercase();
var _isopera = ua.indexof('opera') != -1,
_issafari = ua.indexof('safari') != -1,
_isgecko = !_isopera && !_issafari && ua.indexof('gecko') > -1,
_isie = !_isopera && ua.indexof('msie') != -1,
_isie6 = !_isopera && ua.indexof('msie 6') != -1,
_isie7 = !_isopera && ua.indexof('msie 7') != -1;
通过终端的判断,给ie开小灶,解决ie 的兼容问题。
if (_isie6) { // ie6
//语句
}
dhtml的历史远远大于现在所说的富客户端,很多经验组建都源自于早期的ie平台上的dhtml,如何保持js主体代码的标准化和对ie系列的兼容,我自己还需要再积累积累。
最后,为什么很多团队要求将firefox作为开发环境,待代码完成后再进行ie系列的bug调试。就是基于这个思想,先按照w3c标准规范编码,再处理对标准支持不好的浏览器的。这样你才能理解为什么把ie的错误解析成为bug,而且页面工程师的教材也接近统一,那就是w3c的文档,那是我们权威的教材。向后,终端都尊重了w3c标准,ie8就是很好的例子。
新闻热点
疑难解答