什么是双飞翼布局
双飞翼布局是上一篇文章CSS布局之圣杯布局的改进,圣杯布局中用到了浮动(float)、负边距(margin)和相对定位(position:relative),不添加额外的标签。而双飞布局需要用到(float)、负边距(margin)、添加额外的标签,没有用到相对定位(position:relative)。
实现方式
DOM 结构,其中左侧宽度为200px,右侧宽度为150px,中间宽度自适应
1 | <div id="header">header</div> |
CSS
1 | body { |
实现步骤
第一步:创建框架
首先创建id 为header、container、footer 的三个div,同时在container 中添加id 为center、left、right 的三个div
1 | <div id="header">header</div> |
第二步:使主内容区自适应
为了使主内容区(center)自适应,设置宽度为100%,同时需要设置center、left、right 为向左浮动,此时left 和right 没有在相应的位置上, 同时为footer 设置clear: both 清除浮动带来的影响
1 | #container .column { |
看上去这样
第三步:设置左侧栏到正确位置
设置左侧栏(left)为负外边距margin: -200px 其宽度为左侧栏自身的宽度width:200px
1 | #left { |
看上去这样
此时left 同center 重叠(overlay)那么如果设置left 的负外边距margin: -100%; 其值为container 的宽度width: 100%,left 就会移动到对应的位置
1 | #left { |
看上去这样
第四步:设置右侧栏到正确位置
按照上一步过程,只要设置右侧栏(right)为负外边距margin: -150px 其宽度为右侧栏自身的宽度width:150px,此时右侧栏(right)就处于正确位置了
1 | #right { |
看上去这样
第五步:正确设置中间栏
此时中间栏(center)被左右俩栏(left、center)覆盖了(overlay),不需要为外层(container)设置内边距(padding),直接给新增的栏(innerCenter)设置外边距(margin)就可以了,其大小分别为左右俩栏(left、center)各自的宽度
1 | #innerCenter { |
看上去这样
第六步:缩放窗口
对窗口进行缩放,当center 的宽度width 为0px时,布局将会出现问题,为此需要设置body 的最小宽度(min-width)为左侧栏(left)的宽度(width)加上右侧栏(right)的宽度(width)加上1px。
1 | body { |
同圣杯布局对比
- 在DOM 结构上,增加了
innerCenter - 在实现步骤上,第五步:正确设置中间栏 以及 第六步:缩放窗口 有所区别