当前位置: 首页 > Web前端 > HTML

面试官最喜欢问的6种清浮和BFC

时间:2023-03-28 12:52:46 HTML

浮的时候,他肯定不是要你简单的回答清浮的方法,而是要你顺便回答BFC。在人群中脱颖而出!嘿嘿!浮动1.场景当我们要实现如下效果的时候,第一时间肯定会想到浮动的floatflex:第一时间不应该想到我吗?我:不,我不要flex:呵呵,男人BB不多,直接贴代码

.box{border:1pxsolidblack;填充:5px;宽度:450px;}.left{宽度:100px;高度:100px;背景色:红色;向左飘浮;}.right{宽度:100px;高度:100px;背景色:红色;浮动:对;但我得到了这个效果:WTF!为什么是这样???和我想的不一样!!!为什么???2、找原因。原因是浮动元素会脱离文档流。文件流出的是什么?比如,有一天你对老板说:“我不想干了,世界那么大,我想去看看”,那么从今往后,你的老板就管不了你了。脱离文档流也是如此。元素一旦浮动,就会离开文档流,其父元素就无法再控制它,布局就会向前移动。这就是上面父元素的高度塌陷的原因。要想解决以上问题,就得使出浑身解数,这也是面试官通常会问的问题。告诉我你通常如何清除浮动。这个时候回答的越多越好,嘿嘿!!1.设置父级为float.box{border:1pxsolidblack;填充:5px;宽度:450px;float:left}缺点:这种方法弊大于利。想一想,父级别设置为浮动的话,爷爷类肯定会再次受到影响,必须解决爷爷类的身高崩塌问题。这不是无限娃娃吗??2.父级添加定位absolute.box{border:1pxsolidblack;填充:5px;宽度:450px;height:100px}缺点:position:absolute也会脱离文档流,影响整体布局,这不是给自己找罪吗?3.设置overflow:hidden.box{border:1pxsolidblack;填充:5px;宽度:450px;溢出:隐藏}为父母。缺点:当文本太长,包含太长的英文时,英文文本会被隐藏
林三心林三心林三心林三心林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心森林三心之林三心之林Linsunshine_Linsunshine_LinXinLinLinSanXin
4.给parent设置对应的高度。box{border:1pxsolidblack;填充:5px;宽度:450px;height:100px}缺点:如果浮动元素是固定宽度的话,没关系。如果不是固定宽度,那么这个方法很不灵活。可能今天100px,明天200px,后天300px。那你会累吗?5.最后加一个空元素clear关于clear:所以这里bottomDiv设置成clear:both,也就是说它的左右不能有浮动元素,强制他向下移动,然后展开高度父框.bottomDiv{清除:两者;缺点:很明显,添加div标签会增加页面的渲染负担(虽然我觉得应该影响不大)6.给parent添加伪元素清除这个方法就是把上面的换成伪元素作为我们都知道,伪元素是不会被渲染的,所以也弥补了之前方法的不足。.box::after{内容:'.';高度:0;显示:块;明确:两者;!!这应该是目前最好的解决方案。找不到不足之处,欢迎大家提供不足之处。让我们谈谈BFC1。官方的解释是BlockFormattingContext(BFC)是网页可视化CSS渲染的一部分。它是块盒布局过程发生的区域,也是浮动元素与其他元素交互的区域。浏览器对BFC的限制规则是:1、生成的BFC元素的子元素会被一个一个的放置。2.它们垂直方向的起点是一个包含块的顶部,相邻两个子元素之间的垂直距离取决于元素的边距属性。在BFC中——相邻块级元素的边距会折叠(Masteringmargincollapsing)。3.在生成BFC元素的子元素中,每个子元素的左边距触及包含块的左边界(对于从右到左的格式化,右边距触及右边界),即使是浮动元素(虽然子元素的内容区域会因为float而被压缩),除非这个子元素也创建了一个新的BFC(比如它本身就是一个float元素)。这是MDN上的官方解释。(⊙o⊙)……确实挺官方的。2.触发条件的根元素,即HTML标签的浮动元素:float值为left,rightoverflow值为不可见,值为auto、scroll、hiddendisplay,值为inline-block,table-cell,table-caption,table,inline-table,flex,inline-flex,--grid,inline-grid定位元素:位置值为absolute,fixed3。个人理解1.innerBox会在垂直方向一个接一个的放置2.innerBox的垂直距离由margin决定。(完整的说法是:属于同一个BFC的两个相邻Box的外边距会塌陷,不同的BFC不会塌陷。)3.每个元素的左外边距触及包含块的左边界(从左到右)对),即使是浮动元素。(这意味着BFC的子元素不会超出其包含块,position为absolute的元素可以超出其包含块的边界)4.BFC的区域不会与的区域重叠float5的元素。在计算BFC的高度时,不用说了,floating子元素也参与了1点和3点的计算,大家都懂的。让我们重点关注下面的第2、4和5点!4.解决边距重叠问题如果我想让两个盒子之间的距离为20px,我这样写:.box2{margin-bottom:10px;宽度:100px;高度:100px;背景色:红色;}.box3{margin-top:10px;宽度:100px;高度:100px;背景色:红色;正如预期的那样,两个框的边距重叠:如何解决?根据我理解的第二点,两个BFC环境不同的box,它们的margin是不会重叠的,那么我们只需要触发box3的BFC即可。box3{底部边距:10px;宽度:100px;高度:100px;背景色:红色;向左飘浮;}这样就实现了两个框的中间键间隔为20pxdiv>.w{width:100px;高度:100px;}.box2{浮动:左;//触发高炉C底色:红色;}.box3{背景:绿色;}结果是红框飘出文档流,导致绿框向前移动,导致红框盖住绿框。如何解决?根据我理解的第四点:浮动框与BFC框不重叠,所以我们只需要将绿色框设置为BFC框即可。box3{背景:绿色;overflow:hidden//triggerBFC}作用:6.使用BFC清除浮动根据我理解的第五点:BFC框会将内部浮动框计入高度,这就是为什么可以通过设置float来解决浮动问题:leftposition:absoluteoverflow:hidden针对父框高度塌陷问题,因为这些方法让父框变成了BFC框,BFC框会将内部浮动框计入高度,解决了高度塌陷问题。结论!我是林三鑫,一个狂热的前端菜鸟程序员。如果你有上进心,喜欢前端,想学前端,那我们可以交个朋友一起钓鱼哈哈,摸摸鱼群,加我加我[思考]