我想问一下高度和漂浮物是如何工作的。我有一个外部div和一个内部div,其中包含内容。它的高度可能取决于内部div 的内容,但似乎我的内部div会溢出其外部div。正确的做法是什么?
<html>
<body>
<div style="margin:0 auto;width: 960px; min-height: 100px; background-color:orange">
<div style="width:500px; height:200px; background-color:black; float:right"></div>
</div>
</body>
</html>
float大多数初学者都误解了该属性。好吧,到底是做float什么的?最初,float引入了该属性,以使文字围绕图像浮动left或浮动right。这是 @Madara Uchicha 的另一种解释。因此,使用该float属性并排放置盒子是否错误?答案是否定的。如果使用该float属性来并排设置框,则没有问题。
浮动元素inline或block水平元素将使元素的行为类似于inline-block元素。
演示版
如果浮动元素left或right,则width除非width明确定义,否则该元素的仅限于其持有的内容……
你不能有float一个元素center。这是我在初学者中经常遇到的最大问题,这不是该float属性的有效值。float通常用于float/在最左侧或最右侧移动内容。只有4有效值float财产即left,right,none(默认)和inherit。
当父元素包含浮动子元素时,它会折叠,为了防止这种情况,我们使用clear: both;属性来清除两侧的浮动元素,这将防止父元素崩溃。有关更多信息,您可以在这里参考我的另一个答案。
(重要)想一想,我们拥有一堆各种元素。当我们使用float: left;或float: right;元素在堆栈上方移动一个。因此,普通文档流中的元素将隐藏在浮动元素的后面,因为它位于普通浮动元素上方的堆栈级别上。(请不要将此与这z-index完全不同。)
以一个案例为例来说明CSS浮点的工作原理,假设我们需要一个简单的2列布局,其中包含页眉,页脚和2列,因此
在上面的例子中,我们将浮动只有红色箱子,要么你可以float同时向left,或者你可以float上left,另一个right为好,取决于布局,如果是3列,你可能float2列left,其中另一一个right取决于,尽管在此示例中,我们具有简化的2列布局,所以float个left与另一个相对应right。
用于创建布局的标记和样式在下面进一步说明…
<div class="main_wrap">
<header>Header</header>
<div class="wrapper clear">
<div class="floated_left">
This<br />
is<br />
just<br />
a<br />
left<br />
floated<br />
column<br />
</div>
<div class="floated_right">
This<br />
is<br />
just<br />
a<br />
right<br />
floated<br />
column<br />
</div>
</div>
<footer>Footer</footer>
</div>
* {
-moz-box-sizing: border-box; /* Just for demo purpose */
-webkkit-box-sizing: border-box; /* Just for demo purpose */
box-sizing: border-box; /* Just for demo purpose */
margin: 0;
padding: 0;
}
.main_wrap {
margin: 20px;
border: 3px solid black;
width: 520px;
}
header, footer {
height: 50px;
border: 3px solid silver;
text-align: center;
line-height: 50px;
}
.wrapper {
border: 3px solid green;
}
.floated_left {
float: left;
width: 200px;
border: 3px solid red;
}
.floated_right {
float: right;
width: 300px;
border: 3px solid red;
}
.clear:after {
clear: both;
content: "";
display: table;
}
让我们逐步进行布局,看看float如何工作。
首先,我们使用的主要的包装元素,你可以认为它就是你的口,然后我们使用header和分配height的50px所以没有什么
花哨的存在。它只是一个普通的非浮动块级元素,除非它是浮动的或我们分配给它,否则它将占用100%水平空间inline- block。
第一个有效的值float
是left
如此在我们的例子中,我们使用float: left;
了.floated_left
,因此,我们打算在块浮动到left我们的容器元素。
列浮动到左侧
是的,如果您看到.wrapper
折叠的父元素,则看到的带有绿色边框的那个元素没有展开,但这应该对吗?稍后,现在将回到列left。
进入第二列,让它float进入right
另一列浮动在右侧
在这里,我们有一个300px宽列,我们float
到right
,当它浮动到时,它将位于第一列旁边left,并且由于它浮动到left
,因此它为创造了一个空槽right
,并且由于上有足够的空间right,right
浮动元素完美地坐在旁边left。
尽管如此,父元素仍然折叠,现在让我们修复它。有很多方法可以防止父元素折叠。
添加一个空的块级元素,并clear: both;
在包含浮动元素的父元素结束之前使用,现在这是对clear浮动元素的廉价解决方案,它将为您完成工作,但是,我建议您不要使用它。<div style="clear: both;"></div>
在.wrapper
div
结尾之前添加,例如
<div class="wrapper clear">
<!-- Floated columns -->
<div style="clear: both;"></div>
</div>
好了,它修复得很好,不再有折叠的父级,但是它为DOM 添加了不必要的标记,因此有人建议overflow: hidden;
在持有浮动子级元素的父级元素上使用,该元素按预期工作。
使用overflow: hidden;
上.wrapper
.wrapper {
border: 3px solid green;
overflow: hidden;
}
这每次都为我们节省了一个元素,clear float但是当我以此测试各种情况时,它在使用box- shadow子元素的一个特定案例中失败了。
演示(无法看到所有四个侧面的阴影,overflow: hidden;
导致此问题)
所以现在怎么办?保存一个元素,不行overflow: hidden;
,进行明确的修复,在CSS中使用以下代码段,就像overflow:hidden;
对父元素一样,class对父元素进行以下调用以自清除。
.clear:after {
clear: both;
content: "";
display: table;
}
<div class="wrapper clear">
<!-- Floated Elements -->
</div>
在这里,阴影可以按预期工作,并且可以自动清除防止崩溃的父元素。
最后,我们clear在浮动元素之后使用页脚。
float: none;
无论如何,都是使用when ,因为它是默认值,所以可以用来声明float: none;
?
好吧,这取决于是否要进行响应式设计,当您希望浮动元素以某个分辨率在另一个元素下方进行渲染时,会多次使用此值。因为那里的float: none;
财产起着重要的作用。
实际例子中很少float有有用的例子。
我们已经看到的第一个示例是创建一个或多个列布局。img在内部使用float p可以使我们的内容四处流通。演示(无浮动img)
演示2(img浮动到left)
使用float用于创建水平菜单- 演示还是浮动第二个元素,还是使用 margin
最后但并非最不重要的一点,我想解释一下这种特殊情况,其中您float
仅将元素分配给,left
而您没有float其他元素,那么会发生什么呢?
假设如果我们float: right;
从中移除.floated_right class
,则div它将呈现为极端,left因为它没有浮动。
所以在这种情况下,要么你可以float
在给left
为好
要么
您可以使用margin-left
它将等于左浮动列的大小,即200pxwidth
。
问题内容: 任何人都知道为什么overflow:hidden强制具有浮动元素的元素包装元素吗? 我真的很想了解内部工作原理,而不是仅仅使用它并相信“它确实有效”。 当包含元素的方向与浮动的子元素相同的方向时,我可以理解它的工作原理,但是overflow:hidden意味着裁剪溢出的内容(与position:absolute / relative一起使用时)。 任何信息表示赞赏。 问题答案: 浮点数
问题内容: 当我使用Chrome开发人员工具检查定位标记的大小时,它会向我显示第一个元素和第二个元素。 我想知道为什么它不包含包含元素的高度和宽度以及它是如何计算的。 问题答案: 在CSS 2.1规范说 框内容区域的尺寸(内容宽度和内容高度)取决于几个因素:生成框的元素是否设置了“宽度”或“高度”属性,该框是否包含文本框或其他框,是否框是一个表格,等等。框的宽度和高度将在有关可视格式模型详细信息的
问题内容: 当具有边距的元素包含在另一个元素中时,父级不会始终包裹/包含该边距。 许多事情将导致父母控制孩子的保证金: (这只是经过一点测试,毫无疑问,还有更多。) 我认为这与利润下降有关,但是: W3C规范页面没有此类行为的描述。 这里没有重叠的边距。 在此问题上,所有浏览器的行为似乎都是一致的。 该行为受到与边距无关的触发器的影响。 根据逻辑,默认元素应包含与溢出设置为自动元素不同的材料? 为
问题内容: 我只在div中遇到浮动元素问题,这是问题所在: 我需要有关第二个DIV的边框及其内容位置的说明。为什么边框在后面但内容在第一格之下? 还根据:https : //css-tricks.com/all-about-floats/#article-header-id-3 关于浮点数的更令人困惑的事情之一是它们如何影响包含它们的元素(它们的“父”元素)。如果此父元素只包含浮点元素,则其高度实
问题内容: 用以下HTML最好地解释了这个问题: CSS: 基本上,我想知道为什么会导致外部元素的高度增加,从而包含两个浮动元素? 问题答案: 简而言之,这是因为具有的框(不是)(默认)会创建新的[块格式设置上下文。 如果框本身没有指定的高度,则将创建新块格式上下文的框定义为按高度拉伸以包含其浮点数,默认为(规范将这些框称为框 格式上下文根 ): 10.6.7块格式上下文根的“自动”高度 在某些情
如何根据具有绝对位置的子元素高度增加具有相对位置的父元素的高度。 在下面的例子中,父元素的高度显示为0px PS:我不想使用任何脚本 预期: 我得到的是: JSFIDLE 超文本标记语言: CSS: