双飞翼HTML圣杯布局,圣杯布局和双飞翼布局的理解与思考

**圣杯布局和双飞翼布局都是前端工程师需要日常掌握的重要布局方式。按照我的理解,其实圣杯布局和双飞翼布局的实现,目的都是在于两栏固定宽度,中间部分自适应

但是实际实现起来 还是有一些区别的

**圣杯布局**

图为:

![](https://s1.51cto.com/images/blog/201905/10/6c6c13e0dee7894a8ac85690524c8e77.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

在这里实现了 左(200px)、右(300px)、中间自适应。

**注:**

**html代码中,middle部分首先要放在最前面部分,然后是left、right,以便先行渲染**

**结构:**

![](https://s1.51cto.com/images/blog/201905/10/c3fe1b486355fcf1843aed8b8003c9e6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

首先定义出整个布局的DOM结构,主题部分是由content包裹的middle、left,right三列,其中middle定义在最前面。

**css**

左侧的固定宽度为200px,右侧的固定宽度为300px,则在content上设置

![](https://s1.51cto.com/images/blog/201905/10/ebc7785efa751316eb56a2458b8c44c7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

为左右两列预留出相应的空间

![](https://s1.51cto.com/images/blog/201905/10/fadd×××171c7e231a3ff536aba707.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

然后分别给三列设置宽度与浮动

![](https://s1.51cto.com/images/blog/201905/10/13c0e0a76debba28d5ff965f5a74beaf.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

得到如下效果:

![](https://s1.51cto.com/images/blog/201905/10/d1d45c38aa9407f92ffb477a2a5e0d33.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

根据浮动的特性,middle的宽度为100%,所以占据了第一行的所有空间,left和right被挤到了第二行

接下来将left和right放置到之前预留出的位置

![](https://s1.51cto.com/images/blog/201905/10/8b5fcecb267ed3f32674d916961aea79.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

随后使用定位position:relative,在left、right

原来的位置基础上左移200,右移300

![](https://s1.51cto.com/images/blog/201905/10/04d2f4d8e8e35b4edde8bfab6f84dd9f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

最终效果为:

![](https://s1.51cto.com/images/blog/201905/10/ee74e6d1328fea9713dfefbd4f88cc46.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

**到这基本布局效果已经完成,但还是在考虑最后一步,那就是宽的问题,之前为了预留左右位置设置了padding属性,所以这里计算宽的时候不要忘记了这个**

**双飞翼布局**

**还是以上述格局数据为例,设置各列的宽度与浮动,并且预留出空间**

**结构:**

![](https://s1.51cto.com/images/blog/201905/10/a74420abdb92aad3bcfb5ccee3bc5cbe.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

**双飞翼布局的DOM结构与圣杯布局的区别是middle还有一个子元素inner**

**css**

![](https://s1.51cto.com/images/blog/201905/10/136de8502eba78d04558a8cd39c82d4e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

最终效果为:

![](https://s1.51cto.com/images/blog/201905/10/0d97062f988ef3af0a4f8a31dca19861.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

**由于双飞翼布局没有用到position:relative**

所以不考虑计算宽度,预留多少空间,就设置多少空间

**如果,您认为阅读这篇博客让你有些收获,请您关注一下。感谢您的支持,如有不足,请多指教。**

**微信号:bsl521921**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值