css - 使用 CSS 清除修复和展开边距而没有副作用?

标签 css css-float margin

什么是通用使用 CSS 清除和取消折叠边距而没有副作用(也没有额外的 HTML 元素)的好方法?

以下会导致副作用(并希望避免它们):

  • 设置溢出:隐藏溢出:自动: 剪辑 box-shadow、CSS 转换和其他可能希望在框外显示的内容。因此,它不能在多种情况下使用(但在其他方面效果很好)。
  • 设置borderpadding:明显的定位/尺寸效果。

最佳答案

清除和折叠修复,基于 this clear fix , 加上边距 uncollapse:

.group:before, /* :before to uncollapse the top margin */
.group:after{
    display: block;
    clear: both; /* clear fix */
    content: "\a0 "; /*   - just a space doesn't uncollapse margins */
    visibility: hidden; /* make sure not to show anything */
    height: 0;
}
.group{
    zoom: 1; /* solves it all for IE < 8, and doesn't hurt other browsers */
}

演示:jsFiddle , IE7 render with netrenderer

请注意 content: "\a0 "; 等同于   并用于代替非空白字符(例如 .) 这样当您选择 block 并复制它时,您不会获得额外的可见字符,否则在某些浏览器(例如 IE9)中会发生这种情况。

此解决方案的缺点是:

  • :before:after 被定义,所以如果要使用它们需要特别小心。
  • 对于每个要应用此修复的新选择器,您必须指定选择器 3 次。
  • 不是很短/琐碎。

YUI, described in this article 使用了类似的解决方案(但没有  )。

关于css - 使用 CSS 清除修复和展开边距而没有副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007322/

相关文章:

html - div 内的 float div 具有奇怪的间距

html - 如何在 Twitter Bootstrap 中删除不需要的边距

jquery - 如何正确滑动导航栏

css - 用css设置字符宽度

html - IE9 中的负边距和 float

html - 将 div 与第一个并排对齐,占据第二个 div 不需要的整个宽度

css - 产品 div 的定位变得困惑

css - 对齐 html 表以使两者的垂直线相同

CSS - Margin Top 属性不起作用

css - 我的页脚下方的边距从何而来?