【发布时间】:2020-08-08 17:50:14
【问题描述】:
总结
浮动元素与相邻非浮动元素的垂直对齐方式不一致,这种可变性取决于容器或父元素的border-top-width 值和overflow 值。什么给了?
背景
我在练习涉及<img> 元素的布局时遇到了这种情况。我上个月刚开始自学 HTML/CSS,所以如果这是因为我忽略了一些基本的东西,请给我讲讲。
详情
<div> 容器内有一个浮动元素和一个非浮动块元素。
浮动元素 (p1) 具有固定宽度和 0 边距。它在左/右方向上浮动。它是起始浮动元素(即第一个浮动到包含框的一侧)。
相邻元素 (p2) 是环绕 p1 的非浮动块。请注意,此处特意为 p2 指定了一个非零边距值,以表明 p1 和 p2 在下面解释的一种情况下未对齐。
包含元素 <div> 的填充为 0。
通过这种设置,我发现浮动元素 (p1) 至少可以通过两种方式相对于 border-top-width 和 overflow 定位自身:
- 浮动元素 (p1) 与相邻的非浮动元素 (p2) 对齐(即 p1 框的上边框与 p2 框的上边框对齐)。
CSS 规则:div {border-top-width: 0px;}
和div {overflow: visible;}
浮动元素(p1)改为与 包含框或父元素。
CSS 规则:
div {border-top-width: non-0px;}
或div {overflow: auto/hidden/scroll/}
请注意,在案例 2 中,任一规则本身就足以启用对齐。
代码
代码过于简单,看起来像这样:
HTML
<div>
<img src="example.jpg">
<p>Random text</p>
</div>
CSS
img {
float: left;
}
/* floating element aligns with adjacent element */
div {
border: none;
overflow: visible;
}
或
/* floating element aligns with top border of container */
div {
border-top-width: 1px;
overflow: auto;
}
我在 jsfiddle 上举了一个例子:https://jsfiddle.net/tLumj9x7/
或者您可以使用下面的 sn-p 检查它:
/* <body>, <div> margin set to 0 to avoid interference */
body {
margin: 0px;
}
div {
margin: 0px;
}
/* border drawn above the paragraphs to denote top border of 2nd <div> */
.div1 {
border-bottom: 1px solid;
}
p {
border: 1px solid;
}
/* floating paragraph: margin set to 0 to highlight unusual alignment */
.p1 {
float: left;
margin: 0px;
width: 400px;
}
/* note that a <p> element has a default margin of 1em, so this declaration is just for demonstration */
.p2 {
margin: 16px;
}
input#border:checked~div.div2 {
border-top: 0.02px solid transparent;
}
input#overflow:checked~div.div2 {
overflow: auto;
}
<form>
<input type="checkbox" name="border" id="border" />container border-top-width: non-0<br />
<input type="checkbox" name="overflow" id="overflow" />container overflow: auto / hidden/ scroll<br />
<div class="div1">
</div>
<div class="div2">
<p class="p1">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</p>
<p class="p2">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
</form>
问题
起始浮动元素的位置相对于它的包含元素(在我们的例子中是
<div>块)是如何确定的?border-top-width属性与盯着浮动元素的“锚定”有什么关系?overflow属性同上。在属性方面,overflow是如何“从结构上”影响容器盒的?在上述两种情况中,如果有的话,它显示了起始浮动元素的“默认”定位?
在不同但相关的注释上。如果我在向左浮动的 p1 浮动元素周围放置边距,它的左边距会与相邻的 p2 非浮动元素的左边距一起折叠。这是标准行为吗?我读到浮动元素的边距不会塌陷,所以我不确定我是否正确理解了这个概念。
这是我在 stackoverflow 上的第一篇文章,感谢您阅读我的问题!我是 Web 开发的新手,期待阅读您的回答。
【问题讨论】:
标签: html css alignment css-float