【问题标题】:Floated+cleared element not affecting following floated elements in IE7 - is there a workaround?浮动+清除元素不影响 IE7 中的后续浮动元素 - 有解决方法吗?
【发布时间】:2014-01-14 15:29:18
【问题描述】:

我正在尝试设置定义列表的样式,以便dt 标记开始新行,并且可以在同一行上跟随任意数量的dd 元素。在现代浏览器中,这很简单

dt {
    float:left;
    clear:left;
}
dd {
    float:left;
}

然而,在 IE7 中,如果清除元素有浮动,则后续浮动不受影响。 (example) 这个错误有什么解决方法吗?我一直在环顾四周,但通常建议的解决方案似乎都不适用:

  • 由于这是一个定义列表,我无法将元素包装在 div 的同一行中。
  • 我不想使用不可见的非浮动清除元素 - 它必须是 dtdd,以及使用定义列表而不是表或 span- brsoup 是有语义标记的,这会被纯粹的表现形式的dt/dd 元素搞砸。
  • 据我所知,当每行的元素数量不固定时,基于触发hasLayout(从而触发内联块行为)的方法(例如this)不起作用。 (另外,我不想打扰剥离空格。)
  • 我无法让this solution 使用dl 而不是ul;即使设置 display:list-item 也无济于事。

还有其他方法可以强制 IE7 模仿标准浮动行为吗?

【问题讨论】:

  • 我想我在回答时可能误解了您的原始帖子,但无论如何,我看不到您在 Firefox 中使用上述 CSS 描述的行为。代码和输出:imgur.com/mlLiy.png
  • @Nathan Taylor:抱歉,我把这两种风格互换了(尽管我给出的example 是正确的)。现已修复。
  • 你试过 inline-block 了吗?
  • 使用dt/dd吗?
  • @Nathan Taylor:我更愿意,在你有一个标签和一个或多个与之关联的项目(例如表单字段)的各种情况下,这是一种语义上有意义的方式。如果所有其他方法都失败了,我可以使用我提到的基于ul 的解决方案,但我认为这可能有一个技巧。 (通过谷歌搜索很难找到解决 IE7 浮动问题的方法,因为它有一些非常常见的浮动错误,并且结果会淹没不太常见的错误。)

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


【解决方案1】:

尝试使用inline-block 代替浮点数。

dl { 
    line-height:1.2em; 
    padding-left:1em; 
} 
dt { 
    display:block; 
    margin:0 0 -1.2em -1em; 
} 

dd { 
    display:inline-block; 
    display:inline !ie; 
    margin-left:1em; 
} 

感谢提出这个问题的死亡阴影。

【讨论】:

  • 你能举个例子或更多细节吗?
  • 示例在链接中......(我是添加它的那个)。您无法理解链接吗?
  • 这是对如何在 IE6/7 中实现 inline-block 行为的描述。你如何使用内联块来模拟浮动?更具体地说,如何告诉内联块从新行开始?
  • 哦,理解错了目的。嗯,您可以在每个 dt 之前添加一个元素来清除它,但您不想这样做。您也可以使用多个dl 元素,但也许您不想这样做。我认为没有适当的干净解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多