【问题标题】:CSS Margin of internal div extending past surrounding div内部 div 的 CSS 边距延伸到周围的 div
【发布时间】:2016-04-17 17:55:44
【问题描述】:

请看下面的小提琴: https://jsfiddle.net/b6bpzsg7/

它包含 3 个投资组合项目,它们是带有类舷窗的 div,只有左右填充以偏移到邻居。

<div class="col-md-4 porthole">
    <div class="portbox text-center">
         <div class="portplace">
            <div>Coming soon</div>
          </div>
          <header>Second</header>
     </div>
</div>

内部 div 有一个 portbox 类,我可以在 chrome developer 中看到它不会垂直扩展以占据它周围的所有舷窗。 portbox 没有填充、边框或边距

在 portbox 中有一个占位符 div,其类 portplace 周围有 15 像素的边距,顶部和底部的填充为 30 像素。在 chrome 开发人员中,我看到上边距从封闭的端口箱延伸到外部舷窗的上边距。

谁能启发我?

编辑

   .portrow {
        margin-left: 20px;
        margin-right: 20px;
        margin-bottom: 10px;
        background-color: #888;
    }

    .porthole {
        padding: 0px 15px 0px 15px;
        overflow: auto;
    }   

    .portbox {
        border-width: 1px;
        border-color: #000;
        border-radius: 5px;
        background-color: #fff;
        box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2); 
    }

    .portplace {
        margin: 15px 15px 15px 15px;
        padding: 30px 0px 30px 0px;
        background-color: lightgray;
        color: darkslategrey;
    }

【问题讨论】:

  • 发布您的 CSS。我猜你可能并不打算在那里使用保证金,它正在推动你的容器。如果您查看第一个屏幕截图,请注意蓝色如何高于内容 - 这是因为您在内部 div 上具有 15px 的边距。我的建议是不要在那里使用保证金。
  • 它在小提琴中,但为了方便我会编辑

标签: css twitter-bootstrap


【解决方案1】:

overflow: auto 添加到您的父级div

https://jsfiddle.net/pavy/b6bpzsg7/2/

.portbox {
    border-width: 1px;
    border-color: #000;
    border-radius: 5px;
    background-color: #fff;
    box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);
    overflow: auto; // you need this
}

阅读折叠边距:

http://www.w3.org/TR/CSS2/box.html#collapsing-margins

https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing

【讨论】:

【解决方案2】:

添加overflow="hidden"到portbox来解决这个问题。

【讨论】:

  • 你能解释一下为什么会这样吗?
  • 在 Mozilla 的 Parent 和 first/last child 下有一个很好的解释——“如果没有边框、内边距、内联内容或间隙来将块的边距顶部与边距分开- 它的第一个子块的顶部,或者没有边框、填充、内联内容、高度、最小高度或最大高度,以将块的边距底部与其最后一个子块的边距底部分开,然后这些边距折叠. 折叠的边距最终在父级之外。”这是关于 Mastering Margins 的完整文章:developer.mozilla.org/en-US/docs/Web/CSS/CSS_Box_Model/…
  • 你可以这样想......一个块级元素有一个 (0,0) 点,它位于填充的顶部和左侧,而不是该元素的边距。例如,如果您想将背景图像放入或绝对定位子对象,它会从填充中寻找 (0,0) 点(如果有)。当溢出是静态的(默认)时,它只需要它的第一个孩子的 (0,0) 点并将其匹配到它自己的 (0,0) 点。这有意义吗?
  • 顺便说一句,我个人喜欢 overflow: hidden over overflow: auto 因为我对滚动条不感兴趣,如果你有一个固定尺寸的容器并且内容继续超过容器的底部或右侧边缘。
  • 确实有道理。 (就 css 的意义而言 :) )。对于来自经典 UI 设计的人来说,这让 css 变得相当困难。没有什么能直接起作用。与 Android 或 iOS 的屏幕设计相比,它几乎总是按预期工作,并留出更多时间和精力进行微调。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
相关资源
最近更新 更多