在文档流中,若父元素未设置高度,那么父元素的高度默认是被子元素撑开的,即子元素多高,父元素就有多高。但是当子元素设置浮动之后,子元素就会完全脱离文档流,父元素还在文档流中,此时父元素的高度就没有子元素撑起,从而导致父元素的高度塌陷。简单来说,就是包含含有浮动的元素的上一级的高度变为0了,下面的元素会上去,这样会导致页面布局混乱。
方法1:父元素结束之前添加一个标签 <div style="clear:both;"></div>
缺点:增加了无意义的标签
方法2:给父元素设置overflow:hidden; zoom:1;
缺点:要是子元素要margin负值定位或是负的绝对定位,会被裁掉,所以此方法是有不小的局限性的。
方法3:让父元素本身也浮动float:left;
缺点:虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且会导致下边的元素上移,使得跟父元素相邻的元素的布局受到影响。
方法4:给父元素一个固定高度,此方法适用于子元素高度已知并且固定的情况
方法5:给父元素设置display: inline-block;
缺点:会导致父元素的宽度丢失