当前位置: 首页 > 面试题库 >

浮动元素行为

陈文景
2023-03-14
问题内容

我只在div中遇到浮动元素问题,这是问题所在:

.main{

    border-style:solid;

    border-color:yellow;

    overflow:auto;

}



.first {

    width:200px;

    height:100px;

    float: left;

    border: 10px solid green;

}

.second {

width:200px;

    height: 50px;

    border: 10px solid blue;

}


<div class="main">

<div class="first">test1</div>

<div class="second" >test2</div>

</div>

我需要有关第二个DIV的边框及其内容位置的说明。为什么边框在后面但内容在第一格之下?

还根据:https :
//css-tricks.com/all-about-floats/#article-header-id-3

关于浮点数的更令人困惑的事情之一是它们如何影响包含它们的元素(它们的“父”元素)。如果此父元素只包含浮点元素,则其高度实际上将崩溃为零。如果父母不包含任何视觉上可察觉的背景,这并不总是很明显,但是要意识到这一点很重要。

我需要澄清为什么会这样。

编辑:我正在要求解释这是两个问题的行为,而不是如何解决。


问题答案:

这是应该如何绘制元素的逻辑行为,但是您遇到了溢出问题以及float的工作方式,这使事情变得 奇怪

让我们删除一些属性,并逐步遵循代码。首先让我们来消除overflow:auto来自main从固定高度.second

.main {

  border-style: solid;

  border-color: yellow;

 /* overflow: auto;*/

}



.first {

  width: 200px;

  height: 100px;

  float: left;

  border: 10px solid green;

}



.second {

  width: 200px;

  /*height: 50px;*/

  border: 10px solid blue;

}


<div class="main">

  <div class="first">test1</div>

  <div class="second">test2</div>

</div>

如您所见, 绿色 的浮动元素位于 蓝色 div
上方,并且仅围绕其内容(文本)浮动。就像你可以在这里阅读:

float CSS属性指定一个元素应沿着其容器的左侧或右侧放置,从而允许 text和 inline元素环绕其周围
。尽管仍保留了一部分内容(与绝对定位相反),但该元素已从网页的 常规流程 中删除 。

并且由于两者div宽度相同, 因此文本将在底部而不是右侧。你可以改变width的的 蓝色 div来看到了差距:

.main {

  border-style: solid;

  border-color: yellow;

 /* overflow: auto;*/

}



.first {

  width: 200px;

  height: 100px;

  float: left;

  border: 10px solid green;

}



.second {

  width: 200px;

  /*height: 50px;*/

  border: 10px solid blue;

  animation:change 1s infinite alternate linear;

}



@keyframes change{

 from{width:200px}

 to{width:400px}

}


<div class="main">

  <div class="first">test1</div>

  <div class="second">test2</div>

</div>

现在,如果您检查绘画顺序,您将看到我们首先在步骤(4)中打印块非浮动元素的边框/背景,然后在步骤(5)中打印浮动元素,然后打印非元素的内容步骤(7)中的-
floating元素,解释了为什么在 绿色* 下看到 蓝色 *

现在,如果我们将固定高度添加到 蓝色 元素上,您将面临 溢出 问题,因此蓝色的内容将保留在外部(如上一代码),但是定义元素限制的边框将在
绿色 元素后面(就像paiting顺序中描述的那样)

这是带有动画的代码,可以更好地了解正在发生的事情:

.main {

  border-style: solid;

  border-color: yellow;

 /* overflow: auto;*/

}



.first {

  width: 200px;

  height: 100px;

  float: left;

  border: 10px solid green;

}



.second {

  width: 200px;

  border: 10px solid blue;

  animation:change 2s infinite alternate linear;

}



@keyframes change {

  from{height:300px;}

  to{height:50px;}

}


<div class="main">

  <div class="first">test1</div>

  <div class="second">test2</div>

</div>

您还可以清楚地看到,main 黄色
元素的高度紧随蓝色元素的高度,因为它是唯一的流入元素,通过添加overflow:auto您将创建的第二个问题,您的浮点数在其父元素BUT的高度中未被考虑块格式化上下文,因此该元素的行为将有所不同,并将考虑内部浮动元素的高度:

.main {

  border-style: solid;

  border-color: yellow;

  overflow: auto;

}



.first {

  width: 200px;

  height: 100px;

  float: left;

  border: 10px solid green;

}



.second {

  width: 200px;

  border: 10px solid blue;

  animation:change 2s infinite alternate linear;

}



@keyframes change {

  from{height:300px;}

  to{height:50px;}

}


<div class="main">

  <div class="first">test1</div>

  <div class="second">test2</div>

</div>

在这最后一章中,您可以清楚地看到溢出问题,这是由于添加了滚动条而使文本位于 蓝色 div 之外oveflow:auto



 类似资料:
  • 问题内容: 任何人都知道为什么overflow:hidden强制具有浮动元素的元素包装元素吗? 我真的很想了解内部工作原理,而不是仅仅使用它并相信“它确实有效”。 当包含元素的方向与浮动的子元素相同的方向时,我可以理解它的工作原理,但是overflow:hidden意味着裁剪溢出的内容(与position:absolute / relative一起使用时)。 任何信息表示赞赏。 问题答案: 浮点数

  • 问题内容: 如果我有三个向右浮动的元素,那么为什么顺序跟随(请参阅jsfiddle),而元素3实际上是最后一个元素,则元素1是右侧的第一个元素。 现在订购 但是元素在html中按此顺序 为什么? 问题答案: 这种“倒序”是预期的结果。 您可以根据需要在CSS规范中进行深入研究,但是示例将按原样进行渲染。 如果您希望它们以与标记相同的顺序显示,请向右浮动,其子项向左浮动。

  • 问题内容: 我正在尝试在网络上进行搜索,但不确定要查找的内容是什么。我试图找出如何创建将被修复的div元素,或者仅在该元素的TOP达到窗口浏览器视图的TOP时才浮动。例如,如果某个元素位于页面的中间,那么当您继续向下滚动时,该元素将一直保留直到它即将消失,然后它才希望保留在我的浏览器顶部(固定)。 问题答案: 我想我正在做与您想做的事情类似的事情。试用以下代码,将所需的内容放入通知div中,并单独

  • 问题内容: 假设您有一个,给它一个定值,然后在其中添加元素,在我的情况下为另一个。 这个想法是容器的内容将导致容器伸展,并成为内容的背景。但是,当我这样做时,包含的对象会缩小以适合非漂浮的对象,并且漂浮的对象将要么全部伸出,要么一半伸出,一半进入,并且对big的大小没有任何影响。 为什么是这样?有什么我想念的东西,怎么才能让漂浮的物品伸出其中的东西呢? 问题答案: 最简单的方法是放在父div上,而

  • 问题内容: 我有一个清单,李的有一个。之后的内容应正确对齐。 我认为,可以通过使用:after这样的伪选择器来删除。 我是否总是需要创建一个单独的div来清除浮动元素? 问题答案: 这样写:

  • 问题内容: 假设我们有一个非常简单的场景 这是样式: 事情是…当我向其中添加内容时,应该拉下父div,我们需要看到红色背景…问题是,我看不到红色背景充满了所有高度。 问题答案: 当子元素浮动时,它们将从文档流中删除。这样做时,父级将不再具有定义的尺寸,因为子级在技术上不会占用空间。因此,父元素自身折叠。当绝对定位子元素时,也会发生相同的情况。 在这种情况下,我们可以通过添加到父元素来修复它,从而强