前言
三列布局是一种比较基础的布局,分别是左列 left,主要用作导航,在整个布局的左边,宽度固定;主列 main 居中,用来显示整个网页的主要内容,宽度自适应;右列 right,平时主要用来显示广告等内容,在整个布局的右边,宽度固定。
那么我们怎么实现这种三列布局呢,先说一下我们平常的方法。
让左列 left 右列 right 分别左右浮动,然后给主列设置左右外边距 margin-left
和 margin-right
,即可实现主列自适应。
代码如下:
DOM:
CSS:
但是这种方法有一个缺点,就是左列 left 和右列 right 必须在主列 main 的前面,顺序不能改变,这就导致主列所显示的主页面无法率先加载,影响用户体验。
圣杯布局
DOM:
圣杯布局的思路是把左列 left 右列 right 主列 main 分别浮动,然后用负外边距给左右两列进行定位;
CSS 如下:
左右两列定位了,main 还没有定位,所以会出现左右列覆盖主列 main 的情况,这时我们给容器 container 添加左右内边距 padding-left
和padding-right
,成功定位主列 main
但这时候左右两列会受容器左右内边距的影响,所以给他们添加相对定位;
最终代码如下:
DOM:
CSS:
圣杯布局的优点:
- 主列率先加载
- 允许任何列是最高的
- DOM 结构简单
缺点:
- 和双飞翼布局相比 CSS 样式较为复杂
双飞翼布局
双飞翼布局源自淘宝 UED,第一步和圣杯布局一样,浮动三列,给左右两列设置负外边距;同样会覆盖主列 main,双飞翼布局的做法是在主列 main 后面添加了一个宽度为 100%的 div,再设置主列 main 的左右边距,代码如下:
DOM:
CSS:
优点:
- 率先加载主列 main
- 允许任何列是最高的
- CSS 样式简单
缺点:
- 和圣杯布局相比 DOM 结构较为复杂
实现三列布局还有很多种方法,比如用时下比较流行的 Flex,等等。
这里只讨论双飞翼和圣杯布局,请大家指正。
加我微信
liruifengv2333
,进群交流,抱团取暖。
- 新生代程序员群
- Astro 学习交流群
关注公众号
很高兴见到你,欢迎来玩儿~
SayHub
,带来更多原创内容。