【发布时间】:2020-12-09 09:04:08
【问题描述】:
父母和孩子都有box-sizing: border-box;。根据 MDN:
将高度定义为包含块高度的百分比。
那么孩子的身高也应该是500px,但显然不是,它有父母的内容高度,不是 父母的高度。在包括 IE 在内的许多浏览器上尝试过这段代码,它们的工作原理都是一样的,这是为什么呢?
<!DOCTYPE html>
<html lang="zh-Hans">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css" />
<title>Test</title>
<style>
body {
background: #000;
}
.parent {
border: 50px solid blue;
padding: 20px;
width: 500px;
height: 500px;
background: green;
overflow: auto;
}
.child {
background: red;
height: 100%;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
【问题讨论】:
-
因为您已经为
parent元素设置了padding: 20px,所以您的childdiv 没有达到100% 的高度。 -
但是父级有
box-sizing: border-box;,它的高度也包括填充,所以父级的高度仍然是500px,根据文档:“将高度定义为包含的百分比块的高度。”,孩子的高度应该是 500px并溢出。 -
@Wenfang 是的,但没关系,事实上,相对于父级的内容,100% 更小。 (请记住,背景属性也会使填充着色!)
-
“但显然不是,它具有父级内容高度的高度,而不是父级的高度。” - 你引用的部分说它指的是 包含块 自己,developer.mozilla.org/en-US/docs/Web/CSS/Containing_block 解释说,“大多数情况下,包含块是元素最近的块级祖先的内容区域 […]” - 那么你在哪里看到任何这里的实际差异?
-
Yoshi 在他们的回答中解释得很好,看看吧。但是,如果您不希望您的元素受到其父级填充的限制,则将父级的位置设置为相对,将子级的位置设置为绝对,并将左侧和顶部设置为 0,但这也是不够的,它会导致子级的宽度和高度为 400px,因为父元素的边框将是子元素的限制