我有两个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移动到其中,如下图所示:
这是我的相关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;
}
显然使用填充工作,但我想更合适并使用边距。如何设置上边距并将标题下移到容器中而不用移动容器?
答案 0 :(得分:25)
这是由于margin collapsing:
块的顶部和底部边距有时会合并(折叠) 单个保证金,其大小是合并的最大边际 进入它,一种称为边缘崩溃的行为。
这导致父元素反向继承子元素上边距。
您可以通过在子元素
之前添加
来防止这种情况发生
....或将以下任何一项应用于父母:
如果将display:inline-block;
设置为宽度为100%,则将{{1}}添加到父级可能是首选项
答案 1 :(得分:1)
只需在父级上使用box-sizing: border-box;
并在其中设置padding
而不是margin-top
。无论如何它都会帮助你在所有方面保持一致的间距
答案 2 :(得分:1)
只需在父元素中添加一些top-padding。甚至1px,它将修复它。
答案 3 :(得分:1)
我实际上认为这个答案更好:
https://stackoverflow.com/a/49075574/2387316
是的,我知道这是我自己的答案,但我认为重要的是我们不要添加随机的填充位,无缘无故地更改盒子大小,添加虚假元素DOM,或更改显示/填充只是为了解决显示问题。这些解决方案都会导致问题:搜索引擎优化更糟糕,尝试做其他事情时难以预测的大小调整行为,定位和显示更改引起的烦恼等等。这个解决方案对SEO有好处,可扩展,没有其他有形的尝试用你的元素做其他事情时的效果。