CSS | 圣杯布局、双飞翼布局 | 自适应三栏布局

心不动则不痛 提交于 2019-12-21 15:28:29
圣杯布局双飞翼布局是前端工程师需要日常掌握的重要布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局
虽然两者的实现方法略有差异,不过都遵循了以下要点:

1.两侧宽度固定,中间宽度自适应
2.中间部分在DOM结构上优先,以便先行渲染
3.允许三列中的任意一列成为最高列
4.只需要使用一个额外的<div>标签

圣杯布局

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>圣杯布局</title>
        <style type="text/css">
            .header{
                height:50px;
                background: #666;
                text-align: center;
            }
            .main{
                /*左右栏通过添加负的margin放到正确的位置了,此段代码是为了摆正中间栏的位置*/
                padding:0 200px 0 180px;
                height:100px;
            }
            .middle{
                float:left;
                width:100%;/*左栏上去到第一行*/
                height:100px;
                background:blue;
            }
            .left{
                float:left;
                width:180px;
                height:100px;
                margin-left:-100%;
                background:#0c9;
                /*中间栏的位置摆正之后,左栏的位置也相应右移,通过相对定位的left恢复到正确位置*/
                position:relative;
                left:-180px;
            }
            .right{
                float:left;
                width:200px;
                height:100px;
                margin-left:-200px;
                background:#0c9;
                /*中间栏的位置摆正之后,右栏的位置也相应左移,通过相对定位的right恢复到正确位置*/
                position:relative;
                right:-200px;
            }
            .footer{
                height:50px;
                background: #666;
                text-align: center;
                
            }
        </style>
    </head>
    <body>
    <div class="header">header</div>
    <div class="main">
      <div class="middle">middle</div>
      <div class="left">left</div>
      <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
    </body>
</html>

双飞翼布局

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>双飞翼布局</title>
        <style type="text/css">
            .header {
                height: 100px;
                background: bisque;
            }

            .left {
                width: 200px;
                height: 300px;
                background: coral;
                float: left;
                margin-left: -100%;
                margin-right: -200px;
            }

            .center {
                background: palegreen;
                float: left;
                width: 100%;
                
            }
            .inside{
                margin-left: 200px;
                margin-right: 180px;
            }

            .right {
                width: 180px;
                height: 200px;
                background: darkorange;
                float: left;
                margin-left: -180px;
                
            }

            .footer {
                height: 200px;
                background: salmon;
                clear: both;
            }
        </style>
    </head>
    <body>
        <div class="header">header</div>
        <div class="main">
            <div class="center">
                <div class="inside">
                    中间自适应区域
                </div>
            </div>
            <div class="left">左边固定区域</div>
            <div class="right">右边固定区域</div>
        </div>
        <div class="footer">footer</div>
    </body>
</html>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!