gpt4 book ai didi

html - CSS Float 行为(即使在检查 W3C 之后)

转载 作者:行者123 更新时间:2023-11-28 18:57:38 48 4
gpt4 key购买 nike

我对 float 有疑问,并在下面提供了示例代码。我正在尝试创建一个两列布局:我知道如何通过多种其他方式做到这一点,所以这个问题是为了找出为什么 FLOAT 的行为方式与此处相同。

  • 容器DIV有两个DIV,都向左浮动。
  • 正如预期的那样,浏览器窗口的大小决定了第二个 float block 级元素是与第一个 float 元素并排还是在其下方。
  • 问题出在第二个 float DIV 中的内容长度(假设浏览器窗口最大化,无论分辨率如何)。

在下面的代码中,我注释掉了第二段的一部分。在我的浏览器上,这是截止标记:在此之后包含任何内容都会导致整个 DIV 清除第一个 DIV,即使第二个 DIV 中还有很多空间需要清除第一个 DIV。

我在代码中看不到任何会导致这种情况发生的内容。我知道 float 在 block 级别和内联内容方面的行为方式以及将非 float block 放在 float block 旁边的后果,但我在文档中找不到任何内容来解释为什么当似乎有足够的空间时应该清除 block 其内容。

非常感谢帮助。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>CSS Float Problem</title>

<style>

body {
background:#5c604e;
}

#container {
position:relative;
background:yellow;
}

p {
background-color:#cccccc;
width:50%;
}

.block {
width: 200px;
height: 200px;
}

.float {
float: left;
}

.pink {
background: #ee3e64;
}

.blue {
background: #44accf;
}

</style>
</head>
<body>
<div id="container">
<div class="block pink float">Lorem ipsum dolor sit amet consectetuer Nam fringilla Vestibulum massa nisl. Nulla adipiscing ut urna ipsum Curabitur urna lacinia pretium feugiat Ut.
</div>
<div class="blue float"> <h2>Test Heading</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur bibendum erat a neque eleifend vitae ultrices nisi tempor. Praesent facilisis lobortis nisl, <!--sit amet gravida orci mollis vitae. Maecenas porta turpis id urna porta id ornare velit dapibus. <!-- Proin sollicitudin, tortor viverra posuere mattis, nisl est rhoncus urna, nec elementum augue turpis vitae diam. Pellentesque ut quam sit amet elit tempus suscipit nec vel nulla. Proin ullamcorper sollicitudin metus in posuere. Aliquam a vehicula odio. Morbi scelerisque arcu ac nibh cursus ullamcorper. Aliquam pulvinar commodo nunc nec laoreet. -->
</p>
</div>
</div><!--end of container div -->
</body>
</html>

查看http://cssdesk.com/86cPH

最佳答案

在您的示例中,您有两个 block 级元素彼此相邻 float 。因为它们是 block 级的,所以它们建立了一个新的包含上下文,它们的内容将在其中存在并影响布局。

计算 float 元素的框大小时的标准行为是基于元素的内容。因为你的第二个 float 框没有明确的宽度,浏览器决定它的宽度应该基于它的内容,在 float 元素的情况下,它的宽度将和它的内容一样宽。

因此,第二个框在第一个框下方流动,因为段落的固有宽度会影响蓝色框,蓝色框大于为其容器分配的显式约束(即,#container 的宽度减去第一个 float 的宽度元素)。


如果您希望文本围绕 float 元素流动,您应该省略“蓝色”框。只有当 float 和内容嵌套在同一个容器中(并且内容不是 block 级元素)时,内容才会像人们预期的那样围绕粉红色框流动。


如果您不需要支持 IE7,就获得具有等高列的有效两列布局而言,我建议您尝试 display: table

关于html - CSS Float 行为(即使在检查 W3C 之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292984/

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