当前位置: 首页 > 知识库问答 >
问题:

为什么这种CSS边距顶部样式不起作用?

宋翔
2023-03-14

我尝试在另一个div中添加一个div的边距值。所有的工作都很好,除了顶部的值,它似乎被忽略了。但为什么?

代码:

null

#outer {
    	width: 500px; 
    	height: 200px; 
    	background: #FFCCCC;
    	margin: 50px auto 0 auto;
    	display: block;
}
#inner {
    	background: #FFCC33;
    	margin: 50px 50px 50px 50px;
    	padding: 10px;
    	display: block;
}
html lang-html prettyprint-override"><div id="outer">
  <div id="inner">
  	Hello world!
  </div>
</div>

null

W3学校没有解释为什么margin会这样做。

共有2个答案

谭高峯
2023-03-14

尝试在内部div上使用display:inline-block;

#outer {
    width:500px; 
    height:200px; 
    background:#FFCCCC;
    margin:50px auto 0 auto;
    display:block;
}
#inner {
    background:#FFCC33;
    margin:50px 50px 50px 50px;
    padding:10px;
    display:inline-block;
}
晏修诚
2023-03-14

您实际上看到了#inner元素的上边距折叠到#outer元素的上边距中,只保留了#outer边距(尽管在您的图像中没有显示)。两个框的上边缘是对齐的,因为它们的边距相等。

以下是W3C规范中的相关要点:

在CSS中,两个或多个框(可能是或不是同级框)的相邻边距可以组合成一个边距。这样组合的边距被称为折叠边距,由此产生的组合边距被称为折叠边距。

相邻的垂直边距折叠[...]

两个边距相邻当且仅当:

  • 两者都属于参与相同块格式上下文的流内块级框
  • 没有线条框、没有间隙、没有填充和没有边框分隔它们
  • 两者都属于垂直相邻的框边,即形成以下对之一:
    • 框的上边距及其第一个入流子框的上边距

    您可以执行以下任一操作来防止边距收缩:

    • 浮动div元素
    • 使您的div元素中的任何一个内联块
    • #outer溢出设置为auto(或visible以外的任何值)

    上述选项防止保证金崩溃的原因是:

    • 浮动框与任何其他框之间的边距不会折叠(即使是浮动框与其流入子框之间的边距也不会折叠)。
    • 建立新块格式上下文的元素(如浮点和具有“overflow”而不是“visible”的元素)的边距不会与其在流中的子元素一起折叠。
    • 内联块框的边距不会折叠(即使与它们的流入子框一起也不会折叠)。

    左右边距的行为符合您的预期,因为:

    水平边距从不折叠。

 类似资料:
  • 问题内容: 我尝试在另一个div内的div上添加边距值。除最高值外,其他所有方法均正常运行,似乎被忽略了。但为什么? 我的期望: 我对保证金的期望是:50px 50px 50px 50px; 我得到的是: 我得到的保证金是:50px 50px 50px 50px; 码: 问题答案: 您实际上看到的是元素的顶部边缘塌陷到元素的顶部边缘,仅保留了边缘空白(尽管未在图像中显示)。两个框的顶部边缘彼此齐平

  • 问题内容: Left 为什么“主数据”在上面的代码中不起作用? 问题答案: 您可以将两个浮动div放入 另一个 设置为“溢出:隐藏”的div中: 编辑 —为这个已有5年历史的答案添加一点点:我认为造成混乱的原因是_利润率下降的_ 过程有些复杂。使用OP中原始HTML的一个好技巧是添加一个CSS规则,如下所示: of!现在(没有我的额外要求)可以正常工作!好吧,除了边界上的多余像素。特别是,我 认为

  • 我对NAT表的理解是 NAT表仅映射(专用IP:端口)->(公用IP:端口) 它不关心协议或套接字连接 主机A关闭套接字并在同一本地端口(100)上打开新监听套接字 但这没用!我发现了其他复杂的实现,但我很好奇这种方式有什么问题。

  • 问题内容: 我不确定我是否完全理解这两者之间的区别。 有人可以解释为什么我要在另一个上使用它们,以及它们之间的区别吗? 问题答案: 用于通过使用属性来调整元素。 用于测量相对于上一个元素到元素的外部距离。 此外,行为可以依赖于位置,种类而不同,或。

  • 问题内容: 我有以下代码: 我希望它能打印a = 2 b = 1,但它却打印相反的东西。因此很明显,swap方法不会交换a和b值。为什么? 问题答案: 这与整数的不变性无关。它与 Java是值传递 ,该死 的事实有关! (不烦恼,只是文章标题:p) 总结一下:您实际上不能在Java中创建交换方法。您只需要在需要的地方自己进行交换即可。反正这只是三行代码,所以应该不成问题:)

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display: