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

面试常见问题:左边固定,右边自适应布局(八种方式:negativemargin,flex,Grid,table-cell等)

时间:2023-04-05 16:20:40 HTML5

这个布局是经典布局之一,也是in-深入理解布局、BFC、文档流同时学习新的布局方法的有效途径之一。下面对固定左侧和右侧自适应布局进行综合分析总结。布局要求:左边固定100px,右边自适应1.Leftposition:absolute,rightmargin-left--入门的基本写法这种方法主要是利用position:absolute的特性,与文档分离流动。leftfixed1leftfixed2leftfixed3

rightadaptive1rightadaptive2rightAdaptive3
//父元素的相对定位作为子元素绝对定位的参考。父母{显示:相对;背景:#ddd}.l-child{位置:绝对;宽度:100px;background:#bbb}.r-child{margin-left:100px;background:#999}demo展示2.float:left+margin-left触发计算父元素的宽度--技巧写法此方法使用float:left离开流的文档特征。与方法一类似,但脱离文档流的方式不同,父元素的作用也不同。方法一中,父元素需要使用display:relative作为定位参考,给子元素一个定位参考;方法二,父元素使用overflow:hidden清除浮动,避免影响后续元素。.parent{background:#ddd;overflow:hidden;}.l-child{float:left;width:100px;background:#bbb;z-index:10000;}.r-child{margin-left:100px;background:#999;}demo展示3.float:left+BFC触发右侧子元素宽度的计算——技巧写作本方法使用左侧float确定宽度,右侧框的overflow:hidden触发BFC使其不与浮动框区域重叠,并且将重新计算宽度。.parent{background:#ddd;}.l-child{float:left;width:100px;background:#bbb;}.r-child{overflow:hidden;background:#999;}demo展示4.左右浮动,右侧使用负边距——专家级写法这种方法布局比较复杂,而且dom结构也不同于大多数方法。获取难点:父元素清除浮动,防止其他元素受到浮动的影响;A元素的宽度为100%没有变化,经过margin-left:-100px后,文档流被认为是border为界,A缩小100px,A向右浮动,即有左边是100px的空白,用来填充文档流空间;子元素A1被认为是父元素大小没有改变。margin-left:100px之后,恰好等于父元素在外面腾出的文档流空间;B元素向左浮动,后面就是dom节点,刚好占据覆盖了A腾出的100px空间。右自适应1右adaptive2Rightadaptive3
Leftfixed1Leftfixed2Leftfixed3.parent{background:#ddd;overflow:hidden;}.l-box{float:left;width:100px;background:#bbb;}.r-box{float:right;width:100%;margin-left:-100px;background:#999;}.r-content{margin-left:100px;}演示展示5.table-cell表格布局——古文字法本方法采用table-cell布局,一种简洁古朴的布局方式。也可以直接用表格元素来实现。.parent{显示:表格;宽度:100%;背景:#ddd;}.l-child,.r-child{display:table-cell;}.l-child{width:100px;background:#bbb;}.r-child{background:#999;}demo展示6.calc动态计算宽度——新旧结合的写法这种方法采用传统的inline-block布局,加上calc动态计算右边元素的宽度。.parent{字体大小:0;background:#ddd;}//font-size:0消除行内块框之间的空格.l-child,.r-child{display:inline-block;垂直对齐:顶部;框大小:边框框;字体大小:14px;}//内联块的顶部对齐box.l-child{width:100px;background:#bbb;}.parent.r-child{width:calc(100%-100px);background:#999;}demoshows7.flexlayout--新的布局方式该方法中父元素flex布局后,子元素默认继承灵活布局,除非确定了子元素的灵活布局方式。另外,这种方式的完美之处在于垂直方向也自动填充,轻松实现等高布局!.parent{显示:flex;背景:#ddd}.l-child{flex:00100px;background:#bbb}.r-child{background:#999}demo展示8.Grid布局——新的布局方式css3新的布局比flex更加灵活,可以用于复杂的布局。.parent{显示:网格;网格模板列:100px1fr;对齐项目:开始;背景:#ddd;}.l-child,.r-child{box-sizing:border-box;}.??l-child{grid-column:1;背景:#bbb;}.r-child{网格列:2;背景:#999;}demo展示了以上八种布局,涵盖了CSS中的诸多核心知识点(文档流、BFC、float、position定位、flex布局、Grid布局)。这种布局也可以通过运用以上知识点和灵活组合来实现,比如calc+float等,灵活掌握以上知识点,几乎可以胜任所有布局。在实践中,兼容性好、层数少、不改变文档流、无需计算自适应宽度的方法逐渐成为主流,成为开发者的首选。