[英]Middle align a div vertically in another div using percentage value
<!DOCTYPE html>
<html lang="en">
<head>
<title>tested html</title>
<meta charset="utf-8">
</head>
<body>
<div id="outer-div" style="height:20em;background-color:red;">
<div id="inner_div" style="height:50%;margin-top:25%;margin-bottom:25%;">This the inner-div to be centered inside outer-div</div>
</div>
</body>
</html>
已经有很多解决方案在另一个内部(仅垂直)居中,但我只是想知道为什么上面的inner_div不能在其父div(outer-div)中居中?
下面的图片是我认为的html渲染结果,但实际上结果完全不同 - 外部div被内部div的边距设置压低了。 所以为什么?
如果要在父div中移动子div,请使用padding-top
和padding-bottom
而不是margin
。
<div id="outer-div" style="height:20em;background-color:red;">
<div id="inner_div" style="height:50%;padding-top:25%;padding-bottom:25%;">This the inner-div to be centered inside outer-div</div>
</div>
因为填充在容器内部留出空间,并且边缘在容器外部提供空间。 这是基本概念。
编辑:
为了澄清你的困惑我添加了background-color:yellow
到内部div。
小提琴链接包含margin-top
作为内部div从外部占用空间它也将外部div移动到下面,因为它是position:static
。
相反给position:absolute
是这里将发外层div移动到下方。
这两个图像将解释更多。
在上面的图像中,您可以检查内部div是否占用保证金。 检查指针,黄色是检查元素可以看到的边距。
在上图中,没有边距显示外部div。 当我们指出外部div。 但它只是因为内部div而移动下面的div。
第1部分:折叠边距。
外部div被内部div的边缘设置推下来。 所以为什么?
这是一种普通的HTML呈现行为,称为折叠边距 。 摘自规范:
相邻的垂直边距坍塌[...]两个边距位于一个方框的上边缘和第一个流入的儿童的上边缘
为了解释一下,如果您有父母及其第一个孩子,并且其中至少有一个孩子具有上边距,则现有边距中的较大者将应用于父母。 (除了在一些定义明确的情况下 - 阅读规格以了解它们是什么。)
第2部分。没有额外元素的居中。
我只是想知道为什么上面的inner_div不能在其父div(outer-div)中居中?
它实际上可以通过使用具有对齐内容的 Flexbox和在中心处的对齐内容来集中。
.parent { width: 300px; height: 200px; background-color: Green; display: flex; justify-content: center; align-items: center; } .child { width: 200px; height: 100px; background-color: Red; }
<div class="parent"> <div class="child"></div> </div>
还有其他技术可以实现相同的结果(通过混合表和内联显示模式),但我不建议使用本世纪的那些。
所有你需要的是overflow: auto
为父div
,实际上当你为一个孩子设置margin-top
它也自动推父,你必须设置overflow: auto
或hidden
。
#outer-div {
background: red;
width: 100%;
height: 50%;
overflow: auto;
}
正如我在评论中告诉你的那样,我可以向你推荐一个更好的方法来建立一个div中心。
#inner_div {
width: 100%;
height: 25%;
background: blue;
color: white;
top: 50%;
position: relative;
transform: translate(0, -50%);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.