关于圣杯布局的实现原理剖析

举报
Zhoubo 发表于 2020/07/05 15:31:28 2020/07/05
【摘要】 参加了[全栈开发者] 【WEB前端全栈成长计划】剖析一下圣杯布局的实现原理巩固学习效果。

关于圣杯布局的实现原理剖析

 

参加了[全栈开发者] WEB前端全栈成长计划】,听了课程中老师讲布局案例时提到过圣杯布局,事后百度了一下,可能很多同学们和我一样刚第一次接触到“拥有姓名”的经典布局。仔细研究了一下各两种布局最终都是实现一个左中右的布局,左和右固定宽度,中间宽度100%自适应(如图1)。剖析一下圣杯布局的实现原理巩固学习效果。

1 

一、实现圣杯布局的步骤

1步:定义主体<div class=main-body>,设定主体divpadding左右边距,这里的边距是为左侧和右侧两个DIV预留的宽度(如图2)。

2步:主体DIV内分别定义中间、左侧、右侧三个DIV(如图1)。

3步:定义CSS样式

1、定义左侧<div class=main-body-padding-left”>margin-left:-100%使其与主体<div>同一行,然后设定left:-300px与主体<div>左侧宽度重叠(如图3)。

2、定义右侧<div class=main-body-padding-right”>margin-left:-300使其与主体<div>同一行,然后right:-300px使其与主体<div>右侧宽度重叠(如图4)。

 

 

2

 

 3

4

 

二、实现圣杯布局的代码部份

HTML框架

<div class="main-body">
    <div class="main-body-center">中间</div>
    <div class="main-body-padding-left">左侧</div>
    <div class="main-body-padding-right">右侧</div>
</div>

 

CSS样式

<style>
    body{
        margin:0px;
        padding:0px;
        color:deeppink;
    }
    .main-body{
        margin:auto 40px;
        margin-top:10px;
        padding:0 300px 0 300px;
        background:red;
        overflow:hidden;
    }
    .main-body-center{
        float:left;
        width:100%;
        background-color:gray;
    }
    .main-body-padding-left{
        float:left;
        width:300px;
        margin-left:-100%;
        position:relative;
        left:-300px;
        background-color:yellow;
    }
    .main-body-padding-right{
        float:left;
        width:300px;
        margin-left:-300px;
        position:relative;
        right:-300px;
        background-color:blue;
    }
</style>

 

三、知识点总结

圣杯布局是利用负margin属性,margin-left: -100%,这里说的-100%是相对于父元素宽度而言,子元素margin-left: -100%就像向父元素移动,可以理解为两行,第一行宽度100%,第二行margin-left: -100%后即和第一行完全重叠,通过z-index的设置可以将第一行显示。

通过浏览器调试可以发现,当左侧div设定 z-index:1时,主体<div>定义的padding-left宽度就被显示出来了(如图5),当左侧取消z-index属性,布局恢复正常(如图6)。

5

6

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。