前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >圣杯布局与双飞翼布局

圣杯布局与双飞翼布局

作者头像
laixiangran
发布2018-04-24 10:20:53
7910
发布2018-04-24 10:20:53
举报
文章被收录于专栏:前端布道前端布道

圣杯布局

实现原理

html代码中,middle部分首先要放在container的最前部分,然后是left,right

  1. 将三者都设置 float:left, position:relative (因为相对定位后面会用到)
  2. middle设置 width:100% 占满一行
  3. 此时middle占满一行,所以要把left拉到middle所在行的最左边,使用 margin-left:-100%
  4. 这时left拉回到middle所在行的最左边,但会覆盖middle内容的左端,要把middle内容拉出来,所以在外围container加上 padding:0 210px
  5. middle内容拉出来了,但left也跟着出来了,所以要还原,就对left使用相对定位 left:-210px
  6. 同理,right要拉到middle所在行的最右边,使用 margin-left:-210pxright:-210px

实现代码

代码语言:javascript
复制
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>圣杯布局</title>
    <style type="text/css">
        body {
            text-align: center;;
        }
        #demo {
            margin: auto;
        }
        #header, #footer {
            height: 50px;
            background-color: #aaa;
        }
        #container {
            overflow: hidden;
            margin: 10px 0;
            padding:0 210px;
        }
        #left {
            background-color: red;
            float:left;
            position:relative;
            left:-210px;
            width:200px;
            margin-left:-100%;
        }
        #right {
            background-color: green;
            width: 200px;
            margin-left: -200px;
            float: left;
            right: -210px;
            position: relative;
        }
        #middle {
            background-color: blue;
            float:left;
            width:100%;
        }
    </style>
</head>
<body>
    <div id="demo">
        <header id="header">头部</header>
        <div id="container">
            <div id="middle">
                middle<br>主内容区域
            </div>
            <div id="left">
                left<br>左侧边栏区域
            </div>
            <div id="right">
                right<br>右侧边栏区域
            </div>
        </div>
        <footer id="footer">底部</footer>
    </div>
</body>
</html>

双飞翼布局

实现原理

html代码中,middle部分首先要放在container的最前部分,然后是left,right

  1. 将三者都设置 float:left
  2. middle设置 width:100% 占满一行
  3. 此时middle占满一行,所以要把left拉到middle所在行的最左边,使用 margin-left:-100%,同理right使用 margin-left:-200px
  4. 此时middle的内容被覆盖,要把middle的内容拉出来,除了使用外围container的padding,还可以考虑使用margin,给middle增加一个内层div -- middle_content, 然后设置 margin:0 210px

实现代码

代码语言:javascript
复制
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title>双飞翼布局</title>
    <style type="text/css">
        body {
            text-align: center;;
        }
        #header, #footer {
            height: 50px;
            background-color: #aaa;
        }
        #container {
            overflow: hidden;
            margin: 10px 0;
        }
        #left {
            background-color: red;
            float:left;
            width:200px;
            margin-left: -100%;
        }
        #right {
            background-color: green;
            width: 200px;
            float: left;
            margin-left: -200px;
        }
        #middle {
            float: left;
            width: 100%;
        }
        #middle_content {
            background-color: blue;
            margin: 0 210px;
        }
    </style>
</head>
<body>
    <div id="demo">
        <header id="header">头部</header>
        <div id="container">
            <div id="middle">
                <div id="middle_content">
                    middle_content<br>主内容区域
                </div>
            </div>
            <div id="left">
                left<br>左侧边栏区域
            </div>
            <div id="right">
                right<br>右侧边栏区域
            </div>
        </div>
        <footer id="footer">底部</footer>
    </div>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端布道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 圣杯布局
    • 实现原理
      • 实现代码
      • 双飞翼布局
        • 实现原理
          • 实现代码
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档