float:在IE7中直接换到新行

时间:2011-01-25 18:49:34

标签: css internet-explorer-7 css-float

我被困在浮动问题上一段时间,所以我希望社区可以再次帮助我。我有一个新的网络表单here。像往常一样,除了IE7(或IE8的兼容性)外,它看起来都很好。

由于某些原因,某些容器最终会在表单文本下方的新行上以表单字段结束。 CSS不是我的强项,否则我能够解决这个问题我肯定。谁能告诉我这里缺少什么?

我尝试将float:left添加到表单文本中,但结果却是另一个混​​乱。

5 个答案:

答案 0 :(得分:76)

尝试小改变标记:在没有它的项目之前放置具有浮动的项目(来自同一行)。它应该有所帮助。

答案 1 :(得分:2)

我知道自发布以来已经很长时间了,但我找到了一个我喜欢的解决方案。要点是在CSS中为IE7使用'expression'标签,只是将浮动元素移动到DOM中父元素的第一个元素。对于所有其他浏览器,它在语义上是正确的,但对于IE7,我们修改DOM以移动浮动元素。

就我而言,我有:

<div>
    <h1></h1>...<p>any other content...</p>
    <small class="pull-right"></small>
</div>

在我的CSS for pull-right中,我使用:

.pull-right {
    float:right;
    *zoom: ~"expression( this.runtimeStyle.zoom='1',parentNode.insertBefore( this,parentNode.firstChild ))";
}

结果是IE7将<small>移动为<div>的第一个元素,但所有其他浏览器都单独留下标记。

这可能对每个人都不起作用。从技术上讲,它正在修改标记,但仅限于IE7的DOM,它也是一个javascript解决方案。

另外,我知道表达式可能存在一些性能问题(速度很慢),所以也许它不是很理想,有很多这样的浮点数。就我而言,它运作良好,并允许我保持语义正确的HTML。

答案 2 :(得分:1)

如果你向左移动.formText,向左浮动你的span.required,然后向左浮动你的输入,你应该能够将它们排成一行。

我会稍微修改你的标记。您的<span class="formText">应该是<label>

例如:

<P class=formRow>
<label for="FirstName">First Name<SPAN style="FLOAT: left" class=required>*</SPAN></label>
<INPUT id=FirstName class=formTextbox name=FirstName> 
</P>

你的css会是这样的:

.formRow {
  clear: both;
}
  .formRow label {
     float: left;
     width: 150px;
  }
  .formRow input {
     float: left;
  }

答案 3 :(得分:0)

您可以尝试将文本的span标签设置为固定宽度,将它们向左浮动,并对要与之对应的输入字段执行相同操作。我还建议在表单上使用标签标签而不是span标签。没有真正可靠的理由,只是标签的确是为了你的span标签所做的。

答案 4 :(得分:0)

你想要做的是添加一个明确的:作为浮动元素的最后一个兄弟。

类似于:

<div style="float:left;">
  <!-- children of div here -->
</div>
<div style="clear:both;">
  <!-- leave empty -->
</div>