小编典典

如何计算保证金最高百分比?

css

我知道这应该很简单,但是任何人都可以告诉我,为什么在将a margin-top: 50%应用于子项时,以下子项框为什么会超出其父项的容器。如何计算保证金最高百分比?

.container {

  background: lightblue;

  padding: 10px;

  height: 200px;

}



p {

  display: block;

  border:1px solid red;

  margin-top:50%;

}


<div class="container">

<p> Some Cool content</p>



</div>

子元素不应放置在200像素(父元素的高度)的50%处,即距顶部100像素的位置吗?


阅读 445

收藏
2020-05-16

共1个答案

小编典典

W3C规范

相对于生成的框的包含块的宽度计算百分比。请注意,“ margin-top”和“ margin-
bottom”也是如此。如果包含块的宽度取决于此元素,则结果布局在CSS 2.1中未定义。

有两个很好的理由使垂直边距基于包含块的宽度:

水平和垂直一致性

当然,有一个速记属性,可让您为块的所有四个边指定边距:

margin: 10%;

扩展为:

margin-top: 10%;
margin-right: 10%;
margin-bottom: 10%;
margin-left: 10%;

现在,如果您编写了上面的任何一篇,您可能希望该块的所有四个边的边距都相等,不是吗?但是,如果左边距的边距和右边距的边距是基于容器的宽度,而margin-
top和margin-bottom是基于容器的高度,则它们通常是不同的!

避免循环依赖

CSS将内容布置在垂直于页面向下堆叠的块中,因此,块的宽度通常完全由其父代的宽度决定。换句话说,您可以计算一个块的宽度,而不必担心该块内部的内容。

块的高度是另一回事。通常,高度取决于其内容的总高度。更改内容的高度,然后更改块的高度。看到问题了吗?

要获取内容的高度,您需要知道应用于内容的顶部和底部边距。如果这些边距取决于父块的高度,那么您就麻烦了,因为您无法在不知道另一个的情况下计算一个!

在容器的宽度上放置垂直边距可以打破这种圆形依赖性,并可以对页面进行布局。

例:

这是小提琴。和代码:

的HTML

<div class="container">
  <p id="element"> Some Cool content</p>

</div>

<p>
  MORE TEXT
</p>

的CSS

.container {
  background: lightblue;
  padding: 10px;
  height: 100px;
  width: 500px;
}

p {
  display: block;
  border: 1px solid red;
  margin-top: 50%;
}

JS

window.onload = function(evt) {

  var element = document.getElementById("element"),
    style = element.currentStyle || window.getComputedStyle(element);

  element.textContent = "the margin-top is : " + style.marginTop;
};
2020-05-16