本文节选自我的博客:实现三栏布局的十种方式
实现三栏布局也是一道经典的面试题,如果你能侃侃而谈这十种实现三栏布局的方式,一定会令面试官眼前一亮。三栏布局即左右固定中间伸缩,将三栏布局的方式按照中间栏的渲染顺序可以分为三种:float实现的三种(中间栏最后渲染),flex、grid、绝对定位实现的三种(中间栏中间渲染),双飞翼圣杯实现的四种(中间栏最后渲染)
float实现的方式优点是兼容性好;缺点是需要将中间栏放在最后渲染,网速慢的情况下可能会影响用户体验。
CSS实现三栏布局
左栏
右栏
中间栏
CSS实现三栏布局
左栏
右栏
中间栏
CSS实现三栏布局
左栏
右栏
中间栏
这三种方式都是将中间栏放在中间渲染。
CSS实现三栏布局
左栏
中间栏
右栏
CSS实现三栏布局
左栏
中间栏
右栏
CSS实现三栏布局
左栏
中间栏
右栏
这四种方式都是将中间栏放在最前面渲染,保证中间栏最先渲染。
CSS实现三栏布局
左栏
右栏
中间栏
CSS实现三栏布局
middle
left
right
注意:圣杯布局中间列的宽度不能小于两边任意列的宽度,而双飞翼布局则不存在这个问题。
父级padding+子绝父相+负边距:三栏都使用float:left;
父级标签padding: 0 200px;
,结合下面这张图理解
将left和right使用子绝父相,再调整定位的方式弄上去
左边:margin-left: -100%;
(切换到上一行起始位置)left: -200px;
(相对定位,向左移动200px)
右边:margin-left: -200px;
(向左移动一个身位,移动到middle的右侧)left:200px;
(向右移动200px)
还有种方法也能挤上去:margin-right: -200px;
CSS实现三栏布局
中间
左边
右边
中间栏的子标签margin+左右负边距:三栏都使用float:left;
中间栏子标签margin: 0 200px;
HTML中将中间栏放前面;结合下面这张图去理解
CSS实现三栏布局
middle
left
right
中间标签内减模式padding+负数边距:三栏都使用float:left
;中间栏标签padding: 0 200px;
且要设置box-sizing: border-box;
左边:margin-left: -100%
;右边:margin-left: -200px
;
overflow: hidden;
清除浮动显示第二栏 ;注意:HTML需要将中间块放在right之后;margin-left
和margin-right
;注意:HTML需要将中间块放在right之后;calc(100% - 400px);
来计算去除左右两栏宽度后剩余的宽度;display: grid;grid-template-columns: 200px auto 200px;
左右两栏固定宽度,中间自适应宽度;left {order: -1;} right{order: 1;}
中间块默认为0;所以显示顺序了-1、0、1;父级padding+子绝父相+负边距
;中间栏的子标签margin+左右负边距
;中间标签内减模式padding+负数边距
。感谢小伙伴们的耐心观看,本文为笔者个人学习记录,如有谬误,还请告知,万分感谢!如果本文对你有所帮助,还请点个关注点个赞~,您的支持是笔者不断更新的动力!