当元素有浮动属性时,会对其父元素或后面的元素产生影响,会出现布局错乱现象,可以通过清除浮动的方式来解决浮动元素的影响。
对父元素的影响:
1、当子元素浮动时,父元素不再具有独占一行的能力,后面的元素会跑上来和它重叠,所以它下面的元素必须要加清除浮动clear:both;
2、当子元素都是float时,父元素的高度就不能自动适应子元素的高度而自动增减高度来适应,从而导致父元素的内容消失。
解决方案:
1、直接在最下面加入一个空的子元素块(
2、在父元素中设置overflow:hidden;
css中溢出的使用overflow:设置当对象的内容超过其指定的高度及宽度时,进行管理值:
overflow:visible; //默认值,不剪切内容,也不添加滚动条
overflow:auto; //在必须时,对象内容才会被剪切或者显示滚动条
overflow:hidden; //不显示超过对象尺寸的内容
overflow:scroll; //总是显示滚动条
3、用伪类after,在问题6中解析(最下面)
实质作用原理:
1、当(元素A)clear:left时,会把前面的(B元素)属性float:left,视为存在(即B元素的独立行起作用),元素A只能在元素B的下一行,不能浮到B的位置(重合)
2、当(元素A)clear:right时,会把前面B元素属性float:right,视为存在(即B元素的独立行起作用),元素A只能在元素B的下一行
3、只有clear:left对应float:left; clear:right对应float:right一一对应时,才起作用,否则都不起清除作用
4、当clear:both时,就是不管float:(left||right),清除都起作用
clear属性的4个属性值:none、left、right、both
对float浮动的领悟:
float有三个值:none、left、right(不浮动、向左浮动、向右浮动);使用浮动时,整个元素块就会脱离文档流,也会脱离出该元素的父元素包含的范围,成为独立元素块,但该元素块不会影响它前面的元素块,但会影响它的父元素和父元素后面的兄弟元素、该元素下面的兄弟元素。
解决问题的本质是:把float的元素块控制在父元素的内部,使浮动效果只在父元素内。有两种方法:
1、父元素使用overflow:hidden、auto、scroll。 原理是:对父元素的子元素进行计算,判断是否有超出父元素的大小,这样就会促使对float元素计算在内,使float元素块被控制在父元素内,不会脱离父元素的范围,依然是父元素的一部分。这样就只是在父元素内float,父元素外依然是正常流分布。
2、在float元素的下一个兄弟元素内使用clear:both;是该兄弟元素认为float元素依然存在正常文档流中,这样也起到和上面1相同的作用。
目的:让float元素块控制在父元素的范围内,成为父元素的一部分,只在父元素内部起到浮动作用。不会脱离父元素的包围范围内。