IE7浮动正确问题

Posted

技术标签:

【中文标题】IE7浮动正确问题【英文标题】:IE7 float right problems 【发布时间】:2010-12-21 15:47:24 【问题描述】:

html=>

<!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"> 
<head>
</head>
<body>
  <div style='border: 1px solid red; width: 100px;'>
    <a href="#">foo</a>
    <a href="#"style="border-color: blue; float: right;">bar</a>                
  </div>
something
</body>
</html>

我遇到了 IE7 问题(不需要 IE6 支持)

在 IE7 上呈现的 html 看起来像这样=>

我需要它看起来像这样(目前适用于 chrome/ie8)=>

我应该改变什么? :)

【问题讨论】:

【参考方案1】:

对所有 IE-Float-Combos 总是有帮助:给每个浮动元素一个 display: inline;

【讨论】:

display:inline; for bar 链接不知何故没有帮助。也许我理解错了。 display:inline for the float-element 将(在许多情况下)解决 IE 错误计算的填充和边距值的常见浮动问题。【参考方案2】:

你需要浮动两个元素并清除它。

<!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"> 
<head>
</head>
<body>
  <div style="border: 1px solid red; width: 100px;">
    <a href="#" style="border-color: blue; float: right;">bar</a>    
    <a href="#" style="float:left;">foo</a>            
    <div style="clear:both;"></div>
  </div>
something
</body>
</html>

或者像这样简单地将浮动元素放在普通元素的前面:

<!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"> 
<head>
</head>
<body>
  <div style="border: 1px solid red; width: 100px;">
    <a href="#" style="border-color: blue; float: right;">bar</a>    
    <a href="#">foo</a>            
  </div>
something
</body>
</html>

简要说明:

请原谅我的英语和绘图,但这里简要介绍一下浮动和清除在跨浏览器中的工作原理:

元素可以向左或向右浮动。当元素浮动时,元素不会向下推动“正常”内容。看看为什么 -

浮动和清除:

图例:橙色/向右浮动、蓝色/向左浮动、灰线/清除分隔线、红色矩形/边界

在这种情况下,一行文本有 2 个元素 - 一个向左浮动,另一个向右浮动。浮动时,它不会将内容向下推,即占用空间。因此,如果您不在灰线处使用clear:both,则下面的内容将在两个浮动元素之间向上堆叠,因此可能不是您想要的。

当您在浮动下方使用clear:both 时,浮动下方的内容将被推送到最高高度的浮动元素。这显示在图表的第 2 和第 3 部分。

仅浮动:

图例:橙色/向右浮动、蓝色/正常内容、灰线/与下一条分割的线、红色矩形/边界

蓝色正常内容已经默认为text-align: left;。因此它是左向的。您需要浮动位于正常内容的前面,因为您告诉浏览器从该行浮动。

你应该尝试不同的条件来观察它的效果:将浮动放在前面,后面,左右浮动,两者都清除,左右清除。

【讨论】:

谢谢。让它工作(第二种方法)。有什么更深入的解释为什么会这样? 我会尝试解释但请原谅我的英语 =) IE6 和 7 都这样做了,这是由它们令人震惊的吱吱作响的布局引擎造成的——它从来没有考虑到 CSS 构建,它仍然显示,即使在 IE8 中也是如此。这里的第二个选项(将 float:right 元素放在首位)可能是最常见的。【参考方案3】:

修复后尝试清除:

div:after 
    clear: both;
    content: ".";
    display: block;
    height: 0;
    visibility: hidden;

【讨论】:

试过这个没有成功。也许做错了什么。无论如何 - 让它工作。

以上是关于IE7浮动正确问题的主要内容,如果未能解决你的问题,请参考以下文章

选择性清除 IE7 中的浮动项目

由于 hasLayout,如何停止 IE7 清除浮动

这是 IE7 浮动错误吗?

为啥浮动元素中的浮动 <input> 控件在 IE7 中向右滑动太远,而在 Firefox 中却没有?

浮动元素在 IE7 中从容器中掉出,有时也在 WebKit 浏览器中

CSS autoclear浮动元素v2(也适用于IE7)