IE 5.x/Win 和模型bug

IEbug

body .wrap{ width:500px;}
.wrap *{text-align:left;}
/* clear float*/
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}

.clearfix {display: inline-table;}

/* Hides from IE-mac \*/
.clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
.clear{ clear:both;}
/*bug1*/
#bug1{}
.bugTitle{ position:absolute; left:0px; top:0px; width:100px; font:18px "Courier New", Courier, monospace; font-weight:bold;padding:5px; background:#f5f5f5;}
#boxbug{ width:500px;width /**/:530px; border:10px #f60 solid; margin:10px auto; padding:10px;}
#boxbugie6{ width:500px; border:10px #f60 solid; margin:10px auto; padding:10px;}
html>body #boxbugie6{ width:500px;}
html>body #boxbug{ width:500px;}
/*bug2*/
#bug2{}
#ie3px,#ieno3px{float: left; width: 100px; height: auto; min-height:50px; background: #f60;}
p.ie3px,p.no3px{margin: 0 0 0 100px; background: #333; text-align:left; color:#fff;}
* html #ieno3px{margin-right:-3px;}
* html p.no3px{height:1%;margin-left: 0;}
/*bug3*/
#bug3{}
#box1,#box2{ margin-left:50px; float:left; background:#f60; width:200px;}
#box2{ /*float:none;*/display:inline ;}

-->

IE 5.x/Win 和模型bug

这里是一个width:500px;margin:10px;padding:10px; border:10px;的一个盒子.
使用widht(空格)/**/:530px,解决IE5.x系列的盒解析bug,因为IE5.x系列浏览器能读到这句.在IE5.x Win,IE6.0 Win下效果一致.
如何使用hack解决IE5.x盒解析bug?
#content {

width:530px; //这个是错误的width,所有浏览器都读到了

voice-family: "\"}\""; //IE5.X/win忽略了"\"}\""后的内容

voice-family:inherit;

width:500px; //包括IE6/win在内的部分浏览器读到这句,新的数值(300px)覆盖掉了旧的

}

html>body #content { //html>body是CSS2的写法

width:500px; //支持CSS2该写法的浏览器有幸读到了这一句,IE 5.x不支持的。

}
#content {

width:500px !important; //这个是正确的width,大部分支持!important标记的浏览器使用这里的数值

width(空格)/**/:530px; //IE6/win不解析这句,所以IE6/win仍然认为width的值是300px;而IE5.X/win读到这句,新的数值(400px)覆盖掉了旧的,因为!important标记对他们不起作用

}

html>body #content { //html>body是CSS2的写法

width:500px; //支持CSS2该写法的浏览器有幸读到了这一句

}
<!--[if Lte IE6]>

#content {

width:530px

}

<[!endif]-->

这里是一个width:500px;margin:10px;padding:10px; border:10px;的一个盒子,IE5.x Win解析不正常。
IE6盒模型在向后兼容的同时也包容了以前的错误,IE6其实有两个核心,在旧的页面前他仍旧表现出对错误的宽容,只有在文档中严格地加上文档类型(DOCTYPE)声明,IE6才能够接受正确的box-model所以,hack必须和正确的DOCTYPE同时包含在文档中才能够正常工作。

IE/div浮动文本出现3px间距的bug

这里是浮动box

左边对象是浮动的,这里是采用margin-left来定位,这里的文本会离左边有3px的空白误差。

这里是浮动box,使用了* html #floatbox2 {margin-right: -3px;}解决3px bug

左边对象是浮动的,这里是采用* html p.no3px{height:1%;margin-left: 0;},这里的文本会离左边没有了3px的空白误差。

IE/div浮动文本出现3px间距的bug产生的条件:

当左边对象是浮动的,右边对象采用外补丁的左边距(margin-left:?px;)来定位,则右边对象内的文本会离左边有3px的空白误差。

CSS:
#ie3px{float: left; width: 100px; height: 50px; background: #f60;}/*左边对象浮动*/

p.ie3px{margin: 0 0 0 100px; background: #333; text-align:left; color:#fff;}/*右边margin-left:??px;*/

XHTML:
<div id="ie3px">这里是浮动box</div>

<p class="ie3px">左边对象是浮动的,这里是采用margin-left来定位,这里的文本会离左边有3px的空白误差。</p>

IE/div浮动文本出现3px间距的bug解决方法:

利用hack *html div{}为IE单独写一个样式

* html #ieno3px{margin-right:-3px;}

* html p.no3px{height:1%;margin-left: 0;}
CSS:
#ieno3px{float: left; width: 100px; height: 50px; background: #f60;}

p.no3px{margin: 0 0 0 100px; background: #333; text-align:left; color:#fff;}

* html #ieno3px{margin-right:-3px;}

* html p.no3px{height:1%;margin-left: 0;}
XHTML:
<div id="ieno3px">这里是浮动box,使用了<span class="alt">* html #floatbox2 {margin-right: -3px;}</span>解决3px bug</div>

<p class="no3px">左边对象是浮动的,这里是采用<span class="alt">* html p.no3px{height:1%;margin-left: 0;}</span>,这里的文本会离左边没有了3px的空白误差。</p>

IE/浮动对象外补丁的双倍距离

这个元素,浮动左对齐(float:left),左侧外补丁(margin-left:50px;),在wrap层内,但在IE浏览器中Box1离左边的距离会是100px,而实际距离应是50px。当一个元素用于非float:none;的浮动状态时,IE下该元素既被视为块级元素,display:block;

CSS:
#box1{ margin-left:50px; float:left; background:#f60; width:200px;}
XHTML:
<div class="wrap">

<div id="box1">这个元素,浮动左对齐(float:left),左侧外补丁(margin-left:50px;),在wrap层内,但在IE浏览器中Box1离左边的距离会是100px,而实际距离应是50px。当一个元素用于非float:none;的浮动状态时,IE下该元素既被视为块级元素,display:block;

</div>

</div>

这是个拥有正确margin-left的元素,解决的办法就是,使浮动效果消失,这里采用了display:inline;原理可参阅on having layout

CSS:
#box2{ margin-left:50px; float:left; background:#f60; width:200px; display:inline ;}
XHTML:
<div class="wrap">

<div id="box2">这是个拥有正确margin-left的元素,解决的办法就是,使浮动效果消失,这里采用了display:inline;原理可参阅on having layout。</div>

</div>

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • IE 5.x/Win 和模型bug

    IEbug body .wrap{ width:500px;} .wrap *{text-align:left;} /* clear float*/ .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .clearfix {display: inline-table;} /* Hides from IE-mac \*/ .clearfix {heigh

  • HTML结构化:实践DIV+CSS网页布局入门指南

    你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: 第一种可能是你还没有理解CSS处理页面的原理.在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义.结构添加CSS.这篇文章将告诉你应该怎样把HTML结构化. 另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,.hspace.align="left"等等)束手无策,不知道该转换成对 应的什么CSS语句. 当你解决了第一种问题,知道了如何结构化你的HTML

  • css元素定位

    css元素定位 1. position:static|无定位position:static是所有元素定位的默认值, 一般不用注明,除非有需要取消继承的别的定位 example:#div-1 { position:static;} 2. position:relative|相对定位使用position:relative,就需要top,bottom,left,right4个属性来配合,确定元素的位置.如果要让div-1层向下移动20px,左移40px: example:#div-1 { positi

  • div+css布局入门

    你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习: 第一种可能是你还没有理解CSS处理页面的原理.在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义.结构添加CSS.这篇文章将告诉你应该怎样把HTML结构化. 另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,.hspace.align="left"等等)束手无策,不知道该转换成对应的什么CSS语句.当你解决了第一种问题,知道了如何结构化你的HTML,我

  • div+css div+css divcss布局入门教程 迅雷下载

    你正在学习 CSS 布局吗?是不是还不能完全掌握纯 CSS 布局?通常有两种情况阻碍你的学习:     第 CSS 处理页面的原理.在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构, 然后再针对语义.结构添加 CSS.这篇文章将告诉你应该怎样把 HTML 结构化.     另一种原因是你对那些非常熟悉的表现层属性(例如:cellpadding,.hspace.align="left"等等)束手无策,不知道该 转换成对应的什么 CSS语句.当你解决了第 HTML,我再给出一个

  • IIS UNICODE Bug

    一.存在的漏洞1. 微软IIS 4.0 / 5.0 存在扩展UNICODE目录遍历漏洞,该漏洞既是一远程漏洞,同时也是一本地漏洞. 受影响的版本: Microsoft IIS 5.0 + Microsoft Windows NT 2000 Microsoft IIS 4.0 + Microsoft Windows NT 4.0 + Microsoft BackOffice 4.5 - Microsoft Windows NT 4.0 + Microsoft BackOffice 4.0 - Mi

  • 基于python yield机制的异步操作同步化编程模型

    本文总结下如何在编写python代码时对异步操作进行同步化模拟,从而提高代码的可读性和可扩展性. 游戏引擎一般都采用分布式框架,通过一定的策略来均衡服务器集群的资源负载,从而保证服务器运算的高并发性和CPU高利用率,最终提高游戏的性能和负载.由于引擎的逻辑层调用是非抢占式的,服务器之间都是通过异步调用来进行通讯,导致游戏逻辑无法同步执行,所以在代码层不得不人为地添加很多回调函数,使一个原本完整的功能碎片化地分布在各个回调函数中. 异步逻辑 以游戏中的副本评分逻辑为例,在副本结束时副本管理进程需要

  • 关于javascript DOM事件模型的两件事

    事件捕捉(Event Capture)的实现问题 W3C DOM Level2的事件模型规范中,事件在DOM树中的传播过程(从根节点到目标节点)被分为了两个阶段:捕捉(Capture)和冒泡(Bubbling).下面这个图能大概的说明整个过程: (from W3C) 如果想创建一个捕捉事件,在支持W3C 事件模型的浏览器中,将addEventListener的第三个参数设为true就好了.例如: 复制代码 代码如下: document.getElementById('foo').addEvent

  • 关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置

    IE下的DHTML有各种MS$的私有特征,已经是众所周知.其中有个比较有趣就是:event.screenX和event.screenY,可以获得系统级别的鼠标位置坐标. 咋一听,其实也觉得没什么.屏幕上的坐标无非就是:浏览器客户区域里的坐标 + 浏览器窗口坐标 + 客户区偏移,仅此而已. IE本身就可以通过event和screen对象得到各种屏幕和窗体位置有关的信息. 然而,真正诡异的事还没开始!按照标准的DOM模型定义,只有在触发某个事件的时候,才能从event中获得与该事件相关的参数. 也就

  • 创建一个实现Disqus评论模版的MySQL模型

    在很长一段时间内,PostgreSQL都被认为是MySQL的替代品.但是,在那段时间里,根本没有办法使他达到MySQL所能达到的水平.最近几年里,这些问题都无法解决,并且产生了许多有趣的工具来弥补PG.我们在Disqus中使用了两个Slony和pgbouncer.Slony让我们可以复制数据(有时候也可以分区),而pgbouncer为我们解决了保持链接和连接池的问题. 另外,让我们看看他们的语言:我这个星期很高兴能够学会如何在PGSQL8.4中使用递归查询,他们实在太强大了.这就是我这篇文章所真

随机推荐