css - 左边距不适用于溢出:浮动后的自动元素
问题描述
我目前正在尝试创建一个两列布局,其中左列浮动,右列通过形成新的块格式化上下文来限制浮动。这样可行。后来,我尝试在左栏和右栏的内容之间放置一些可见的空间。如果我在右列上设置左填充,它会起作用。我也尝试用右列的左边距替换左边的填充,并认为它们会产生相同的效果。然而,令我惊讶的是,左边距根本不起作用
我用下面的代码重现了这个问题。请注意,中间的示例,在右列上设置左边距并不会真正将其推离左列
* {
margin: 0;
padding: 0;
}
.container {
height: 50px;
line-height: 50px;
width: 500px;
}
.container + .container {
margin-top: 20px
}
.left {
float: left;
width: 150px;
height: 100%;
background: orange;
text-align: center;
}
.right {
overflow: auto;
background: skyblue;
height: 100%;
}
.with-padding {
padding-left: 30px;
}
.with-margin {
margin-left: 30px;
}
<div class="container">
<div class="left">left column, floated</div>
<div class="right with-padding">
<p>left padding works</p>
</div>
</div>
<div class="container">
<div class="left">left column, floated</div>
<div class="right with-margin">
<p>left margin dost not work</p>
</div>
</div>
<div class="container">
<div class="left">left column, floated</div>
<div class="right">
<div class="with-margin">
<p>left margin works on the wrapper div</p>
</div>
</div>
</div>
我确实在互联网上搜索过这个主题,但没有找到太多相关信息。我怀疑这可能与块格式化上下文(BFC)的概念有关。如果我理解正确,边距表示目标框的外边缘与包含 BFC 的内边框之间的距离。
如果我们在一个本身形成自己的 BFC 的盒子上设置边距,那么边距不应该起作用吗?所以在第三个例子中,我将文本放入一个额外的包装器中并在该包装器上设置边距,看起来左边距又可以工作了。然而,这只是我的猜测。
解决方案
这里的关键点是
... 正常流程中建立新块格式化上下文的元素(例如具有非可见溢出的元素)的边框框不得与任何浮动的边距框重叠...
因此,位于边界框外部的边距可以(在您的第二种情况下)与浮动重叠,但位于边界框内的填充不能。
推荐阅读
- javascript - 我们可以在 Shopify 上添加 CSS 类吗?
- python - Pandas 根据条件更快地移动多行
- azure-alerts - 如何监视 Azure SQL 中的表是否为空?
- c# - 棱镜多窗口/叠加显示
- java - 这是哪种类型的列表,如何访问 tokenValue?
- ionos - 如何将 Ionos 上部署的 API 集成到 React 前端
- docker - 如何从 podman 重用 docker 格式的图像存储
- node.js - 我现在正在使用 ubuntu OS 并尝试运行 nodejs 的代码。在 Windows 10 上运行时,虽然代码相同,但我收到语法错误,一切都很好
- python - Vlookup 属性,然后使用 Python 将行转置为列
- c# - SqlQuery 不是 EF Core Dbset() 中的定义