gpt4 book ai didi

html - 与 float 和 margin 相关的奇怪行为

转载 作者:太空狗 更新时间:2023-10-29 15:10:51 26 4
gpt4 key购买 nike

问题是 div 与 .parent 类的位置。它不在窗口的顶部,而是在下方100px,正好是.childmargin-bottom的值。

谁能解释一下这里发生了什么?

这是我的 HTML 文档:

<html>
<head>
<style>
.parent {
}
.child {
margin-bottom:100px;
}
button {
float:left;
height:30px;
}
</style>
</head>
<body>
<div class="parent">
<div class="child">
<button>click me!</button>
</div>
</div>
</body>
</html>

最佳答案

这是由于不完整处理 floats引起的 not mastering Margin Collapsing

Margin Collapsing on Empty blocks
If there is no border, padding, inline content, height, or min-height to separate a block's margin-top from its margin-bottom, then its top and bottom margins collapse.

您需要使用 overflow:auto; 解决 float 元素问题在父级
通过清除 float 即:using a class :

.clear:before,
.clear:after{
content: " ";
display: table;
}
.clear:after{
clear: both;
}

注意:使用背景色将有助于您在未来解决此类问题:

"A parent has no visible background-color?" 99% a float issue!

利润率下降问题:

.parent {
background: red;
}
.child {
background: gold;
margin-bottom:100px;
}
button {
float:left;
height:30px;
}
<div class="parent">
<div class="child">
<button>Left floated Button</button>
</div>
</div>

.child 以来,我们有崩溃的边距 没有(非 float )内容或任何集合 height 添加到它的盒子模型所以 button折叠到最近的可用空间 - 向左浮动。
只需添加 height: 1px;或者只是 .child 中的一个文本字符您会看到崩溃问题“已修复”。

清除 float

使用我们的 .clear (或 overflow:auto; )在 parent 身上:

.parent {
background: red;
}
.child {
background: gold;
margin-bottom:100px;
}
button {
float:left;
height:30px;
}

.clear:before,
.clear:after{
content: " ";
display: table;
}
.clear:after{
clear: both;
}
<div class="parent clear">
<div class="child">
<button>Left floated Button</button>
</div>
</div>

你可以看到 .parent由于 .clear 添加了上下文/内容hack 为 .child 创建包装和 float 按钮。 Parent现在只知道 .child 100px margin 原因 .child仍然存在利润率下降的问题。

仍然不可见child's黄金背景? =我们需要申请.clear (或再次溢出)它!

.parent {
background: red;
}
.child {
background: gold;
margin-bottom:100px;
}
button {
float:left;
height:30px;
}

.clear:before,
.clear:after{
content: " ";
display: table;
}
.clear:after{
clear: both;
}
<div class="parent clear">
<div class="child clear">
<button>Left floated Button</button>
</div>
</div>


所以,回顾一下发生了什么:

  • .parent.child无法处理 float由于 没有其他内容 存在,ed 元素因此失去“高度”并折叠成
  • 您现在可以想象两个瘦元素(没有高度)拿着一个带有 .child 的 float 按钮是唯一使用 margin-bottom 添加 100px 空间的并将 float 元素推到该空间下方(因为 float )导致空 block 上的边距折叠
  • → 只需添加任何固定的 height.child由于新的可用空间和未折叠的边距,您会在正确的位置(在 child 的顶部)看到 float 元素跳跃

Here's a good article about floats and related issues caused by floated elements

关于html - 与 float 和 margin 相关的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685681/

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