布局
左右定宽中间自适应的三栏布局
- 利用BFC不和浮动元素重叠的特性实现
- 三栏的顺序分别为
左-右-中
- 左右两栏分别设置宽度以及左浮动和右浮动,脱离普通流,这时如果让中间栏高度大于2个边栏会发现两边栏实际上是叠在main上面的,因为main是块状元素,独占一行,浮动元素向相应的方向浮动,直到遇到容器的边框
- 中间栏设置
overflow:hidden
创建BFC,这样就可以利用BFC不和浮动元素重叠的特性,让中间栏的宽度自适应 - 在线demo
- 三栏的顺序分别为
- 圣杯布局
- 三栏的顺序为中-左-右,并包裹在
warp
容器内 - 三栏同时设置
float:left
,左右两栏定宽、中间宽度100% - 利用负的外边距分别把
left
和right
拉上来,这时视觉上left和right是叠在main
上面的 - 设置warp的左右
padding
分别为左右栏的宽度 - 利用相对定位让
left
和right
回到合适的位置 - 在线demo
- 三栏的顺序为中-左-右,并包裹在
- 双飞翼
- 三栏的顺序为中-左-右
- 双飞翼布局跟圣杯很像,区别在于圣杯利用
padding
控制main
的位置,双飞翼用margin
控制main
的位置 - 需要额外在main里面加一层div,用于
margin
控制,但是可以免去左右两栏的相对定位 - 在线demo
- Flex
- 三栏的顺序为左-中-右,并包裹在
warp
容器内 - warp设置
display: flex
,如果三栏高度自适应又希望顶部对齐,需要添加align-items: flex-start
- 在线demo
- 三栏的顺序为左-中-右,并包裹在
- 利用BFC不和浮动元素重叠的特性实现
响应式网格(栅格化)布局
- 模拟BootStrap 的响应式 12 栏网格布局
- 盒模型改为
border-box
- 给
.container
添加padding属性,否则会出现水平滚动条 - @media设置断点,
width
用百分比作为单位 - 在线demo
参考资料:
关于兼容性
- 前三种方法理论上支持IE8及以上浏览器和各种现代浏览器
- flex布局部分支持IE10+和现代浏览器,具体参见CAN I USE