我有一个包含另一个div(子)的div(父)。Parent是body中的第一个元素,没有特定的CSS样式。当我设置
.child
{
margin-top: 10px;
}
最终的结果是我的子的顶部仍然与父对齐。我的父结点向下移动10px,而不是子结点向下移动10px。
我的DOCTYPE被设置为XHTML Transitional。
我错过了什么?
编辑1
我的父母需要有严格定义的尺寸,因为它有一个背景,必须显示在它下面从上到下(像素完美)。所以不能在上面设置垂直边距。
编辑2
这种行为在FF、IE和CR上都是一样的。
在DIVs内的子元素中找到了一个边距的替代方法,您还可以添加:
.parent { overflow: auto; }
or:
.parent { overflow: hidden; }
这可以防止边际崩溃。边框和填充也是如此。
因此,你也可以使用以下方法来防止最高利润崩溃:
.parent {
padding-top: 1px;
margin-top: -1px;
}
2021年更新:如果你愿意放弃IE11支持,你也可以使用新的CSS结构display: flow-root。有关块格式上下文的全部细节,请参阅MDN Web文档。
按大众要求更新:
缩边距的全部意义在于处理文本内容。例如:
H1, h2, p, ul {
margin-top: 1 em;
margin-bottom: 1 em;
轮廓:1px蓝色虚线;
}
Div{大纲:1px固体红色;}
<标题>标题!< / h1 >
< div class = " text " >
< h2 >标题!< / h2 >
< p > < / p >款
< / div >
< div class = " text " >
< h2 >标题!< / h2 >
< p > < / p >款
< ul >
<李>列表项李< / >
< / ul >
< / div >
由于浏览器折叠了页边距,因此文本将按照您所期望的方式显示,并且<div>包装器标记不会影响页边距。每个元素确保其周围有间距,但间距不会加倍。<h2>和<p>的裕度不会叠加,而是相互滑入(它们坍缩)。<p>和<ul>元素也是如此。
可悲的是,在现代设计中,当你明确地想要一个容器时,这个想法会让你感到不快。这在CSS中被称为新的块格式化上下文。溢出或边距技巧会给你这个。
是关于保证金崩溃的。
块的顶部和底部边距有时会合并(折叠)为单个边距,其大小是单个边距中最大的(如果它们相等,则仅为其中之一),这种行为称为边距折叠。
根据具体情况,有几种解决方案。
一种解决方案是改变子节点的显示模式。
.child {
display: inline-block;
}
也很高兴知道。边距收缩不适用于柔性容器或网格容器。
.parent {
display: flex;
flex-direction: column;
}
或者使用父元素的填充而不是子元素的边缘。改变溢出或浮动属性也会有所帮助。或者绝对位置。这取决于你的布局。