CSS的float浮动理解

这几天才开始好好学css,学到div的float浮动属性这儿就有点懵了,始终理解不到其含义,看了很多文章视频也半知半解。好在坚持,让我慢慢理解到了这个知识点,其中下面这篇文章对我帮助很大,

经验分享:CSS浮动(float,clear)通俗讲解

在了解浮动float这个概念之前,我们来看看块级元素、行内元素以及文档标准流的相关概念。

1.块级元素

块级元素(block),顾名思义就是一块块的(感觉像是废话),它的一个重要特性就是一个块级元素单独占一行。例如:


如图所示,每一个div都是独占一行,像这种元素还有<h1>~<h6> <p>...等标签。

2.行内元素

跟块级元素相对比,就很好理解了,行内元素可以多个元素在一行 ,如<span> <a>...等

3.文档标准流

便于理解,标准流可以理解成上面块级元素的排列方式,自上而下,像水流一样。

那么,现在问题来了,当你随便打开一个网页时,你会发现很多网页布局都超越了标准流,实现块级元素共享一行,要实现这种效果,就要使用大家都很常用的float浮动,那float是什么了,其实可以这样理解。浮动,为什么要称之为浮动呢,就是因为他是被置于标准流之上的一层,当你设置了float后,元素就不会被限制在标准流中,如下例:


当son_1没有设置float属性时,它会撑开父级div


当son_1设置了float;left属性时,父级div没有被撑开

通过上面两个例子,可以很好的理解浮动的含义了,不如将图二中son_1想象成父级div之上的一层,其中第二个例子为父级塌陷问题,后面再解释。

之前我们说道,要实现块级元素同行,需要用到float,这里我们可以想象成将div设置float属性后他就会漂浮起来,将div都漂浮起来,就可实现在同一行的效果:



图四,div都无float属性


图5,当div_2有float属性时

结合之前的理解,这里的div_2相当于浮了起来,处于标准流之上,div_3向上移动就靠近div_1,所以图中div_3的一部分被div_2所遮住了。


图6,将div_2,div_3都设置float属性(为了方便理解,增加了div_4的宽度)

如图6所示,div_2和div_3设置了float:left属性两者都浮动了了起来,此时div_4就移到div_1的后面,所以我们很容易得出结论,当块级元素都浮动起来的话,他们就可实现同行效果,同时同行的前后位置跟之前的排列顺序位置相同,块级元素在上的,浮动在前面,如:



注意:浮动的前后具体看是怎样浮动,如果是左浮动的话,顺序从左向右,其它类推。看到这里,想必浮动的知识差不多就明白了,下面我们看看如何清除浮动。

二、清除浮动

清除浮动我们常用到clear属性,其对应了both、inherit、left、right以及none,注意,清除浮动的对象是某个块级元素自身,如:


其中div_2中的clear:right表示div_2的右边不能有浮动元素,因此,块级元素全部下移。(此外,清除的浮动只对你定义过的浮动有效,如div_2中写clear:left就无作用)。

补充内容

其实实现块级元素同行还可以用display属性,我们都知道。块级元素如果不设置宽的话,默认的是100%,意思就是块级元素可以定义宽高,而行内元素却不行,他们的宽高是适应内容的。如:


当我们将元素的dispalay:inline-book时候,便可实现同行操作,同时行内元素可以设置宽高。

三、父级塌陷问题

前面提到过这个问题,当子级都浮动起来时,父级会出现塌陷问题,如下图:


如何解决这个问题呢?比较常用的主要由四种方式:

1.增加父级块元素宽高

这种方式不是很常用

2.新增加一个子级块级元素


3.父级增加overflow属性


overflow属性来解决子级内容超过父级而溢出的问题。

4.父级伪类


这种方式是目前最常用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容