有没有办法完全禁用边距折叠?我发现的唯一解决方案(称为“不折叠”)需要使用1px边框或1px填充。我觉得这是不可接受的:多余的像素毫无理由地使计算复杂化。是否有更合理的方法来禁用边缘折叠?
当前回答
我有类似的问题,边际崩溃,因为父母有位置设置为相对。下面是可以用来禁用边距折叠的命令列表。
这里是测试场地
只需尝试将任何父-fix*类分配给div.container元素,或将任何类children-fix*分配给div.margin。选择一个最适合你需要的。
When
边距折叠被禁用,红色背景的div.absolute将被放置在页面的顶部。 div.absolute将与div.margin位于相同的Y坐标上
html, body { margin: 0; padding: 0; } .container { width: 100%; position: relative; } .absolute { position: absolute; top: 0; left: 50px; right: 50px; height: 100px; border: 5px solid #F00; background-color: rgba(255, 0, 0, 0.5); } .margin { width: 100%; height: 20px; background-color: #444; margin-top: 50px; color: #FFF; } /* Here are some examples on how to disable margin collapsing from within parent (.container) */ .parent-fix1 { padding-top: 1px; } .parent-fix2 { border: 1px solid rgba(0,0,0, 0);} .parent-fix3 { overflow: auto;} .parent-fix4 { float: left;} .parent-fix5 { display: inline-block; } .parent-fix6 { position: absolute; } .parent-fix7 { display: flex; } .parent-fix8 { -webkit-margin-collapse: separate; } .parent-fix9:before { content: ' '; display: table; } /* Here are some examples on how to disable margin collapsing from within children (.margin) */ .children-fix1 { float: left; } .children-fix2 { display: inline-block; } <div class="container parent-fix1"> <div class="margin children-fix">margin</div> <div class="absolute"></div> </div>
这里是jsFiddle的例子,你可以编辑
其他回答
事实上,有一个完美无缺的方法:
显示:flex; flex-direction:列;
只要你能接受IE10及以上版本
.container { 显示:flex; flex-direction:列; 背景:# ddd; 宽度:15他们; } .square { 保证金:15 px; 高度:3他们; 背景:黄色; } < div class = "容器" > < div class = "广场”> < / div > < div class = "广场”> < / div > < div class = "广场”> < / div > < / div > < div class = "容器" > < div class = "广场”> < / div > < div class = "广场”> < / div > < div class = "广场”> < / div > < / div >
溢出:隐藏可以防止边距崩溃,但它并不是没有副作用-即它…隐藏溢出。
除了这一点和你提到的,你只需要学会接受它,并为它们真正有用的那一天而学习(每3到5年一次)。
为了防止姐妹页边距崩溃,添加display: inline-block;给兄弟姐妹中的一个(一个就足够了,但你可以给两个都加)。
保证金暴跌主要有两种类型:
相邻元素之间的折叠边距 缩小父元素和子元素之间的边距
只有在后一种情况下,使用填充或边框才能防止崩溃。此外,任何溢出值与父对象的默认值(可见)不同,都将防止崩溃。因此,overflow: auto和overflow: hidden具有相同的效果。也许使用hidden的唯一不同之处在于,如果父对象具有固定的高度,则隐藏内容会导致意想不到的后果。
其他属性,一旦应用到父,可以帮助修复这种行为:
浮动:左/右 位置:绝对的 显示方式:inline-block / flex / grid
您可以在这里测试所有这些:http://jsfiddle.net/XB9wX/1/。
我应该补充一点,像往常一样,Internet Explorer是个例外。更具体地说,在IE 7中,当为父元素指定某种布局(比如宽度)时,边距不会折叠。
来源:Sitepoint的文章“崩溃边缘”
每个基于webkit的浏览器都应该支持属性-webkit-margin-collapse。还有一些子属性仅用于设置顶部或底部边距。您可以为它设置值collapse(默认值)、discard(如果有相邻的边距,则将边距设置为0)和separate(防止边距崩溃)。
我已经在2014年版本的Chrome和Safari上进行了测试。不幸的是,我不认为这将在IE支持,因为它不是基于webkit。
阅读苹果的Safari CSS参考以获得完整的解释。
如果你查看Mozilla的CSS webkit扩展页面,他们将这些属性列为私有属性,并建议不要使用它们。这是因为它们可能不会很快进入标准CSS,只有基于webkit的浏览器支持它们。
推荐文章
- CSS:控制项目符号和<li>之间的空格
- 调试打印样式表的建议?
- 为什么我的CSS3媒体查询不能在移动设备上工作?
- 下一个元素的CSS选择器语法是什么?
- 是否有'box-shadow-color'属性?
- 在jQuery中的CSS类更改上触发事件
- 我如何用CSS跨浏览器绘制垂直文本?
- 如何获得box-shadow在左侧和右侧
- 相对定位一个元素,而不占用文档流中的空间
- 禁用身体滚动
- 使用jQuery动画addClass/removeClass
- 在一个CSS宽度的小数点后的位置是尊重?
- 检测输入是否有文本在它使用CSS -在一个页面上,我正在访问和不控制?
- 我怎么能选择一个特定的类的最后一个元素,而不是父里面的最后一个孩子?
- @media screen和(max-width: 1024px)在CSS中是什么意思?