03 高度塌陷问题

    技术2022-07-12  84

    <!DOCTYPE html> <!-- 高度塌陷问题: 在浮动布局中,若父元素不设置高、宽,父元素的高度默认是被种子元素撑开的 当子元素浮动后,其完全脱离文档流,子元素从文档流中脱离,将无法支撑起父元素的高度 导致父元素的的高度丢失 父元素高度丢失后会导致其下面的元素上移,导致页面布局混乱 所以高度塌陷问题是我们必须解决的问题 解决方法: BFC(Block Fromatting Context) 块级格式化环境 BFC是CSS中的隐含的属性,可以为一个元素开启BFC,开启BFC的元素将会成为一个独立的布局区域 开启BFC后的特点: 1.开启BFC的元素不会被浮动元素覆盖 (给不想被覆盖的元素开) 2.开启BFC的元素 子元素不会和父元素外边距重叠 (给父元素开) 3.开启BFC的父元素可以包含浮动的子元素 (给父元素开) 开启BFC: 1.设置元素的浮动(float:left;) :不推荐 2.将元素设置为行内块元素(display:inline-block;):不推荐 3.微元素设置overflow为 非visible(overflow:hidden;) :推荐 overflow的默认值为visible, 我们可以设置成scroll(带滚动条) 或者auto 或者hidden(推荐) overflow本身是用来裁剪,防止溢出的 --> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> /* 开启了BFC后的效果 通过设置overflow开启BFC*/ /******* 开启BFC的父元素可以包含浮动的子元素 *************************/ .outer{ border: 2px red solid; overflow: hidden;/* 开启了BFC */ } .one{ width: 100px; height: 100px; background-color: springgreen; float: left; } /* 没有开启BFC的效果,导致高度塌陷*/ .two{ border: 2px red solid; } .three{ width: 100px; height: 100px; background-color: springgreen; float: left; } .four{ width: 120px; height: 120px; background-color: yellowgreen; } /******************** 开启BFC的元素不会被浮动元素覆盖,如下 ****************/ .a{ width: 200px; height: 200px; background-color: blue; float: left; } .b{ width: 200px; height: 200px; background-color: blueviolet; /* 开启BFC,本身b因a脱离文档流,会被a盖住,开启后不会被a盖住*/ overflow: hidden; /* -总图中可以看出b表面左移了100px -可以得出结论,b虽然开启了BFC,但是它仍然占用着a下面的位置, 所以就可以解释c为什么不会被a盖住 */ margin-left: 300px; } .c{ /* 没有开启BFC,但是依然没有被a盖住,这就说明下面被占用了,既被b占用了 */ width: 200px; height: 200px; background-color: rgb(82, 224, 82); } /********** 开启BFC的元素 子元素不会和父元素外边距重叠 ******************************/ .box1{ width:150px; height: 150px; background-color: brown; /* 开起来BFC ,如果父元素本身浮动就不需要另设置了,因为float就是开起来BFC*/ overflow: hidden; } .box2{ width: 70px; height: 70px; background-color: burlywood; /* 若父元素不开启BFC,则margin-top是和父元素一起下移 */ margin-top: 50px; } .box3{/* 没有开启BFC */ width:150px; height: 150px; background-color: brown; } .box4{ width: 70px; height: 70px; background-color: burlywood; /* 若父元素不开启BFC,则margin-top是和父元素一起下移 */ margin-top: 50px; } </style> </head> <body> <div class="outer"> <div class="one"></div> </div> <div>hello_Word</div><!-- 没被覆盖 --> <br /> <br /> <br /> <br /> <br /> <div class="two"> <div class="three"></div> </div> <div class="four"></div> <!-- 被覆盖 --> <br/> <br/> <br/> <br/> <br/> <div class="a">a</div> <div class="b">b</div> <div class="c">c</div> <br/> <br/> <br/> <div class="box1"> <div class="box2">子元素</div> </div> <div class="box3"> <div class="box4">子元素</div> </div> </body> </html>
    Processed: 0.009, SQL: 9