首先谈谈三栏布局
-
三栏布局长什么样子? 三栏布局是左右两侧浮动,而中间宽度自适应不浮动做出的效果。
-
三栏布局的HTML

- 如果我想页面的main主要内容优先加载呢?效果如下图:
产生这种效果的原因是先加载main,而main是块级元素占据一整行,导致后面加载的两侧侧边栏被挤到了下行。
我们选择了圣杯布局
-
为什么要使用圣杯布局? 为了网页的优化,主要内容需要优先加载,说白了就是为了解决三栏布局的main优先加载的问题,让网页在main优先加载的同时还保持普通三栏布局的样式;
-
圣杯布局的制作步骤 1.写下HTML代码,规定main、aside、ad的区域,并添加如下样式

2.使三个区域都处于左浮动状态,并使main的宽度成父容器的100%;

3.为两侧侧边栏添加负margin,用以调整位置,其中摆在左边的aside的margin-left
为-100%,而右边的ad的margin-left
则为负的其自身的宽度。(利用了浮动元素的负margin到一定值后会使其自身往上一行移动的原理)

4.为class="ct"
的主容器设置左右margin值,使其为以后的侧边栏定位空出位置,margin的值为侧边栏的宽。

5.对ad和aside添加position:relative
,然后对它们进行定位,移动到两侧,我们的圣杯布局就初步做完了,但是还有问题:

- 圣杯布局留下的问题 1.当我把整个页面的宽度收缩后,会出现布局错乱的效果:

2.产生这个问题的原因 当页面收缩时,main因为是其父容器ct的100%的宽度,所以main也会跟着收缩,当main收缩到比aside宽度还要小,这时候父容器ct的100%宽度<aside的宽度,就不能容纳aside,所以将其挤到了下一行,ad同理。
3.解决方案
可以给父容器ct加上一个min-width
样式,min-width
的值不能小于ad和aside两者间的宽度最大值,这样做可以使中间的main的宽度始终比ad和aside大,就不会导致布局错乱了。

- 圣杯布局代码一览

双飞翼布局比圣杯布局更好?
-
为什么选择双飞翼布局? 因为双飞翼布局不仅能满足main处于优先加载的地位,而且更好的解决了圣杯布局的错乱问题,且css代码更简单,缺点是增加了一个标签。
-
双飞翼布局的制作 1.首先圣杯布局的步骤到了这一步:

2.给main里面添加一个内容标签content,并且设置它的左右margin值为左右侧边栏的宽度:

3.去掉main的背景色和高度,双飞翼布局就做成了

双飞翼布局和圣杯布局的对比
- 优点: 1.双飞翼布局完美解决了圣杯布局的布局错乱问题; 2.双飞翼布局CSS代码逻辑更简单;
- 缺点: 添加了无意义的标签;
- 实际应用: 个人更偏向于使用双飞翼布局,但也会根据具体的需求进行使用;