美文网首页
圣杯布局/双飞翼布局学习

圣杯布局/双飞翼布局学习

作者: 嗨姑娘_大个子 | 来源:发表于2018-12-30 18:47 被阅读0次

    页面布局需求:

    1. 三列布局,左右两端固定,中间部分自适应。
    2. 中间栏DOM元素排在首位,在浏览器优先渲染。
    布局要求.png
    圣杯布局
    1. 中间元素占满宽度100%
    2. 三元素分别float:left,左右元素分别负的maigin-left,使得三元素中左右一行排列展示
    3. 三元素进行相对定位:position:relative,左元素:left,右元素:right,显示中间元素的内容区
    4. 最外层容器去掉多余的padding:padding:0 right(width) 0 left(width)
    <div class="container">
        <div class="main">main</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    
    .main,
    .left,
    .right {
        min-height: 300px;
        float: left;  //三元素一行排列
        position: relative; //相对定位
    }
    .container {
        padding: 0 300px 0 200px;
    }
    .main {
        width: 100%;
        background-color: bisque;
    }
    .left {
        width: 200px;
        background-color: aqua;
        margin-left: -100%;
        left: -200px;  //相对定位:解决中间元素内容被遮挡问题
    }
    .right {
        width: 300px;
        background-color: darkorange;
        margin-left: -300px;
        right: -300px;
    }
    
    双飞翼布局

    双飞翼布局区别于圣杯布局:

    1. 内部块多了一个元素
    2. 在解决内部元素文本被遮挡问题:没有采用相对定位,而是采用margin:0 right(width) 0 left(width)去解决,更简洁易懂。
    <div class="container">
        <div class="main">
            <div class="content">content</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    .main,
    .left,
    .right {
        min-height: 300px;
        float: left;
    } 
    .main {
        width: 100%;
        background-color: bisque;
        padding: 0 300px 0 200px;  // 第一种:外层元素增加内padding显出内部文本
    }
    .content {  
        margin: 0 300px 0 200px;  //第二种:内部元素增加外margin以此来显示文本
    } 
    .left {
        width: 200px;
        background-color: aqua;
        margin-left: -100%;
    }
    .right {
        width: 300px;
        background-color: darkorange;
        margin-left: -300px;
    }
    
    flex弹性布局
    <div class="container">
        <div class="main">main</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    
    .container {
        display: flex;
        flex-direction: row;
    }
    .main,
    .left,
    .right {
        min-height: 300px;
    }
    .main {
        background-color: bisque;
        /* 第一种:flex-grow 放大中间元素的比例,使其占满剩余全部空间,默认为0,对剩余空间不做处理  */
        flex-grow: 1;  
        flex: 1;  //第二种方法:flex:1;  使元素独占剩余的全部
    }
    .left {
        width: 200px;
        background-color: aqua;
        /* order 属性定义元素的排列顺序,越小越靠前,默认值为0 */
        order: -1;
    }
    .right {
        width: 300px;
        background-color: darkorange;
    }
    
    绝对定位布局
    1. 绝对定位:会使得元素脱离文档流,不占据空间,所以绝对定位的元素会覆盖页面上的其他元素,可以通过z-index去控制文档的堆叠层次。
    <div class="container">
        <div class="main">main</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    
    * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    .main,
    .left,
    .right {
        min-height: 300px;
        top: 0;  // 还需要设置 `top:0` !
    }
    .container {
        position: relative;  // 绝对定位必须设置父级别元素`position:relative`参照物
    }
    .main {
        margin: 0 300px 0 200px;
        background-color: bisque;
    }
    .left {
        width: 200px;
        background-color: aqua;
        //左右元素分别进行left:0,right:0的决定定位,脱离文档流,占据以一排元素的左右两端。
        position: absolute;  
        left: 0;
    }
    .right {
        width: 300px;
        background-color: darkorange;
        position: absolute;
        right: 0;
    }
    

    相关文章

      网友评论

          本文标题:圣杯布局/双飞翼布局学习

          本文链接:https://www.haomeiwen.com/subject/mczvlqtx.html