两列定宽,一列自适应
float + margin
1 | <div id="parent"> |
1 | #parent{ |
float + overflow
优缺点:
- 优点:代码简单,容易理解,无需关注定宽的宽度,利用bfc达到自适应效果
- 缺点:浮动脱离文档流,需要手动清除浮动,否则会产生高度塌陷;
1 | <div id="parent"> |
1 | #parent{ |
flex
1 | <div id="parent"> |
1 | #parent { |
Grid
1 | <div id="parent"> |
1 | #parent { |
两侧定宽,中间自适应
圣杯布局方法
注意
HTML 结构先写 center ,然后是 left 和 right,因为需要先渲染 center
left、right需设置 position:relative
float:left
以及相应的 left、right 值
理解负边距的作用,left 的 margin-left:-100%
使它上移一行,同时 right 向左移占据 left 原先位置,同理,right 的 margin-left: -200px
使它上移并靠右。
总结
使用了 relative 相对定位
、float
(需要请浮动,此处使用 overflow:hidden;
方法)和 负值 margin
,将 left 和 right 部分「安装」到 parent
的两侧,顾名「圣杯」。
但是特殊情况下就会暴露此方案的弊端,如果将浏览器无线变窄,「圣杯」将会「破碎」掉。如图,当 center
部分的宽小于 left
部分时就会发生布局混乱。
1 | <div id="header"></div> |
1 | #header{ |
双飞翼布局方法
同样使用了 float
和 负值 margin
,不同的是,并没有使用 relative 相对定位
而是增加了 dom 结构,增加了一个层级。确实解决了圣杯布局的缺陷。
1 | <div id="header"></div> |
1 | #header { |
对比
圣杯布局是 parent + padding,双飞翼采用 子元素 + margin,最主要的还是负边距的使用
优点 | 缺点 | |
---|---|---|
圣杯 | 结构简单,无多余 dom 层 | 中间部分宽度小于左侧时布局混乱 |
双飞翼 | 支持各种宽高变化,通用性强 | dom 结构多余层,增加渲染树生成的计算量 |
flex
推荐这种方法
1 | <div id="parent"> |
1 | #parent { |
Grid
1 | <div id="parent"> |
1 | #parent { |
参考