当前位置: 首页 > 科技观察

浮动布局的影响以及如何清除浮动

时间:2023-03-20 18:41:00 科技观察

浮动是页面布局过程中的好东西。我们经常使用浮动布局,它可以让元素共享一条线,极大地方便了我们的布局过程。但是很多人可能只是使用而已,对浮动的原理一知半解。如果他们对浮动的影响以及如何去除浮动的影响没有清晰的认识,那么面对代码量巨大的页面就会很头疼。有雾。那么接下来,我们就深入研究一下浮动布局。相信当大家对浮动的概念有了清晰的把握后,以后用起来会更加得心应手。1、什么是浮动布局?CSS的Float(浮动)会将元素向左或向右移动,使元素共一行,类似于给元素添加inline-block的效果。floats在w3c中是这样描述的:一个浮动框可以向左或向右移动,直到它的外边缘接触到包含框或另一个浮动框的边界。由于浮动元素不在文档的正常流中,因此文档正常流中的块框表现得好像浮动元素不存在一样。接下来,让我们详细了解一下。二、浮动的影响1、脱离文档流,不占用页面空间我们知道css的块级元素,比如div,在页面中默认占一行,从上到下排列,这就是我们所说的流量。也就是我们通常所说的标准流程。接下来我们看下面的案例:HTML代码:150*100

100*150
300*200
CSS代码:.div1{width:150px;height:100px;background:pink;}.div2{width:100px;height:150px;background:lavender;}。div3{width:300px;height:200px;background:skyblue;}效果如下图:(一看这个颜色就知道楼主是妹纸,😋)结果上图分析:在标准流程理论中,div作为Block级元素会占据单行,但是布局中最常见的问题之一就是如何在同一行显示多个div元素。这时候标准的流程已经不能满足我们的需求了。这时候我们就需要让元素浮动。如果我想让div1和div2显示在同一行,我需要给这两个元素添加浮动属性float:left。我们来看看此时的结果:上图结果分析:如上图,可以看到蓝色div上面覆盖了粉色div和紫色div。这是因为浮动元素脱离了标准流向浮动层。浮动层高于标准层,不占用页面空间,所以我们看到div1和div2被覆盖在div3之上。虽然都被覆盖了,但是div3里面的文字会被挤走,此时div3还在standard层所以还是占据了页面空间。2、floating会将内联元素和内联块元素转化为块元素。上面提到的块元素是可以浮动的。其实行元素和行内块元素也是可以浮动的,一旦浮动就会转化为块元素。这里我们以span标签为例。HTML代码:span1span2span3css代码:.span1{width:200px;height:200px;background:red;}.span2{width:200px;height:200px;background:green;}.span3{width:200px;height:200px;background:blue;}结果如下:众所周知,span是最常见的内联元素之一,内联元素共用同一行,中间有空隙,width和height属性不起作用。这时候我们给每个span1加上浮动属性float:left。让我们看看结果会怎样?结果如下图所示:很明显,浮动后的元素宽高属性开始起作用了,说明span元素从行标签变成了块标签。3、清浮与其说是清浮,不如说是清浮的影响。下面我们一一了解四种常见的清除浮动的方法:假设我们要实现如下布局,上半部分是导航部分,下半部分是内容部分,导航部分中的两个块向左浮动,正确的。接下来我们看原代码,即不清除浮动时的代码:html代码:logo
右侧区域css代码:.nav{width:100%;背景:#c0c??0c0;填充:10px;}.left{宽度:300px;高度:50px;背景:粉色;浮动:左;}.right{宽度:300px;高度:50px;背景:#abcdef;浮动:右;}.content{height:400px;background:url("img/10.jpg");background-size:cover;}根据上面的代码,得到的结果如下:结果分析:我们知道如果height块级元素的高度不给定,则高度由子元素和padding值支持。左右浮动时,离开了文档流,不再占用页面空间,所以其父级的height只有padding值,导致上图的结果。那么如何消除浮动的影响呢?下面看一下解决方法:1.给浮动元素的parent一个高度。.nav{width:100%;height:50px;background:#c0c0c0;padding:10px;}给浮动元素的父元素一个高度来占据页面空间。这种写法的优点是简单易懂,缺点也很突出,对没有固定高度的div不起作用。2.在浮动元素的parent中添加overflow:hiddencss代码:.nav{width:100%;overflow:hidden;background:#c0c0c0;padding:10px;} overflow:hidden的意思就是多余的部分应该是cut如果float元素没有占据普通流的位置,普通流的包含块应该根据内容的高度进行切割隐藏。如果高度是auto的默认值,那么浮动元素可能会被切割而不计算其内部浮动元素的高度。因此,如果容器的高度没有明确设置,则需要计算内容的全高来判断隐藏在什么位置,并计算出浮动的高度,达到清理浮动的目的顺便一提。3、在浮动元素的兄弟元素中添加clear:bothhtml代码:logo右侧区域css代码:.clear{clear:both;}在实际项目布局中遇到的很多问题都是因为没有清除浮动导致的,所以我们必须开发其中的一部分代码只是清除了浮动习惯。祝你学习和工作顺利!