`
可爱の小猪
  • 浏览: 106974 次
  • 性别: Icon_minigender_1
  • 来自: 南充
社区版块
存档分类
最新评论

IE6中用了float:left之后导致margin-left双倍边距的BUG解决方法

阅读更多
先看css代码:
div {
    float:left;
    margin-left:10px;
    width:420px;
    height:150px;
    border:1px solid #ff0000;
}
这样设置左边距设置为10px,但IE6.0解释为20px,解决办法就是是加上display:inline
代码:
div {
    float:left;
    margin-left:10px;
    display:inline;
    width:420px;
    height:150px;
    border:1px solid #ff0000;
}

在网上查了下,具体原因如下,,长篇大论,我也懒的看了!贴出来给有需要的朋友

一段无错的代码把一个居左浮动(float:left)的元素放置进一个容器盒(box),并在浮动元素上使用了左边界(margin-left)来令它和容器的左边产生一段距离。看起来相当的简单,对吗?但直至它被在IE/Win中浏览为止,在浏览器中居左浮动元素的边界长度被神秘地翻了一倍!

情况应该如何?

下面的图释展示了一个简单的div(茶色的盒子)包含着一个居左浮动的div(绿色的盒子)。浮动元素有一个100px的左边界,使容器盒与它的左边缘之间产生了一个100px的间隙。到现在为止,一直都还不错。

.floatbox {
float: left;
width: 150px;
height: 150px;
margin: 5px 0 5px 100px;
/*This last value applies the 100px left margin */
}

陈旧的IE“双倍占据”

原样的相同代码被在IE/Win中浏览时以些微不同的方式显示,下面的图释展示了IE/Win在布局上所做的。

这为什么会发生?别问这种傻问题!这就是IE,记得吗?符合标准只是理想的状况,不指望实现,这个简单的事实正验证了。

重点

这个Bug仅当浮动边界和浮动元素的方向相同时出现在浮动元素和容器盒的内边缘之间,在这之后的任意有着相似边界的浮动元素不会呈现双倍边界。只有特定的浮动行的第一个浮动元素会遭遇这个Bug。像居左的情况一样,双倍边界同样神秘地显示在居右的相同方式。

最后,修复办法!

直到现在(04年1月)这个Bug一直被认为是无法修复的,通常用来替代错误的边界的控制方法如:一个不可视浮动元素的左边距,连同一个内嵌的盒子一起,可视的盒子装在不可视浮动元素里;或者使用技巧仅对IE/Win设定边界的1/2值。这办法生效了,但是是混乱的而且搞糟了干净的源代码。不过现在全部结束了。

Steve Clason发现了一个修复办法,描述在他的Guest Demo里,修复了双倍边界和围绕文字缩进Bug。这是一个经典的IE的Bug修复办法,使用一个属性来修复影响不相关属性的Bug。

现在如何来做?

研究它,简单地将{display: inline;}设置给浮动元素就是全部所需做的!是的,听起来太简单了,不是吗?不过这是真的,仅仅一个display的"inline"声明已经能够胜任了。

熟悉规则的人知道浮动元素自动设置为"block"元素,而不管他们之前是什么。就如Steve从W3C里指出:

9.5.1 Positioning the float: the 'float' property

"This property specifies whether a box should float to the left, right, or not at all. It may be set for elements that generate boxes that are not absolutely positioned. The values of this property have the following meanings:

left
The element generates a block box that is floated to the left. Content flows on the right side of the box, starting at the top (subject to the 'clear' property). The 'display' is ignored, unless it has the value 'none'.

right
Same as 'left', but content flows on the left side of the box, starting at the top.

none
The box is not floated. "

这说明浮动元素上的{display: inline;}会被忽略,事实上所有的浏览器没有呈现任何改变,包括IE。但是,它不知何故让IE停止将浮动元素的边界翻倍。因而,这个修复办法可以被直接应用,而没有任何繁琐的隐藏方法。如果将来的一款浏览器决定对这个修复办法抱恙,只要把这个修复装入IE独用的Tan Hack里,细节如同IE Three Pixel Text-Jog Demo。

下面是两个使用了前面相同代码的生动演示,第一个照常显示了IE的Bug,下一个对浮动元素使用了"inline"修复。
<style type="text/css">
#box{
height:500px;
margin-left:20px;
background:#ff0000;
}
#left{
width:200px;
height:400px;
background:#CCCCCC;
float:left; display:inline;
margin-left:20px;
}
#footer{
clear:both;
margin-left:20px;
background:#00FF00;
}
</style>

 

<div id="box">
   <div id="left">left</div>
   <div id="left">left</div>
   <div id="footer">footer</div>
</div>

 

分享到:
评论
1 楼 fengzhiyin 2011-09-20  
_margin-left 的值为margin-left的一半可以解决

相关推荐

    LaTeX 符号表1

    - `{ }`:花括号,在 LaTeX 中用来分组。 - `$`:美元符号。 - `%`:百分比符号。 - `†`:首注记号。 - `†`:双首注记号。 - `§`:节记号。 - `\S`:大写节记号。 - `©`:版权符号。 - `\copyright`:版权符号的...

    css如何让浮动元素水平居中

    对于定宽的非浮动元素我们可以在CSS中用 margin:0 auto 进行水平居中,对于不定宽的浮动元素我们也有一个常用的技巧解决它的水平居中问题。解决水平居中问题有很多种方法,下面先给大家分享一下三种方法,希望能帮助...

    office常用快捷键.pdf

    - F5:刷新或运行程序(如在Excel中用于定位到某单元格)。 - F6:在窗口或屏幕的不同窗格间移动。 - F7:拼写检查。 - F8:扩展选定内容。 - F9:更新选定内容。 - F10:激活菜单栏。 - F11:插入或编辑...

    Unit 6 Let’s Go单元练习(冀教版七上)2.doc

    - 请求时"some"可用于疑问句,否定句中用"any",故第十二题选A。 - arrives at/in + 地点表示到达,故第十三题选C。 - "What's wrong with sb."为固定搭配,故第十四题选A。 - 在具体某一天的晚上用介词"on",故...

    MATLAB中用到的Tex字符集

    - `\Leftarrow`(⇐)、`\Rightarrow`(⇒)、`\Leftrightarrow`(⇔):双头箭头。 - `\uparrow`(↑)、`\downarrow`(↓):上下箭头。 - `\Re`(ℜ):实部符号。 - `\Im`(ℑ):虚部符号。 - `\aleph`...

    C、C、Java语言的常用符号.doc

    - `-&gt;`:在C/C++中用于指针访问结构体成员,在Java中不使用此符号 - `::`:在C++中用于作用域解析,在Java中没有对应符号 5. **关键字** - `abstract`:定义抽象类或方法 - `final`:禁止子类覆盖父类的方法 -...

    在Dreamweaver中制作选项卡式网页效果.docx编程资料

    **步骤6:** 在`&lt;/style&gt;`标签前添加以下CSS代码: ```css #gen a { height: 30px; display: block; float: left; padding-left: 10px; padding-right: 10px; line-height: 30px; color: #000; font-weight:...

    libxml2-python-2.9.1-5.el7_0.1.x86_64.rpm

    CentOS7本地yum源设置,所需要的安装依赖包:libxml2-python-2.9.1-5.el7_0.1.x86_64.rpm 此博客中用到的依赖包:https://blog.csdn.net/u010463613/article/details/81196260

    Python数据分析实践:数据拼接-1-new.pdf

    pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False) ``` - `left`和`right`: 需要拼接的两个DataFrame对象。 - `how`: 指定连接类型,...

    CSS在不同浏览器中兼容问题

    * IE 中的 margin-left 会加倍,解决方法是设置 margin-left 和 padding-left 四、浏览器的默认样式问题 * Firefox 和 IE 中的 default 样式不同,解决方法是设置合适的 CSS Reset * IE 中的 default 行高问题,...

    Ambient light for YouTube-2.38.0.zip

    此扩展程序将在您的浏览器中用流光溢彩环绕 YouTube 视频。无需额外的硬件,如灯带或智能灯,一切尽在您的浏览器中! 描述: 让自己沉浸在流光溢彩的YouTube视频中! 此扩展程序将在您的浏览器中用流光溢彩环绕...

    嵌入式Linux设备驱动开发详解-光盘代码

    嵌入式Linux设备驱动开发详解-光盘代码 书籍里面的光盘 实例代码: ----本书部分实例的源... ----本章实例中用到的器件手册 gcc-2.95.3.tar.bz2: ----gcc工具 lib.tar.bz2: ----相关库 图片 ----书中所有插图

    离散数学答案

    \(\left(\left((A \rightarrow C) \rightarrow \left((B \wedge C) \rightarrow A\right)\right) \rightarrow \left((B \wedge C) \rightarrow A\right)\right) \rightarrow (A \rightarrow C)\)。 - b. \(((B \...

    c#中用api控制鼠标

    6. **属性**: - `public static Point Position`:获取或设置一个结构体,表示鼠标的X和Y坐标。 - `public static int X`:获取或设置鼠标的X坐标。 - `public static int Y`:获取或设置鼠标的Y坐标。 7. **...

    VC MFC 项目开发中用到的例子-----SID与MDI全屏显示

    VC MFC 项目开发中用到的例子-----SID与MDI全屏显示 这是之后上传的一个 之前的一个少了DSP文件 不能方便的打开

    vmware-vdiskmanager.exe 下载

    你只能在宿主机中用这种方法收缩虚拟磁盘。 #你不能够收缩有虚拟机快照的虚拟磁盘。你可以保持现有虚拟磁盘的状态,而用快照管理器删除所有快照。你也可以放弃自快照以来对虚拟磁盘所做的更改,恢复到快照时状态。 ...

    让IE6支持min-width最小宽度

    通过设置特定的CSS属性,例如`_margin-left`、`_zoom:1`、`_position:relative`和`_float:left`,可以在IE6中模拟`min-width`的效果。这段代码创建了两个内部嵌套的div元素,`.ie6-out`和`.ie6-in`,通过对它们的...

    create-react-app-esbuild:在您的create-react-app中使用esbuild进行更快的编译,开发和测试

    特征在开发过程中用esbuild替换babel-loader 用esbuild替换babel-loader以加快构建时间用esbuild替换terser,以加快构建时间开玩笑时使用esbuild入门按照设置您的项目。常问问题为什么会更快? 在内部create-react-...

    mysql数据库驱动:mysql-connector-java-6.0.5.jar

    3. **JDBC接口**: JDBC是Java中用于数据库访问的标准API,通过实现JDBC接口,`mysql-connector-java-6.0.5.jar`使得Java应用程序能够与MySQL数据库进行交互。JDBC接口主要包括Connection(连接)、Statement(语句)...

    HTML常用标记

    - `align`属性:控制元素对齐,如`left`、`center`、`right`。 7. **颜色和背景设置**: - `bgcolor`:设置页面背景颜色。 - `background`:设置背景图像。 - `bgproperties`:控制背景图像是否随页面滚动。 -...

Global site tag (gtag.js) - Google Analytics