- 浏览: 1466519 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
分析一下 dtd 对于 firefox 和 ie 的 作用
首先看一段很短的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>ie8 bug测试 </title> </head> <body> <div id="marquees" style='width:100px;height:200px;overflow:hidden;border :1px solid green;padding:100px;'> <a href="#">链接1</a> <br> <a href="#">链接2</a> <br> <a href="#">链接3</a> <br> <a href="#">链接4</a> <br> <!-- 字幕内容结束 --> </div> </body> </html> <!-- 以下是javascript代码 --> <script type="text/javascript"> alert(document.getElementById('marquees').offsetHeight); </script>
在 ie6 ie7 firefox3 上都显示 402 ,布局也都一样 , 他们 都遵从了 xhtml 1. 0 transitional 标准。
那么把 dtd 删掉 则会有很大不同了 :
<html> <head> <title>ie8 bug测试 </title> </head> <body> <div id="marquees" style='width:100px;height:200px;overflow:hidden;border :1px solid green;padding:100px;'> <a href="#">链接1</a> <br> <a href="#">链接2</a> <br> <a href="#">链接3</a> <br> <a href="#">链接4</a> <br> <!-- 字幕内容结束 --> </div> </body> </html> <!-- 以下是javascript代码 --> <script type="text/javascript"> alert(document.getElementById('marquees').offsetHeight); </script>
ie 6 7 显示 200,firefox 显示 402 ,
这就是网上常说的 ie 和 firefox 的 盒模型的区别 , 实际上 是 处于 qirk(混杂) 模式下的区别 ,ie为了兼容以前自己专有的的盒模型而不符合后来制定的标准。 网上提供的css hack才是真正害人 , 设成 标准模式就可以了 ,何必 要刻意 hack 。
下面来看看 ie8 的特殊表现
运行 第一段 带 dtd 的 xhtml , 当从 浏览器直接输入 xhtml 本地地址 ,打印 402 ,布局也正常
,这时 点一下 刷新
,结果 , 打印 200 ,布局变成了 混杂模式的样子!!!!!!!!!!!!!
转载一篇 : 关于 dtd 的 有趣文章
我们都知道,要做WD(web designer),首先得伺侯好几个浏览器:IE6,IE7,Firefox.一般的页面,都只要求在IE6,IE7,Firefox下正常工作就行了。
但是实际上,浏览器远远不止这几个,Firefox分为Firefox 1.5,Firefox 2,Firefox 3几个主要版本,IE7,IE6
中也各有好几个系列,另外除开这两个主流厂商的产品之外,还有Opera,Konqueror,Netscape,chrome等一系列。
这些浏览器,各有各的一套,往往在这里运行正常,在那里运行就不正常了。于是WD们拆东边补西边,终于能在几个浏览器下都正常了。结果,产品经理又有了
新的需求,需要在哪儿哪儿那儿改一下,于是乎,好不容易糊弄好的的纸架子一下子倒塌了,WD们又忙得焦头烂额。之所以这么说,因为,这是我的经验。
大凡是WD,总是收集了一堆Css Hacking 技巧,为的是在各个浏览器下正常。网上一搜,一大堆。
然而,首先WD们没有弄清楚一个基本问题,我们为什么需要css Hacking?如果有1000种浏览器,我们是不是要记住1000种浏览器的Hack 技巧?
事实上, Css Hacking从某种程度上说,是一个拿不上台面的东西。Css Hacking有很多技巧,纯粹就是利用了浏览器的Bug.比如常
见的用_class{….} 去区别IE和firefox,按理说_class是一个不合法的标记方法。Css Hacking的出现,是WD们不得已而
为之,WD们的日常工作并不是疯狂地Css Hack.
其实这么多浏览器,并不是可以随便乱来,想自己定义个啥就定义个啥标记的。人们习惯了
在标准的世界里生活,在网页世界里,也有一系列标准。浏览器们也都努力地做到web标准兼容。但是有些浏览器出道得早,可以说后来出现的web标准就是在
它们的影响下诞生的。还有一个,当年非常牛B,所以做了很多创新,没有把web标准放在心上,蛮不在乎。更何况,标准自身也是在不断更新的。因此,一般各
个浏览器产品系统都曾有过一段没有不太在乎web标准的日子,后来大家都意识到不行了,我们大家都妥协一下,要制订一套标准,大家都遵守。可是以前各家都
有自己制订的一些小条条小框框,他们不符合标准,咋办呢?
于是,这些人想了个法子:标准模式和怪异模式。另外还有一种,叫“近乎标准模式”,almost standard.要说真是够怪异,我都听晕了。别着急,听我慢慢道来。
不是说了吗,这些老大们坐在一起,制定了各式各样的标准,以后大家都按这套标准来解释网页。如果你做的网页可以按这套标准来解释,那就用一个标记doctype注明这是可以按web标准来解释的。这就是标准模式。
那以前各家都生产过,规定过的小九九们不符合标准,咋办啊?也不能就马上把它们全扔掉不要了吧?软件上大抵有这样一套原则,叫向下兼容。在怪异模式下,
各个浏览器都模拟那些老版本的浏览器的操作,以防止老的页面无法工作。在网页没有指定doctype时,浏览器一般就都按怪异模式工作,以防老页面无法工
作。
对于这两种模式之间的差异,最显著的例子涉及Windows上IE专有的框模型。在IE 6出现时,在标准模式中使用正确的框模
型,在怪异模式中使用老式的专有框模型。为了维持对IE 5和更低版本的向后兼容性,Opera 7和更高版本也在怪异模式中使用有缺点的IE框模型。
Mozilla和Safari还有第三种模式,称为“几乎标准的模式(almost standards mode)”,除了在处理表格的方式方面有一些细微的差异之外,这种模式与标准模式相同。
正是由于这个原因,您可以丢掉很多css hacking技巧了。有些书介绍说,IE6和firefox的盒模型(或者有的地方叫框模型)不一致,因此需要这样做hack:
width:100px;
*width:95px;
}
我说,这种书真是误人子弟。因为,只要正确指定了doctype,这些浏览器解释上的差异就都不存在了,我们按照标准来就行了。
这个模式的指位于HTML文件开头的DOCTYPE域指定的。一般常见的有这几种:
HTML 4.01 Transitional:
HTML 4.01 Frameset
XHTML 1.0 Strict
XHTML 1.0 Transitional
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML 1.0 Frameset
XHTML 1.1
document .compatMode
IE对盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在Standards Mode下对于盒模型的解释和其他的标准浏览器是一样,但在Quirks Mode模式下则有很大差别,而在不声明Doctype的情况下,IE默认又是Quirks Mode。所以为兼容性考虑,我们可能需要获取当前的文档渲染方式。
document .compatMode 正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat,对其解释如下:
BackCompat Standards-compliant mode is not switched on. (Quirks Mode)
CSS1Compat Standards-compliant mode is switched on. (Standards Mode)
在实际的项目中,我们还需要在获取浏览是否IE,这样就可以得到IE的渲染模式了。在Ext中的代码:isBorderBox=isIE&&!isStrict。
当文档有了标准声明时, document .compatMode 的值就等于 "CSS1compat", 因此, 我们可以根据 document .compatMode 的值来判断文档是否加了标准声明
var height = document .compatMode =="CSS1Compat" ? document .documentElement.clientHeight : document .body.clientHeight;
一篇详尽描述关于doctype对于浏览器的影响的文章:
http://hsivonen.iki.fi/doctype/
发表评论
-
cubic-bezier 模拟实现
2013-01-05 16:34 14114cubic-bezier 曲线是 css3 动画的一个重要基石 ... -
css reset revisit
2012-07-25 00:32 4266正如 javascript 兼容库的作用, css r ... -
兼容 ie 的 transform
2012-02-23 14:00 6447css 2d transform 是 css3 引入的一个新的 ... -
write html parser
2011-12-01 02:48 2928首先需要声明 html 不能用正则表达式来直接匹配进行内容抽取 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2856简介 如果你经 ... -
fixed 定位 auto 问题
2010-12-02 11:58 2115当一个元素被 fixed 定位 ... -
css的优先级与继承
2010-11-08 12:30 3719起因: 很早就听 ... -
浏览器渲染
2010-10-12 21:07 0http://snook.ca/archives/html_a ... -
背景图样式回顾
2010-09-30 13:51 1796正式点叫 background-image recap ,最近 ... -
mhtml datauri 与 css expression
2010-09-29 18:17 2399mhtml ,datauri ,css expressio ... -
margin合并整理
2010-06-23 11:25 4201多个段落为了美观,浏览器会将它们的垂直距离变得统一,这是一种很 ... -
编写跨浏览器兼容的 CSS 代码的金科玉律
2010-06-09 13:26 0作为 Web 设计师,你的 ... -
图片优化 and dataURI and mhtml for ie<8
2010-04-28 10:00 0http://www.phpied.com/data-uris ... -
W3C XML Schema 与文档类型定义 (DTD) 比较
2010-02-01 23:50 0http://www.ibm.com/developerwor ... -
xtml与html
2010-02-01 23:26 0HTML与XHTML 二者有什么区别,你觉得 ... -
获取css属性计算值问题
2010-01-29 23:11 3809都知道标准浏览器可以用 getComputedStyle 以及 ... -
垂直居中问题解释整理
2009-12-06 01:19 2300垂直居中曾经很热的话题,也转过网络一些好的解决方案: ... -
有趣的z-index
2009-12-01 00:25 2852实践 : 注:firefox 示例1 ... -
css列布局整理
2009-11-27 01:14 1705对一些经典的布局进行整理,以及修改去除不必要的hack,兼容 ... -
ebay ppt.rar
2009-11-18 15:23 0ebay ppt.rar
相关推荐
在网页开发中,尤其是在处理与Internet Explorer(IE)浏览器相关的兼容性问题时,开发者经常会遇到一些经典的IE Bug。本知识点主要探讨其中两个关键问题及其解决方案,分别是内外间距差异和错误的元素扩展。 1. **...
复杂布局可能会导致IE6中出现一个bug:浮动对象的最后一个字符可能出现在已清除浮动的元素之后。这个问题可以通过以下方法解决: - 确保所有浮动元素都使用 `display: inline`; - 为最后一个浮动元素设置 `margin-...
这是因为IE8对CSS的解析和渲染有其特有的规则和bug。在这个案例中,问题在于背景图URL的书写,特别是URL和no-repeat之间是否有空格。在IE8浏览器中,如果在URL和no-repeat之间不小心加了一个空格,那么这一空格会...
margin加倍问题(IE Bug)** 在IE中,设置为`float`的div的margin会加倍。可以通过在div内添加`display: inline`来修复这个问题: ```css #float-div { float: left; margin: 5px; display: inline; } ``` **3...
IE8默认开启的是其最新的渲染模式,这可能与旧版IE7的渲染方式存在细微差别,但只要我们强制IE8使用IE7的渲染模式,就能使页面在IE8下表现得与IE7一致。实现这一目标,可以在页面的`<head>`部分添加以下代码: ```...
复制代码代码如下: <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” ...DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd> 你需要处理的最棘
IE6,这个前端开发的梦魇总是在你不经意的时候给你捅一刀。这次碰到的问题是CSS多类选择符的问题。IE6不支持,我们来看一段这样简单的代码: 复制代码代码如下: <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 ...
在本文中,我们将会探讨如何避免IE6的bug,以及在不可避免地遇到bug时的修复策略。 首先,做一个简洁的设计非常重要。在设计网站或页面时,应当考虑到代码的简洁性,使用尽量简洁的标签和代码,避免使用过于繁杂的...
charset=utf-8" /> <title>IE6 position:fixed bug * { padding:0; margin:0; } /* 其他CSS样式省略 */ <!-- 页面内容 --> ``` 解决IE6的`position:fixed`问题通常需要一些技巧。一个常见方法是...
--[if IE 6]> #wrapper { width: 80px; } <![endif]--> ``` #### 三、浮动和清除浮动的兼容性 在处理浮动元素时,尤其是当需要清除浮动以避免布局混乱时,不同的浏览器也会有不同的表现: 1. **清除浮动的...
- **问题描述**:IE浏览器在处理带有`margin`和`padding`的`float`元素时存在bug。 - **解决方法**: - 可以通过在`float`元素内部嵌套一个`div`来设置`margin`和`padding`。 - 或者使用hack方法为IE指定特别的值...
在Internet Explorer 8中,情况变得更为复杂,因为它支持三种模式:Standards、Quirks和IE7。IE8的模式选择受到X-UA-Compatible HTTP头部、HTML meta标签和DOCTYPE的影响。 编写具有良好兼容性的网页需要遵循以下...
#### 九、DIV浮动IE文本产生3像素的bug 在IE中,当左边对象浮动,右边对象通过外边距定位时,右边对象内的文本可能会与左边有3px的距离。 **解决方案**: ```css #box { float: left; width: 800px; } #left { ...
- IE6双边距bug:可以使用`_display:inline;`修复。 - 渐进增强和回退策略:使用条件注释或CSS hack处理不同IE版本的差异。 - 自定义属性和事件对象属性:统一使用`getAttribute()`获取自定义属性,并处理`event`...
此外,还提到了在IE6中常见的`margin` bug,这是指在IE6中使用`display: inline;`时,`margin-right`可能会失效的问题。使用`hasLayout`的概念(一个内部的IE渲染机制),可以通过触发布局来修复这个问题。 4. **...
复制代码代码如下: <...DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “<a>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>”><html xmlns=””><head><meta h
* 为validation-config.xml编写了DTD,避免编写validation-config.xml错误. [Thanks 清风] v1.0b1 * 对体系进行重构,框架更加合理 * 精简了代码,更有效率 * 现在可以正常运行在IE, Mozilla, NetScape和DOM2兼容的...