为什么设置此子元素的上边距将其父容器向下推?

时间:2014-05-21 15:52:58

标签: html css

我有两个div:

<div id="headercontainer" data-type="background" data-speed="5"> 
    <div id="headersubcontainer">
        <h1>Simple and Cost Effective Web Solutions</h1>  
    </div> 
</div>

<div id="teamcontainer" data-type="background" data-speed="5"> 
    <div id="teamsubcontainer"> 
        <h1>Developed by a dedicated team</h1> 
    </div> 
</div> 

都有100%的宽度和800px的高度。第一个标题是我设置了一个上限:160px。如图所示,它不会将标题下移到其父div中,而是将父div移动到其中,如下图所示:

webpage

这是我的相关CSS:

h1{
    font-size: 48px;
    font-family: $header-font-stack; 
    font-weight: 100;
    width: 400px;
}

#headercontainer{
    width: 100%; 
    height: 800px;
    background-image: image-url("background.jpg");
    background-position: center top;
    background-repeat: no-repeat;
}

#headercontainer h1{
    text-align: center;
    margin: 0px auto;
    margin-top: 160px;
    color: #610B21;
}

显然使用填充工作,但我想更合适并使用边距。如何设置上边距并将标题下移到容器中而不用移动容器?

4 个答案:

答案 0 :(得分:25)

这是由于margin collapsing

  

块的顶部和底部边距有时会合并(折叠)   单个保证金,其大小是合并的最大边际   进入它,一种称为边缘崩溃的行为。

这导致父元素反向继承子元素上边距。

您可以通过在子元素

之前添加&nbsp;来防止这种情况发生

Demo Fiddle

....或将以下任何一项应用于父母:

  1. float:left / right
  2. 位置:绝对
  3. display:inline-block
  4. 如果将display:inline-block;设置为宽度为100%,则将{{1}}添加到父级可能是首选项

    Demo Fiddle

答案 1 :(得分:1)

只需在父级上使用box-sizing: border-box;并在其中设置padding而不是margin-top。无论如何它都会帮助你在所有方面保持一致的间距

JSFIDDLE

答案 2 :(得分:1)

只需在父元素中添加一些top-padding。甚至1px,它将修复它。

答案 3 :(得分:1)

我实际上认为这个答案更好:

https://stackoverflow.com/a/49075574/2387316

是的,我知道这是我自己的答案,但我认为重要的是我们不要添加随机的填充位,无缘无故地更改盒子大小,添加虚假元素DOM,或更改显示/填充只是为了解决显示问题。这些解决方案都会导致问题:搜索引擎优化更糟糕,尝试做其他事情时难以预测的大小调整行为,定位和显示更改引起的烦恼等等。这个解决方案对SEO有好处,可扩展,没有其他有形的尝试用你的元素做其他事情时的效果。