【发布时间】:2014-01-14 15:29:18
【问题描述】:
我正在尝试设置定义列表的样式,以便dt 标记开始新行,并且可以在同一行上跟随任意数量的dd 元素。在现代浏览器中,这很简单
dt {
float:left;
clear:left;
}
dd {
float:left;
}
然而,在 IE7 中,如果清除元素有浮动,则后续浮动不受影响。 (example) 这个错误有什么解决方法吗?我一直在环顾四周,但通常建议的解决方案似乎都不适用:
- 由于这是一个定义列表,我无法将元素包装在
div的同一行中。 - 我不想使用不可见的非浮动清除元素 - 它必须是
dt或dd,以及使用定义列表而不是表或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