三栏布局,这里实现的是两侧栏固定宽度,中间栏自适应。
基于纯 float
实现的三栏布局需要将中间的内容放在 HTML 结构的最后,否则右侧会沉在中间内容的下侧.
float: left
和 float: right
width
⚠️ 注意:
position: relative
position: absolute
width
left: 0
和 right: 0
left: width
和 right: width
display: table
width: 100%
height
display: table-cell
width
margin
不起效display: flex
width
flex: 1
display: grid
width: 100%
grid-template-columns: width auto width
grid-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: flex
left
和 right
区域定宽,center
设置为 flex: 1
即可参考资料:CodePen
🛠 实现方式:
header
和 footer
分别占三个,其余各占一个,并为其命名grid-area
grid-template-rows
grid-template-columns
双飞翼布局与圣杯布局对比:
两者解决的问题一半是相同的,也就是三栏全部浮动,但左右两栏加上负 margin
让其跟中间栏并排,以形成三栏布局。
不同在于解决中间栏内容不被遮挡的解决方案上。圣杯布局通过父容器设置 padding-left
和 padding-right
后,将左右两栏用相对布局并分别配合 right
和 left
属性,以便让左右两栏移动后不遮挡中间栏。
双飞翼布局,为了中间栏不被遮挡,直接在中间栏内部创建子容器用于放置内容,在该子容器里用 margin-left
和 margin-right
为左右两栏区域留出位置。
margin
给中间内容展示区域腾出空间padding
,而双飞翼采用 margin
,解决圣杯布局文字溢出问题left
和 right
值