我最近开始学习CSS,当我学习float时,遇到了一些问题。
从https://developer.mozilla.org/en-US/docs/Web/CSS/float:
float CSS属性指定元素应从常规流中提取并沿其容器的左侧或右侧放置,其中text和inline元素将在其周围包裹。
但是我只是想知道,如果div跟随浮动元素会怎样?所以我写了一个测试,它没有环绕它,而是与它重叠,而且我真的很困惑,因为有人告诉我浮动元素不会从常规文档流中获取,并且下一个div会向左对齐如果有足够的空间。
这是html和css,请注意,正确的div不是浮动的,如果它是浮动的,它将按照我的期望进行操作,但这不是我的问题。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Float Layout</title>
<style type="text/css">
#wrap {
background: #00c;
margin: 0 auto;
width: 960px
}
#header {
background: #FF3300;
width: 100%;
}
#mainbody {
background: #0CF;
width: 100%;
overflow: hidden;
}
#footer {
background: #639;
width: 100%;
}
.left {
width: 140px;
height: 200px;
background: #1f0;
float: left;
}
.right {
width: 140px;
height: 500px;
background: green;
}
</style>
</head>
<body>
<div id="wrap">
<div id="header">header</div>
<div id="mainbody">
<div class="left"><h1>Left</h1></div>
<div class="right"><h1>Right</h1></div>
</div>
<div id="footer">footer</div>
</div>
</body>
</html>
我没有足够的声誉来发布图像。输出是右div与左div重叠,如果我用段落或h1替换右div,它将环绕左div,这是预期的行为。
我只是想知道为什么右div与左div重叠,左div是一个浮动元素?我无法弄清浏览器如何处理的解释。如果浮动元素是从常规文档流中提取的,则可以解释这种行为,但这是事实。所以我对此一无所知。
无论您从文档中引用什么:
float CSS属性指定一个元素应从常规流中获取,并沿其容器的左侧或右侧放置,其中文本和行内元素将环绕该元素。
解释了这种行为。
输出是右div被左div重叠
<div>
是一个块元素,因此不会环绕浮动元素。浮动div从正常流中移除,因此与重叠div.right
。
如果增加的宽度,则可见.right
。
如果我用段落或h1替换右div,它将环绕左div,这是预期的行为。
不<p>
,<h1>
并且也像一样是块元素<div>
,因此这不是预期的行为。预期的行为是它们的行为应与div完全相同.right
。发生了什么事。
这里要注意的关键问题是,你可能并没有任何直接的文本里面.right
,所以你觉得<div>
是不是包装,而是<p>
和<h1>
有包装,因为你有文本里面他们是包装:
元素本身并没有环绕,(您只是认为是),因为其中的文本环绕了float元素,由于您已指定width:140px
,因此没有足够的空间供文本right
放在float的div旁边,因此它会中断下一行-这是预期的行为。
如果直接在.right
div内添加一些文本,也会发生同样的事情:它将环绕,但这并不意味着元素本身在环绕:
该<block
元素被浮动股利和重叠只有文本和内联元素周围包裹,这是在文档中明确什么提到
如果您指定足够的宽度,它将在浮动div旁边对齐
我在这里看不到任何意外的东西。
旁注:“因为有人告诉我浮动元素不会从正常的文档流中提取”-我不相信会出现浏览器的人对文档的依赖
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句