三栏布局,这里实现的是两侧栏固定宽度,中间栏自适应。
基于纯 float 实现的三栏布局需要将中间的内容放在 HTML 结构的最后,否则右侧会沉在中间内容的下侧.
float: left 和 float: rightwidth⚠️ 注意:
position: relativeposition: absolutewidthleft: 0 和 right: 0left: width 和 right: widthdisplay: tablewidth: 100%heightdisplay: table-cellwidthmargin 不起效display: flexwidthflex: 1display: gridwidth: 100%grid-template-columns: width auto widthgrid-template-rows圣杯布局(Holy Grail):随着页面宽度的变化,三栏布局中的中间栏区域优先自适应渲染,两侧区域宽度固定不变。
圣杯布局要求:
header 和 footer 各自占领屏幕所有宽度,高度固定container 是一个三栏布局,且三列等高会出现的问题:
🛠 实现方式:
header 和 footer 样式,使之横向撑满container 中的三列设为浮动和相对定位,center 要放最前面,footer 清除浮动center 设置 width: 100% 占满容器center 占满容器,两侧区域被挤下去padding-left 为左侧区域腾出展示空间,相对应设置 padding-right 为右侧区域腾出空间margin-left: -100% 和 right 为自身宽度,回到上一行最左侧margin-right 为自身宽度,回到上一行最右侧文字溢出问题:
问题:如果某列内容过多,文字会溢出
解决方案;等高布局
🛠 实现方式:
header 和 footer 样式,使之横向撑满container 中的 left、center、right 依次排布即可container 为弹性布局 display: flexleft 和 right 区域定宽,center 设置为 flex: 1 即可参考资料:CodePen
🛠 实现方式:
header 和 footer 分别占三个,其余各占一个,并为其命名grid-areagrid-template-rowsgrid-template-columns双飞翼布局与圣杯布局对比:
两者解决的问题一半是相同的,也就是三栏全部浮动,但左右两栏加上负 margin 让其跟中间栏并排,以形成三栏布局。
不同在于解决中间栏内容不被遮挡的解决方案上。圣杯布局通过父容器设置 padding-left 和 padding-right 后,将左右两栏用相对布局并分别配合 right 和 left 属性,以便让左右两栏移动后不遮挡中间栏。
双飞翼布局,为了中间栏不被遮挡,直接在中间栏内部创建子容器用于放置内容,在该子容器里用 margin-left 和 margin-right 为左右两栏区域留出位置。
margin 给中间内容展示区域腾出空间padding,而双飞翼采用 margin,解决圣杯布局文字溢出问题left 和 right 值