gpt4 book ai didi

html - 为什么元素移动位置 : relative still contribute to parent dimensions as if it hadn't been moved?

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:01 26 4
gpt4 key购买 nike

为什么已经设置了样式的html元素(比如div)

position: relative;
top: -50px;

仍然强制父元素具有相同的大小,就好像相对定位的元素没有移动一样?

让我提供一个示例(在 http://jsbin.com/ohebi4/2/edit 找到的实例)

<html>
<head>
<style>
article, aside, figure, footer, header, hgroup,
menu, nav, section { display: block; }

.parent{ position: relative; background-color: #000000; float: left; border: 1px solid red; }
.child1{ float: left; background-color: #888888;}
.child2{ float: left; background-color: #CCCCCC; }

.subchild{ position: relative; top: -45px; height: 30px; border: 1px solid green;}
.subchild2{ height: 30px; border: 1px solid green;}
</style>
</head>
<body>

<div style='clear: both; height: 50px;'></div>
<div class='parent'>
<div class='child1'>regular content</div>
<div class='child2'>content of child 2</div>
</div>
<div>Sample A</div>

<div style='clear: both; height: 50px;'></div>
<div class='parent'>
<div class='child1'><div class='subchild2'>subchild</div></div>
<div class='child2'>content of child 2</div>
</div>
<div>Sample B</div>

<div style='clear: both; height: 50px;'></div>
<div class='parent'>
<div class='child1'><div class='subchild'>subchild</div></div>
<div class='child2'>content of child 2</div>
</div>
<div>Sample C</div>

<div style='clear: both; height: 50px;'></div>
<div class='parent'>
<div class='child1'><span>child 1</span><div class='subchild'>subchild</div></div>
<div class='child2'>content of child 2</div>
</div>
<div>Sample D</div>
</body>
</html>

上面的标记创建了一个如下所示的页面:

alt text

示例 A:父 div 中只有几个 div,具有正常的内容和流程

示例 B:添加了一个子子 div,高度为 30px。正如预期的那样,它改变了父级的高度,从而揭示了“子级 b 的内容”下方的黑色背景

示例 C:子子项是使用 position:relative 重新定位的。请注意,即使此元素移动到所有元素之上,它仍然会影响父元素的高度,从而保持黑色背景显示

示例 D:示例 C 中的问题因在子子 div 之前添加跨度而加剧。

我理解 A 和 B 中的行为。我不明白的是 C 和 D 中的行为。如果使父元素变高的元素被重新定位,使其不再位于该空间中……为什么它仍然使父元素变高?

我预计(显然是不正确的)示例 C(和 D)看起来与 A 相同,只是在其上方添加了绿色“子项”框。

谁能向我解释这是为什么,以及如何让相对放置的元素像这样影响父元素的尺寸?

最佳答案

你必须设置:

position:absolute;

不让 .subchild 进入正常流程。由于您已经将 .parent 设置为 position:relative;,因此您无需执行任何其他操作。


根据 this , position:relative; 仍然计算成正常流。 position:absolute; 将使其不计算到正常流中,并将使用第一个父标签的左上角,以 position:relative; 作为原点。 (如果没有 parent 是 relative,那么它会假定视口(viewport),并且会表现得像它是 fixed。)position:fixed; 总是使用视口(viewport)左上角作为原点。

关于html - 为什么元素移动位置 : relative still contribute to parent dimensions as if it hadn't been moved?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com