• 两列布局、三列适应布局、两列等高适应布局。


    一. 两列布局:左侧定宽、右侧自适应。

    四种方法 :flex 、position、float和负外边距、外边距

    1. 使用flex.

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            *{
                margin:0;
                padding:0;
            }
            .main{
                display:flex;
            }
            .sitebar{
                flex:0 0 200px;
                order:-1;
    //order属性用于更改在主轴方向上排列顺序,order数值越小,排列越靠前,默认为0,可以为负数
                background-color: green;
            }
            .content{
                flex:1;
                background-color: red;
            }
            
        </style>
    </head>
    <body>
        <div class="main">
            <div class="content">
                右侧自适应区块
            </div>
            <div class="sitebar">
                左侧定宽200px区块
            </div>
        </div>
    </body>
    </html>

    2. 使用position, 考虑了页面优化,右侧区域先加载。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            *{
                margin:0;
                padding:0;
            }
            .sitebar{
                200px;
                background-color: green;
            }
            .content{
                position: absolute;
                left: 200px;
                right:0;
                top:0;
                background-color: red;
            }        
        </style>
    </head>
    <body>
        <div class="content">
            右侧自适应区块
        </div>
        <div class="sitebar">
            左侧定宽200px区块
        </div>
    </body>
    </html>

     3. 利用float和负外边距

    这里的100%是相对于父元素, margin-left的意思是子元素的左边框距离父元素右边框的距离,我这里没考虑padding,border等因素哈

    当设置left元素的margin-left:-100%;时,left元素的左边框会与父元素的左边框重合。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding:0;
            }
            .main {
                 100%;
                float:left;
            }
            .main .content {
                margin-left: 200px;
                background-color: red;
            }
            .sitebar {
                 200px;
                float: left;
                background-color: green;
                margin-left: -100%;
            }
        </style>
    </head>
    <body>
        <div class="main">
            <div class="content">
                右侧自适应区块
            </div>
        </div>
        <div class="sitebar">
            左侧定宽200px
        </div>
    </body>
    </html>

    二、三列布局:左右定宽,中间自适应。

    圣杯布局其实和双飞翼布局是一回事。它们实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。

    三种方法:flex、绝对定位、使用负外边距。

    1. flex

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .body{
                display:flex;
            }
            .content{
                flex:1;
                background-color: green;
            }
            .nav, .ads{
                /*//设置两个侧边栏宽度*/
                flex:0 0 200px;
                background-color: blue;
            }
            .nav {
            /*    把导航放到最左边*/
                order:-1;
                background-color: grey;
            }        
        </style>
    </head>
    <body>
        <div class="body">
            <main class="content">center</main>
            <nav class="nav">left</nav>
            <aside class="ads">right</aside>    
        </div>
            
    </body>
    </html>

    2. 绝对定位

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            body {
                margin: 0px;
            }
            .left {
                background-color: red;
                100px;
                position: absolute;
                top: 0px;
                left:0px;
            }
            .center {
                background-color: grey;
                margin-left: 100px;
                margin-right: 100px;
            }
            .right {
                background-color: green;
                100px;
                position: absolute;
                top:0px;
                right:0px;
            }    
        </style>
    </head>
    <body>
        <div class="center">中间</div>
        <div class="left">左列</div>
        <div class="right">右列</div>
    </body>
    </html>

    三、两列等高布局。

    利用padding-bottom的正值与margin-bottom的负值相互抵消即可,同时最外层设置overflow:hidden;即可

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .main {
                margin: 0 auto;
                overflow: hidden;
                 600px;
            }
            .left {
                background-color: red;
                300px;
                float:left;
                padding-bottom: 2000px;
                margin-bottom: -2000px;
            }
            .right {
                background-color: green;
                300px;
                float:left;
                padding-bottom: 2000px;
                margin-bottom: -2000px;
            }    
        </style>
    </head>
    <body>
        <div class="main">
            <div class="left">
                <p style="height:200px">left</p>
            </div>
            <div class="right">
                <p style="height:300px">right</p>
            </div>
        </div>
    </body>
    </html>
  • 相关阅读:
    bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊
    【无图慎入】Link Cut Tree 总结
    cogs1889 [SDOI2008]Cave 洞穴勘测 link-cut tree
    Codeforces Round #452 (Div. 2)
    【正经向】NOIP2017烤后总结
    cogs1772 [国家集训队2010]小Z的袜子
    noip2017普及题解
    noip2017 TG 游记
    noip2017 PJ AK记
    jzoj5341 捕老鼠
  • 原文地址:https://www.cnblogs.com/sarah-wen/p/10770419.html
Copyright © 2020-2023  润新知