美文网首页
全屏布局

全屏布局

作者: 一名有马甲线的程序媛 | 来源:发表于2018-04-24 14:01 被阅读9次

    float

    • float+calc
      通过calc()函数计算出.middle元素的高度,并设置子元素高度为100%
    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .middle{
        overflow: hidden;
        height: calc(100% - 100px);
    }
    .left{
        float: left;
        width: 100px;
        margin-right: 20px;
        height: 100%;
    }
    .right{
        overflow: auto;
        height: 100%;
    }
    .right-in{
        height: 1000px;
    }
    .top,.bottom{height:50px;}
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div>  
        <div class="middle" style="background-color: pink;">
            <div class="left" style="background-color: orange;">
                <p>left</p>
            </div>
            <div class="right" style="background-color: lightsalmon;">
                <div class="right-in">
                    <p>right</p>
                </div>
            </div>
        </div>          
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    
    • float + absolute + (fix)
      通过增加结构来提高兼容性,.middle元素设置100%的高度,.top和.bottom设置absolute覆盖在.middle上
    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .top,.bottom{
        position: absolute;
        height:50px;
        left: 0;
        right: 0;
    }
    .top{top: 0;}
    .bottom{bottom: 0;}
    .middleWrap{
        height: 100%;
        overflow: hidden;
    }
    .middle{
        overflow: hidden;
        height: 100%;
        margin: 50px 0;
    }
    .left{
        float: left;
        width: 100px;
        margin-right: 20px;
        height: 100%;
    }
    .right{
        overflow: auto;
        height: 100%;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div>  
        <div class="middleWrap">
            <div class="middle" style="background-color: pink;">
                <div class="left" style="background-color: orange;">
                    <p>left</p>
                </div>
                <div class="right" style="background-color: lightsalmon;">
                    <div class="right-in">
                        <p>right</p>
                    </div>
                </div>
            </div>        
        </div> 
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    inline-block

    • inline-block + calc
    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .middle{
        height: calc(100% - 100px);
        font-size: 0;
    }
    .left,.right{
        display: inline-block;
        vertical-align: top;
        font-size: 16px;
    }
    .left{
        width: 100px;
        margin-right: 20px;
        height: 100%;
    }
    .right{
        width: calc(100% - 120px);
        height: 100%;
        overflow: auto;
    }
    .right-in{
        height: 1000px;
    }
    .top,.bottom{height: 50px;}
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div>  
        <div class="middle" style="background-color: pink;">
            <div class="left" style="background-color: orange;">
                <p>left</p>
            </div>
            <div class="right" style="background-color: lightsalmon;">
                <div class="right-in">
                    <p>right</p>
                </div>
            </div>
        </div>        
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    
    • inline-block + absolute + (fix)
    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .top,.bottom{
        position: absolute;
        left: 0;
        right: 0;
        height: 50px;
    }
    .top{top: 0;}
    .bottom{bottom: 0;}
    .middleWrap{
        height: 100%;
        font-size: 0;
        overflow: hidden;
    }
    .middle{
        position: relative;
        height: 100%;
        margin: 50px 0;
        overflow: hidden;
    }
    .left,.rightWrap{
        display: inline-block;
        vertical-align: top;
        font-size: 16px;
    }
    .left{
        position: absolute;
        width: 100px;
        margin-right: 20px;
        height: 100%;
    }
    .rightWrap{
        width: 100%;
        height: 100%;
    }
    .right{
        height: 100%;
        margin-left: 120px;
        overflow: auto;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div>  
        <div class="middleWrap">
            <div class="middle" style="background-color: pink;">
                <div class="left" style="background-color: orange;">
                    <p>left</p>
                </div>
                <div class="rightWrap">
                    <div class="right" style="background-color: lightsalmon;">
                        <div class="right-in">
                            <p>right</p>
                        </div>
                    </div>                
                </div>
            </div>         
        </div>
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    table

    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .top,.bottom{
        position: absolute;
        width: 100%;
        height: 50px;
    }
    .bottom{bottom: 0;}
    .middleWrap{
        height: 100%;
        overflow: hidden;
    }
    .middle{
        width: 100%;
        height: 100%;
        display: table;    
        margin: 50px 0;
        table-layout: fixed;
    }
    .left{
        display: table-cell;
        width: 120px;
        border-right: 20px solid lightgray;
    }
    .rightWrap{
        display: table-cell;
        height: 100%;
    }
    .right{
        height: 100%;
        overflow: auto;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div> 
        <div class="middleWrap">
            <div class="middle" style="background-color: pink;">
                <div class="left" style="background-color: orange;">
                    <p>left</p>
                </div>     
                <div class="rightWrap">
                    <div class="right" style="background-color: lightsalmon;">
                        <div class="right-in">
                            <p>right</p>
                        </div>            
                    </div>                    
                </div>   
            </div>         
        </div>    
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    absolute

    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .top,.middle,.bottom{
        position: absolute;
        left: 0;
        right: 0;
    }
    .top{
        top: 0;
        height: 50px;
    }
    .bottom{
        bottom: 0;
        height: 50px;
    }
    .middle{
        top: 50px;
        bottom: 50px;
    }
    .left,.right{
        position: absolute;
        top: 0;
        bottom: 0;
    }
    .left{
        width:100px;
    }
    .right{
        left: 120px;
        right: 0;
        overflow: auto;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div> 
        <div class="middle" style="background-color: pink;">
            <div class="left" style="background-color: orange;">
                <p>left</p>
            </div>     
            <div class="right" style="background-color: lightsalmon;">
                <div class="right-in">
                    <p>right</p>
                </div>            
            </div>                    
        </div>              
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    flex

    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .parent{
        display: flex;
        flex-direction: column;
    }
    .top,.bottom{
        height: 50px;
    }
    .middle{
        display: flex;
        flex: 1;
    }
    .left{
        width: 100px;
        margin-right: 20px;
    }
    .right{
        flex: 1;
        overflow: auto;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div> 
        <div class="middle" style="background-color: pink;">
            <div class="left" style="background-color: orange;">
                <p>left</p>
            </div>     
            <div class="right" style="background-color: lightsalmon;">
                <div class="right-in">
                    <p>right</p>
                </div>            
            </div>                    
        </div>              
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    grid

    <style>
    body,p{margin: 0;}
    body,html,.parent{height: 100%;}
    .parent{
        display: grid;
        grid-template-rows:50px auto 50px;
    }
    .middle{
        overflow:hidden;
        display:grid;
        grid-template-columns: 100px 1fr;
        grid-gap:20px;
    }
    .right{
        overflow:auto;
    }
    .right-in{
        height: 1000px;
    }
    </style>
    
    <div class="parent" id="parent" style="background-color: lightgrey;">
        <div class="top" style="background-color: lightblue;">
            <p>top</p>
        </div> 
        <div class="middle" style="background-color: pink;">
            <div class="left" style="background-color: orange;">
                <p>left</p>
            </div>     
            <div class="right" style="background-color: lightsalmon;">
                <div class="right-in">
                    <p>right</p>
                </div>            
            </div>                    
        </div>              
        <div class="bottom" style="background-color: lightgreen;">
            <p>bottom</p>
        </div>        
    </div>
    

    点击查看原文

    相关文章

      网友评论

          本文标题:全屏布局

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