




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WEB前端标准在各浏览器中的实现差异貘2010-08-28欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍标准都说了什么?文档格式:HTML布局:CSS与宿主环境有关脚本语言:Javascript文档操作方式:DOM欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE的hasLayout与BlockFormattingContext规范异同linebox与InlineFromattingContexts的理解DOMAttributes与JSObject差异tracemonkey的脚本优化HTTP头内编码声明在浏览器内的容错影响主要话题IEHASLAYOUT
AND
BLOCKFORMATTINGCONTEXTS
欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍'Layout'是IE的专有概念,它决定了元素如何对其内容进行定位和尺寸计算,与其他元素的关系和相互作用,以及对应用还有使用者的影响。MSDN"HasLayout"Overview:/en-us/library/bb250481(VS.85).aspxIE的haslayout与BlockFormattingContexts规范异同BlockFormattingContexts(块格式化上下文)是W3CCSS2.1规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。在BFC中,每一个元素左外边与包含块的左边相接触(对于从右到左的格式化,右外边接触右边),即使存在浮动也是如此(尽管一个元素的内容区域会由于浮动而压缩),除非这个元素也创建了一个新的BFC。浮动元素、绝对定位元素、inline-blocks、table-cells、table-captions以及'overflow'值不是'visible'的元素,会创建BFC。【注】:CSS3中,将Blockformattingcontexts叫做flowroot。对于触发方式也做了修改:Thevalueof‘position’isneither‘static’nor‘relative’见[CSS3]:/TR/css3-box/#block-level0欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE的hasLayout与BlockFormattingContexts规范异同在触发hasLayout的元素和创建了BlockFormattingContexts的元素中,浮动元素参与高度的计算。【注】:IE8标准文档模式下触发了haslayout特性的元素不再拥有"清理"浮动元素功能,它回归了标准的BlockFormattingContexts规范
,只有创建BFC后才拥有此功能。<divstyle="width:300px;background:gray;overflow:auto;"> <divstyle="float:left;background:gold;">float:left</div></div>包含浮动元素特性(浮动清理):<divstyle="width:300px;background:gray;"> <divstyle="float:left;background:gold;">float:left</div></div>欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE的hasLayout与BlockFormattingContexts规范异同不能与浮动元素相互覆盖特性:<divstyle="width:300px;height:150px;background:gray"><divstyle="float:left;background:gold;margin:010px;">FloatBlock</div><divstyle="background:green;zoom:1;">BlockFormattingContent/haslayout</div></div><divstyle="width:300px;height:150px;background:gray"><divstyle="float:left;background:gold;margin:010px;">FloatBlock</div><divstyle="background:green;overflow:auto;">BlockFormattingContent/haslayout</div></div>欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE的hasLayout与BlockFormattingContexts规范异同不能与浮动元素相互覆盖特性:在触发hasLayout的元素和创建了BlockFormattingContexts的元素中,浮动元素参与高度的计算。【注】:IE8标准文档模式下zoom:1不再触发haslayout特性。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍在标准文档模式中,合理利用blockformatingcontext与IE的haslayout特性实现两列文字布局。IE的hasLayout与BlockFormattingContexts规范异同<style>*{margin:0;padding:0;font-size:14px;}ol{list-style:none;width:200px;}olli{overflow:hidden;}ollistrong{float:left;}ollip{_display:inline;overflow:auto;zoom:1;}/*用inlinehack修复IE6bug*/</style><ol><li><strong>内容:</strong><p>“地球一小时”</p></li><li><strong>内容.内容:</strong><p>“地球一小时”</p></li><li><strong>内容.容:</strong><p>“地球一小时”</p></li><li><strong>内容.内容.内容:</strong><p>“地球一小时”</p></li></ol>欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍利用BFC和hasLayout清理LI容器内浮动元素,并利用BFC和haslayout区域不与浮动框重合的特性,简单的实现两列文字布局。IE的hasLayout与BlockFormattingContexts规范异同LINEBOX
AND
INLINEFROMATTINGCONTEXT欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍LineBox与InlineFromattingContext欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍LineBox是个计算值,它由line-height(height)和vertical-align特性值共同决定的,多个LineBoxs构成了行内格式化上下文每一个行内元素会产生一个行内框;行内框会在行框内横向排列;'line-height'特性值指定了每个行内非替换元素生成的行内框的
确切
高度;行内替换元素的高度由'height'特性值决定;文字在行内框中垂直排列,上下空隙用半差异填补;如果字号大于行内框则文字从上下方向上溢出行内框,并可能渗入到其他行框内(行框是永远不会重叠的);'vertical-align'特性值指定了每个行内框的垂直对齐方式;行框的顶边界是这一系列垂直对齐的行内框最高的顶边框,底边界是最低的底边框。行框的高度是顶边界到底边界的距离。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍正常LineBox计算示意图欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE6IE7IE8(Q)下LineBox计算错误错误的计算正确的计算欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍IE6IE7IE8(Q)下LineBox计算错误正确的计算错误的计算DOMATTRIBUTES
AND
JAVASCRIPTPROPERTY欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍DOMAttributes欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍这需要从DOM-Level-2的附录D说起:AppendixD:ECMAScriptLanguageBinding根据W3CDOM规范附录中DOM对象与ECMAScript规范中对象的绑定关系可知,DOM本身是一套接口实现,调用相应的方法或取得相应的属性,其返回值是严格遵循DOM本身规范的。而ECMAScript规范中描述的对象类型有其自身意义范畴,当使用ECMAScript语法调用DOM是需要将两者提供的不同对象类型间的绑定。比如某DOM方法返回一个Element对象,他被绑定到ECMAScript中一个对象(Object)上,如果对这个Object某属性进行赋值和取值操作,究竟是对Object对象本身属性还是对Element对象属性做相关操作呢?这就产生了二意性。由此DOM规范中提供了getAttribute与setAttribute方法用来明确为Element对象属性做赋值取值操作。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍这两者是绑定关系,但是他们都有相应的方法设置、修改和删除属性。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍HTMLELEMENT=HTML的标签属性(ElementAttribute)+JS对象内属性(ObjectProperty)<ElementAttributes/>+{JSObject:Propertys}DOMObject.*Attribute?方法用来对Element内String型属性进行处理DOMObject.*方法用来对JSObjecte内property属性进行处理欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍<divid="A"></div><script>varA=document.getElementById("A");A.setAttribute("myAttribute","DOMAttribute")A.myAttribute="ObjectProperty";A.innerHTML=A.getAttribute("myAttribute")+":"+A.myAttribute;</script>IE6IE7IE8print:ObjectProperty:ObjectPropertyotherprint:DOMAttribute:ObjectPropertyIE8以及以下版本浏览器中混淆了DOMAttribute和ObjectProperty导致以上问题出现。TRACEMONKEY
SCRIPTOPTIMIZATION欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的脚本优化欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey就是Firefox的脚本引擎啦~~functionfoo(){return2+4};alert(foo);Firefoxprint:functionfoo(){return6}otherprint:functionfoo(){return2+4};欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式逻辑语句中的函数定义会被转换为函数表达式,这与它本身的优化机制还有关系。先来看对逻辑语句的优化:functionfoo(){if(true){functionA(){alert('A')}}else{functionA(){alert('B')}}A();}foo();alert(foo);欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式Firefoxprint:Afunctionfoo(){functionA(){alert("A");}A();}otherprint:Bfunctionfoo(){if(true){functionA(){alert('A')}}else{functionA(){alert('B')}}A();}Firefox中不可能被运行到的分支被优化掉了。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式规避其优化策略,可以使用计算值代替TRUE。使用计算值避免Firefox对逻辑语句的优化:functionfoo(){if(1===1){functionA(){alert('A')}}else{functionA(){alert('B')}}A();}foo();alert(foo);这样Firefox就不会优化代码内容了
。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式这就没问题了么?还是看看结果吧:!!??!!无语了==botherprint:Bfunctionfoo(){if(1===1){functionA(){alert('A')}}else{functionA(){alert('B')}}A();}Firefoxprint:Afunctionfoo(){if(1===1){functionA(){alert('A')}}else{functionA(){alert('B')}}A();}欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式实际上问题是这样的:JS引擎在处理脚本程序之前会对内容作语法整理,由于JS内没有块级作用域,函数声明会被提高到当前执行块(Global或Function)的顶端执行。语法树整理后代码:functionfoo(){functionA(){alert('A')};functionA(){alert('B')};if(1===1){}else{}A();}同名函数A覆盖前面的函数A,导致执行结果为B。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍tracemonkey的条件函数表达式tracemonkey则处理的不是这么"规范"。这个引擎太聪明了,它认为条件语句内的函数声明应该是函数表达式,因此并不将其进行比要的语法整理。tracemonkey语法树整理后代码:functionfoo(){varA;if(1===1){A=function(){alert('A')};}else{A=function(){alert('B')};}A();}同名函数表达式存在于不同分支语句中,并不产生覆盖/重写效果,实际结果为A。ENCODINGDECLARATION
INTHEBROWSERAFFECTS
THEFAULT-TOLERANT欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍编码声明在浏览器内的容错影响确定一个文档的字符编码的优先级顺序(由高至低):HTTP"Content-Type"字段中的"charset"参数。
Content-Type:text/html;charset=ISO-8859-1META声明中"http-equiv"为"Content-Type"对应的值中的"charset"的值。
<METAhttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">元素的charset属性。
<scriptcharset="iso-8859-1"src="XXX"></script>我们通常情况下为页面设定的字符编码信息所指对应到浏览器内部大多是字符编码别名,如ISO-8859-1。指定了浏览器无法识别的字符编码别名时,浏览器参照上面的优先级顺序采用更低优先级的字符编码,以此类推。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍编码声明在浏览器内的容错影响各浏览器对于没有任何字符编码设定的页面所采用的编码类型:<!DOCTYPEhtml><html><head></head><body><script>document.write((document.charset||document.characterSet).toUpperCase());</script></body></html>IE6IE7IE8FirefoxChromeSafariOpera字符编码---GB2312×Ö·û±àÂë---ISO-8859-1字符编码---GBK操作系统及浏览器语言均为简体中文。页面中没有设定任何的字符编码信息,页面自身的编码为
GB2312。当页面没有设置任何字符编码信息或者浏览器无法识别HTTP头字段以及META元素中所声明的字符编码信息时,所有浏览器均会以各自在当前语言版本下的默认字符编码显示页面。因为页面自身的编码为
GB2312,则Windows平台下
IEFirefoxOpera
简体中文版的默认字符编码刚好为
GB2312,所以页面中的字符显示正常。欢迎到CSDN的跨浏览开发论坛发帖^_^版主WebAdvocate
很彪悍编码声明在浏览器内的容错影响看一组特殊的例子:<?phpheader("Content-Type:text/html;charset=maccyrillic");?><!DOCTYPEHTML><html><head><metahttp-equiv="Content-Type"content="text/html;charset=b.i.g+5"/></head><bodystyle="font:24pxTahoma;">字符編碼---<script>document.write((document.charset||document.characterSet).toUpperCase());</script></body></html>IE6IE7IE8FirefoxChromeSafariOpera才絪絏---GB2312¶r≤≈љsљX---X-MAC-CYRILLIC字符編碼---BIG5动态页面自身的编码为
BIG5。IEFirefox
无法识别maccyrillic,也无法识别b.i.g+5,继而采用了当前语言版本的默认编码GB2312,与页面自身的字符编码
BIG5
不相符,导致页面中的文字显示异常。ChromeSafari
识别maccyrillic为合法的X-MAC-CYRILLIC。不再理会更低优先级的编码设置。Opera
无法识
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服装店装修发包合同
- 2025年度养猪场生物安全防控体系建设合同
- 2025年度劳动合同到期解除协议书及离职员工离职证明及离职手续办理指南
- 2025年度建筑劳务施工节能减排合作协议
- 2025年度分红股收益分配与权益变更协议
- 2025年度数据保密审计与保密合同
- 2025年度公司免责的旅游服务合作协议
- 2025年度创业公司股权激励及转让协议
- 2025年网络游戏行业发展现状分析:网络游戏国内用户规模不断扩大
- 岗位晋升申请书
- 高中转学申请书
- 2025年中国建材集团所属中建材联合投资有限公司招聘笔试参考题库附带答案详解
- 2025年企业合伙联营框架协议模板(2篇)
- 中国电信行业人工智能行业市场调研及投资规划建议报告
- 水幕喷淋系统的工作原理与应用
- 门楼施工方案
- 全国职业院校技能大赛高职组(康复治疗技术赛项)考试及答案
- 2024年山东海洋集团有限公司社会招聘考试真题
- 《感冒中医治疗》课件
- 研发费用管理制度内容
- 压力容器设计委托书
评论
0/150
提交评论