admin管理员组

文章数量:1530981

2024年1月14日发(作者:)

文档类型2010年8月19日16:32使用以下DOCTYPE可使避免IE6进入怪异模式,不适用文档声明或使用HTML3以下的文档声明会是IE6进入向下兼容IE5的怪异模式DOCTYPE (Document Type) 文档类型,说明 XML 或者 (x)HTML 的版本。DTD (Document Type Definitions) 文档类型定义,浏览器根据 DTD 来解释页面标识,并展现出来。DOCTYPE 通常(但不总是)包含指定的DTD文件的URL。浏览器一般不读取这些文件,而是只识别常见的 DOCTYPE 声明。HTML 4.01 Transitional

"/TR/html4/">HTML 4.01 Frameset

"/TR/html4/">XHTML 1.0 Strict

"/TR/xhtml1/DTD/">XHTML 1.0 Transitional

"/TR/xhtml1/DTD/">XHTML 1.0 Frameset

"/TR/xhtml1/DTD/">XHTML 1.1

"/TR/xhtml11/DTD/">源文档

分区IE6兼容的第1 页

垂直堆栈2010年8月20日10:58根据w3c关于stack level的介绍可以得出以下stack level规则每个stacking context都包括以下stack level (后来居上):IE6/IE7的规则每个stacking context都包括以下stack level (后来居上):1.父级stacking context的背景、边界2.z-index值为负值的定位元素(值越小越在下)3.脱块文本脱float块文本(ie7)/行内元素4.未固定宽度文本流中非定位的block块级子元素1.父级stacking context的背景、边界2.z-index值为负值的定位元素(值越小越在下)3.文本流中非定位的block块级子元素4.脱float块的文本5.文本流中非定位的float浮动子元素/文字元素5.固定宽度文本流中非定位的block块级子元素/文本流中非定位的、float浮动子元素/文字6.脱块文本/行内元素7.z-index:auto/0的定位元素8.z-index值为正的定位元素(值越大越在上)

分区IE6兼容的第2

页6.z-index:auto/0的定位元素7.z-index值为正的定位元素(值越大越在上)

IE6/7技巧2010年8月24日12:35禁用IE6/7默认的垂直滚动条(Disabled IE default Vertical Scroll bar)默认情况下,即使内容适合窗口大小,IE(译注:IE6/7)也会显示垂直滚动条。你可以使用overflow:auto,让滚动条只在你需要时出现。代码:html { overflow: auto;

}

分区IE6兼容的第3 页

CSShack2010年8月20日16:21#select{width:500px; /*DOM*/+width:500px; /*for ie6/7 */_width:500px; /*for ie6 */width:500px !important; /* for not ie6 */使用IE特有条件注释微软给IE添加了条件注释以区分不同版本,任何东西都可以塞进条件注释里:标签、JavaScript、js文件、css、内联样式。可以使用条件注释来针对某一个IE浏览器版本来编写代码。规则如下:(译注:可参考IE 特有注释(hack))

这段文字会在所有浏览器显示

分区IE6兼容的第4 页

使用条件注释加载css的好处是这些样式是独立于其他css文件的,因此不会在编写兼容代码时弄得一团糟;而且当IE6的市场份额降低到不需要兼容时,可以快速的清理掉。使用条件注释的唯一缺点是在IE浏览器下会增加额外的HTTP请求数,所以需要权衡是否这样做。但我不建议使用条件注释加载外部js文件,因为js文件会造成阻滞,在js未加载完之前其余文件都不会被加载;对于js请使用JavaScript程序来区分浏览器而非条件注释。源文档

分区IE6兼容的第5 页

IE6Bug2010年8月19日16:40IE6标准模式水平居中

margin:0 autoIE7DW普通视图DOM溢出overflow:visibleoverflow:hidden/auto向下溢出顶开父盒子的高度,向上溢出被隐藏溢出不影响父盒子和其他元素,直接超出父元素(不论上下)溢出不影响父盒子和其他元素,直接超出父元素(不论上下)min/max-width/height

position:fixed为非链接元素添加:hover!important:before和:after

空白边合并png-24 alpha通道png-8 gif

透明浮动元素垂直堆叠高于普同级通元素横向导航栏标准代码li {float:left;width:100px;height:40px;}li a {display:inline-block;width:...px;height:40px;

}

IE6嵌套产生的Bug(多见于列表)1.父块(未设宽度自适应)浮动,子块display:block设置高度产生Bug (溢出BUG衍生问题)子块顶穿父块,怀疑为设置高度使子块宽度变为默认的占整行,IE6中父块浮动收缩时不会使子块默认占整行受影响(DOM中会)解决办法子块display:inline-block

或加float2.(垂直堆叠bug衍生)

解决:使用最上面的写法

分区IE6兼容的第6

IE6/7共有问题IE6专有问题IE6/7支持水平居中:IE6/7中,标准模式下可使用margin:0 auto水平居中。兼容模式下无效。

IE6下不支持的属性最大最小宽度min/max-width/height

相对于浏览器窗口定位 position:fixed为非链接元素添加:hover关于IE6/7垂直堆叠BUG假设浮动块固定大小,如果非浮动块流动宽度则同DOM相同,浮动块抬起,非浮动块在下面如果非浮动块固定宽度则产生BUG,非浮动块会抬起跟浮动块同级嵌套情况,子浮动元素对父不浮动元素也可见IE6

3像素空白浮动元素紧接着非浮动元素则之间会有三像素空白,需要用CSShack 设置浮动元素_margin-right:-3px或者浮动元素后最好不要直接跟非浮动元素,尽量清除IE6/7空元素设宽度bug(会占一行高)IE7可设height:0可解决IE6溢出:IE6中向下溢出默认会顶开父盒子的高度(如果是英文连续没有空格还会顶开宽度),向上溢出则会被直接隐藏而在IE7和DOM中文字会溢出显现但不会影响父盒子IE6双倍空白边问题IE6浮动盒子同父级元素左右两边接触时会跟左右两边产生双倍横向空白边解决方法是个盒子加上display:inline目前没发现有什么影响IE6不行IE6设空元素height:0也会有高度空白边合并IE6/7均不支持IE6/7父元素设置overflow为auto/hidden/scroll时子元素设置position:relative子元素脱出连续浮动元素,固定宽度接自适应宽度首先,在DOM中,自适应宽度元素如果占满一整行则浮动(对宽度是100%的元素)不能出现环绕或被环绕效果IE8中先确定宽度后浮动

浮动与浮动元素相接或非浮动元素相接都是标准文本流形式,即不设宽度是宽度设为整行(浮动后需要元素内容多余一行),则会出现,最右边占满一整行的效果IE6/7先浮动后确定宽度

如下图所示三像素空白BUG

连续浮动元素相接BUG

分区IE6兼容的第7

不常见Bug2010年8月20日23:41IE6断头台当容器中左浮动对象右侧直接跟链接,并且链接的hover状态属性有变化的话,可能导致容器的高度重新计算,并切掉左浮动对象的部分内容。解决方案:浮动对象后面不直接跟非浮动对象,或者最后清除浮动。IE6捉迷藏增加了一层div结构,问题肯定出在这。与width的定义应该没有关系,难道是background-image有冲突?去掉div中的背景图,无效;这就是剩下position:relative了,有这个属性是因为其子元素有需要绝对定位,那先去掉试试,绝了,去掉后显示正常!!这是为什么呢?如果说定义position:relative后div无法撑开,那其背景已经显示出了,不成立呀~还有如果定义页面中的p足够的高度,但向下拖动垂直滚动条,是ul部分被掩盖,然后在显示出来,这时候li标签的小图标也可以显示了,很奇怪。。。 css2 正常情况

h1,h2,h3,h4,h5,h6{font-size:100%; font-weight:normal;}img,fieldset {border:0; vertical-align:top;}ul,ol,li {list-style:none;}.serviceSupport {width:990px; background:url(/wp-content/uploads/demo/ie6bgbug/images/content_) no-repeat;

position:relative;}.serviceExplain{padding:20px;} XML

目前推荐遵循的是W3c于1998年5月12日推荐CSS2。W3C创建CSS标准的目的是以CSS取代HTML表格式布局,桢和其它表现的语言。纯CSS布局与结构式XHTML相结合能帮助设计师分离外观与结构,使站点的访问及维护更加容易。

连接1 连接2 连接3 连接4
.serviceExplain li {background:url(/wp-content/uploads/demo/ie6bgbug/images/icon_) no-repeat 0 -196px; color:#000; line-height:30px; padding-left:15px;}
  • 一个很简单的结构,只是一个列表,每项前有个项目图标的修饰图;
  • 仔细观察我前面的修饰图标

我是打酱油的...

幽灵文字这是IE6上面一个非常奇怪的BUG,他的触发条件也是相当诡异,在浮动元素间如果有 这样的普通的HTML注释的话,会导致Float元素中的最后的字符会很诡异的出现在后面的clear元素中,具体的介绍大家可以看这里positioniseverything。解决的方法也很奇怪*

将所有的浮动元素设为display:inline;*

给最后的浮动元素设置margin-right:-3px;*

使用条件注释避免IE6下的问题Put your commentary in

here…*

在最后的容器内放入一个空的div (这种添加这种无语义的workaround并不是最理想的选择)源文档

IE浮动元素与清理元素接触(非浮动消失)捉迷藏bug(peek-a-boo) (ietester中出现IE6中未出现),之所以起这个名称是因为在某些条件下文本看起来消失了,只有在重新装载页面时才再度出现。出现这个bug的条件是:一个浮动元素后而跟着一些非浮动元素,然后是一个清理元素,所有这些元素都包含在一个设置了背景颜色或图像的你元素中。如果清理元素砬到了浮动元素,那么中间的非浮支元素看起来消失了,隐到了父元素的背景颜色或图像后面,只有在刷新页面时才重新出现。幸运的是,有许多方法可以解决这个bug。最容易的方法可能是去掉父元素上的背景颜色或图像。但是,这常常是不可行的。另一个方法是避免清理元素与浮动元素接触。如果窗口元素应用了特定的尺寸,那么这个bug似乎就不会出殃了。如果给窗口指定行高,这个bug也不会出现。最 后,将浮动元素和容器元素的position属性设置为relative也会减轻这个问题。

分区IE6兼容的第8 页

解决方案1.在对页面上的对象使用float浮动之后,最后在下面使用带有clear:both;的div对页面进行一些浮动上的清理工作,并且尽量避免对#layout使用background。2.如果有可能,可以给#layout使用因定宽和高度,尽管之样会对页面有所限制,但能消除一些捉迷藏的影响。3.可以尝试给#layout和#left使用position:relative。4.对#layout使用line-height属性,强制浏览器对其中的内容进行行距调整,从面可以消除捉迷藏bug,例如使用line-height:1.2;就能够使页面运作变得正常。捉迷藏bug虽然是IE留下的后遗症,但是另一方面我们应当在div的嵌套上遵循一些习惯,尽量使用最少的层次嵌套来满足页面设计需要,使页面结构简单,实用,易控制与管理,尽可能的减少由于不必要的嵌套引来的连锁问题。

分区IE6兼容的第9 页

IE6/7DOM兼容代码2010年8月24日12:25总结1.浮动元素后不可以同辈直接接非浮动(除文字环绕),父辈如果不固定高度则必须清理2.大块分栏时,连续浮动的分栏元素必须全部设定宽度最小高度{min-height:500px;_height:500px;}1.关于浮动元素a.浮动的大块元素(多行长文字)必须设定宽,尽量设定高b.浮动的小块元素(短文字,列表做横导航)由于利用浮动的收缩特性不能设宽,则内部块要用display:inline-block2.关于含子浮动元素的父元素撑开:内有a.b浮动子元素的父元素欲撑开尽量设定父元素高度设定高度,如不能设定必须清理,不可以使用父元素也浮动的方法3.关于浮动盒子双倍空白边:如果浮动盒子同父元素左右边界接触需要使用margin要加display:inline4.关于三像素:如果需要使用浮动让文字环绕固定尺寸块(如img),则文字块不要设定宽度,用父元素设定宽度,且浮动元素要加hack _margin-right:-3px;5.关于横向导航条:浮动li做导航菜单时最好的写法,可出滑动门li {float:left;height:40px;}li a {display:inline-block;height:40px;

}

6.不要使用空白边合并

分区IE6兼容的第10

本文标签: 元素浮动使用宽度页面