zoukankan      html  css  js  c++  java
  • 三栏布局

    三栏布局在一些电商等类型的网站中很是常见,左右两边固定宽度的导航,而中间则是随浏览器大小改变宽度的内容区域,常见的如京东的页面,今天就来详细阐述几种三栏布局的方法.

    一、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .left{
                    float: left;
                     200px;
                    background-color: red;
                }
                .right{
                    float: right;
                     300px;
                    background-color: green;
                }
                .main{
                    margin: 0 320px 0 220px;
                    background-color: yellow;
                }
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="left"></div>
                <div class="right"></div>
                <div class="main"></div>
            </div>
        </body>
    </html>

    这种方案,是左右两边浮动,然后给中间内容区域设置margin,不过要注意的是,要先让左右两边浮动,再将中间内容区域放进去。缺点是主要内容无法最先加载,当内容较多时,会影响用户使用。

    补充:这种方案,当浏览器宽度小于左右导航宽度之和时,就会发生错乱。

    二、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .left{
                    float: left;
                    width: 200px;
                    background-color: red;
                    margin-right: 20px;
                }
                .right{
                    float: right;
                    width: 300px;
                    margin-left: 20px;
                    background-color: green;
                }
                .main{
                    background-color: yellow;
                    overflow: hidden;
                }
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="left"></div>
                <div class="right"></div>
                <div class="main"></div>
            </div>
        </body>
    </html>

    这种方案和上面那种方案类似,不过是利用BFC 规则(即BFC 区域,不会与浮动元素重叠),缺点和方案一一样。

    补充:当浏览器宽度小于两边导航宽度加上margin值之和时,会发生错乱。

    三、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .box{
                    float: left;
                    width: 100%;
                }
                .main{
                    margin: 0 320px 0 220px;
                    background-color: yellow;
                }
                .main::after{
                    display: block;
                    content: "";
                    font-size: 0;
                    height: 0;
                    clear: both;
                    zoom: 1;
                }
                .left{
                    width: 200px;
                    background-color: red;
                    float: left;
                    margin-left: -100%;
                }
                .right{
                    width: 300px;
                    background-color: green;
                    float: right;
                    margin-left: -300px;
                }
                
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="box">
                    <div class="main"></div>
                </div>
                <div class="left"></div>
                <div class="right"></div>
            </div>
        </body>
    </html>

    这里利用的是浮动元素margin为负值的应用(这里不做细讲),优点是主题内容先加载,不过html结构稍稍复杂了一点。

    四、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .wrap{
                    margin: 0 320px 0 220px;
                }
                .main{
                    float: left;
                    width: 100%;
                    background-color: yellow;
                }
                .left{
                    width: 200px;
                    background-color: red;
                    float: left;
                    margin-left: -100%;
                    position: relative;
                    left: -220px;
                }
                .right{
                    width: 300px;
                    background-color: green;
                    float: left;
                    margin-left: -300px;
                    position: relative;
                    right: -320px;
                }
                
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="main"></div>
                <div class="left"></div>
                <div class="right"></div>
            </div>
        </body>
    </html>

    这种方案和方案三类似,也是有限加载内容主体,但是其有一个致命问题,就是当浏览器缩放到一定程度,布局会乱掉。

    五、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .wrap{
                    display: flex;
                }
                .main{
                    flex-grow: 1;
                    background-color: yellow;
                }
                .left{
                    order: -1;
                    flex: 0 1 300px;
                    margin-right: 20px;
                    background-color: red;
                }
                .right{
                    flex: 0 1 200px;
                    background-color: green;
                    margin-left: 20px;
                }
                
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="main"></div>
                <div class="left"></div>
                <div class="right"></div>
            </div>
        </body>
    </html>

    弹性布局,未来的发展发现,但是其中也有一些问题,不仅仅是兼容性的问题,....

    六、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .wrap{
                    display: table;
                    width: 100%;
                }
                .main,.right,.left{
                    display: table-cell;
                }
                .left{
                    background-color: red;
                    width: 200px;
                }
                .main{
                    background-color: yellow;
                }
                .right{
                    background-color: green;
                    width: 300px;
                }
                
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="left"></div>
                <div class="main"></div>
                <div class="right"></div>
            </div>
        </body>
    </html>

    table布局,缺点是无法设置间距,但可以通过其他结构进行改造,给它们设置内填充来解决间距问题。

    七、

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>三栏布局的实现方案</title>
            <style type="text/css">
                *{
                    padding: 0;
                    margin: 0;
                }
                div{
                    height: 400px;
                }
                .wrap{
                    position: relative;
                }
                .main{
                    background-color: yellow;
                    margin: 0 320px 0 220px;
                }
                .left{
                    position: absolute;
                    left: 0;
                    top: 0;
                    background-color: red;
                    width: 200px;
                }
                .right{
                    position: absolute;
                    right: 0;
                    top: 0;
                    background-color: green;
                    width: 300px;
                }
                
            </style>
        </head>
        <body>
            <div class="wrap">
                <div class="main"></div>
                <div class="left"></div>
                <div class="right"></div>
            </div>
        </body>
    </html>

    利用定位来布局,简单粗暴,但是很有效果。

    以上,就是我所总结的七种方案.......

  • 相关阅读:
    dedecms 权重排序问题
    HTML5学习笔记简明版(1):HTML5介绍与语法
    通过jquery 获取文本框的聚焦和失焦方法
    14种网页图片和文字特效的jQuery插件代码
    input文本框实现宽度自适应代码实例,input文本框
    html5,html5教程
    css的#和.的区别
    css style与class之间的区别,cssclass
    网页点击按钮弹出遮罩层,拖动和关闭效果
    基于CSS+dIV的网页层,点击后隐藏或显示
  • 原文地址:https://www.cnblogs.com/fbzs/p/6366990.html
Copyright © 2011-2022 走看看