【发布时间】:2014-11-27 01:56:33
【问题描述】:
如果我有一个容器,其中的元素内部有一个边距,那么该元素的边距不会将其向下推到该容器内,而是向下推容器本身。仅此一项,虽然很烦人,但可能正是 w3c 决定它的工作方式。但奇怪的是,如果我向容器添加边框,该元素现在将在容器内向下推,然后容器将与上面的元素齐平(我想要的)。到目前为止,我使用的大多数容器都有边框,这样我就可以知道一切是如何排列的,但是现在我决定开始添加背景颜色并删除边距以使一切看起来更好,我正在运行大量没有应用任何容器背景颜色的容器之间的间隙问题。
如果我不清楚,我创建了一个 jsfiddle 来演示该问题,正如您通过查看 html / js 所看到的那样,单击按钮只会切换边框的存在,而不会切换其他任何内容。然而,容器之间的所有边距都会根据边界是否存在而变化。
http://jsfiddle.net/Tysonzero/p5fgjmrn/
HTML:
<div class="first-div">
</div>
<div class="second-div">
<div class="inner-div">Test</div>
</div>
<button onclick="toggle()">Toggle Border</button>
CSS:
*
{
box-sizing: border-box;
margin: 0;
padding: 0;
}
.first-div
{
background-color: red;
min-height: 50px;
}
.second-div
{
background-color: blue;
min-height: 50px;
}
.inner-div
{
margin: 10px;
text-align: center;
}
JS:
toggle = function() {
if (document.getElementsByClassName('second-div')[0].style.border) {
document.getElementsByClassName('second-div')[0].style.border = "";
}
else {
document.getElementsByClassName('second-div')[0].style.border = "1px solid";
}
};
我希望它始终像 IMO 那样以边框的方式工作,这更有意义,而对于我的项目来说,这正是我所需要的。我真的希望我不必做一些骇人听闻的事情,例如为所有内容添加 1px 透明边框并在必要时对其进行补偿。我试过使用溢出:自动;或溢出:隐藏。但两者都不等于有边界。溢出:自动;如果内部元素大于父元素,或者如果您以某种方式使用负边距而添加边框则不会,有时会创建滚动条,溢出:隐藏;完全防止滚动,而添加边框则不会。
有谁知道我可以如何强制浏览器将所有内容都视为有边框(或至少使此类问题不会发生)并且任何人都可以解释这种行为吗?这似乎是无意的,但我可能是错的。
【问题讨论】:
-
我猜这是关于折叠边距,当没有边框时!
-
我不确定您为什么使用内部 div 添加边距。如果这对您有用,我会将边距添加到 .second-div 。见jsfiddle.net/AuroraArcade/p5fgjmrn/2
-
我希望两个容器齐平。我只想将元素与容器顶部分开。至于不同的元素,但使用相同的容器,我想要不同的边距,我不能只在第二个容器上放置填充。