1. 程式人生 > >HTML+CSS多種佈局技巧

HTML+CSS多種佈局技巧

一、水平居中

水平居中多用於標題以及內容區域的組織形式,以下是五種實現水平居中的方法:

方法一: 使用inline-block和text-align實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(1)</title>
    <style>
    .parent{
        text-align: center;
    }
    .child{
        display: inline-block
; height: 200px; background: green; color: white; }
</style> </head> <body> <div class="parent"> <div class="child"> 使用inline-block和text-align實現水平居中 </div> </div> </body
>
</html>

優點:相容性好
缺點:需要同時設定子元素和父元素

方法二: 使用margin:0 auto來實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(2)</title>
    <style>

    .child{
        margin: 0 auto;

        width: 300px;
        height: 200px;
        background
: green
; color: white; }
</style> </head> <body> <div class="child"> 使用margin:0 auto來實現水平居中 </div> </body> </html>

優點:相容性好
缺點:需要指定寬度

方法三: 使用table和margin:0 auto實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(3)</title>
    <style>
    .child{
        display: table;
        margin: 0 auto;

        height: 200px;
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>      
        <div class="child">
            使用table和margin:0 auto實現水平居中
        </div>      
    </body>
</html>

優點:只需對自身進行設定
缺點:IE6、7不相容需要調整

方法四: 使用絕對定位實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(4)</title>
    <style>
    .child{
        position: absolute; 
        left: 50%;

        transform: translate(-50%);/*也可使用margin-left設定盒子的一半,不過此時要設定盒子的寬度*/


        height: 200px;
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>      
        <div class="child">
             使用絕對定位實現水平居中
        </div>      
    </body>
</html>

缺點:相容性差,需IE9 及以上可用

* 方法五:* 使用flex 佈局實現
1、只設置父元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(5-1)</title>
    <style>
    .parent{
        display: flex;
        justify-content: center; /*設定水平方向位置,還有flex-end、flex-start等值*/

    }
    .child{
        height: 200px;
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="child">
                使用flex 佈局實現水平居中
            </div> 
        </div>              
    </body>
</html>

2、父元素和子元素都需要設定

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平居中(5-2)</title>
    <style>
    .parent{
        display: flex;
    }
    .child{
        margin: 0 auto;

        height: 200px;
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="child">
                使用flex 佈局實現水平居中
            </div> 
        </div>              
    </body>
</html>

缺點:相容性差、如果進行大面積的佈局可能會影響效率

二、垂直居中

方法一: 使用vertical-align: middle,由於使用它的時候對齊的基線是用行高的基線作為標記,故需要設定line-height和display:table-cell/inline-block

1、設定
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>垂直居中(1)</title>
    <style>
    .parent{
        display: table-cell;
        vertical-align: middle;
        height: 500px;
    }
    .child{

        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="child">
                使用vertical-align: middle實現垂直居中
            </div> 
        </div>              
    </body>
</html>

* 方法二:* 使用絕對定位

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>垂直居中(2)</title>
    <style>
    .child{
        position: absolute;

        top: 50%;   
        transform: translate(0,-50%);
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>
        <div class="child">
            使用vertical-align: middle實現垂直居中
        </div> 

    </body>
</html>

方法三: 使用flex實現,用它實現垂直居中的時候需要給父元素一個高度

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>垂直居中(3)</title>
    <style>
    html,body,.parent{
        height: 100%; //parent的100%高度是根據父元素body>html 的高度設定的,也可以直接設定具體的高度值,不用百分比
    }
    .parent{
         display: flex;
         align-items: center; /*定義body的元素垂直居中*/
    }

    .child{
        width: 300px;
         height: 300px;
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="child">
                使用flex實現垂直居中
            </div> 
        </div>  

    </body>
</html>

三、水平垂直全部居中

方法一:利用絕對定位實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平垂直居中(1)</title>
    <style>

    .child{
        position: absolute;
        top: 50%;
        left: 50%;      
        transform: translate(-50%,-50%);
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="child">
                使用flex實現水平垂直居中
        </div>      

    </body>
</html>

方法二: 使用flex實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>水平垂直居中(2)</title>
    <style>
    .parent{
        display: flex;
        justify-content: center;
        align-items: center;
        height: 800px;
    }
    .child{
        background: green;
        color: white;
    }   
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="child">
                使用flex實現水平垂直居中
            </div> 
        </div>  

    </body>
</html>

四、多列布局

情況一: 左列定寬,右列自適應

1、使用float+margin-left實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列定寬,右列自適應</title>
    <style>
        .left{
            float: left;
            width: 200px;
            height: 500px;
            background: red;
        }
        .right{
            margin-left: 210px;
            height: 500px;
            background: green;
        }
    </style>
</head>
    <body>  
            <div class="left">
                定寬
            </div>
            <div class="right">
                自適應
            </div>      
    </body>
</html>

2、使用float+overflow實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左定寬,右自適應(2)</title>
    <style>
    .left{
        width: 200px;
        height: 500px;
        float: left;
        background: red;
    }
    .right{
        overflow: hidden;
        height: 500px;
        background: green;
    }
    </style>
</head>
    <body>  

        <div class="left">
            定寬
        </div>
        <div class="right">
            自適應
        </div>

    </body>
</html>

3、使用flex實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左定寬,右自適應(3)</title>
    <style>
    .parent{
        display: flex;
    }
    .left{
        width: 200px;
        height: 500px;
        background: red;
    }
    .right{
        flex: 1;
        background: green;
    }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="right">
                自適應
            </div>
        </div>      
    </body>
</html>

4、使用table實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列自適應,右列定寬</title>
    <style>
        .parent{
            display: table;
            table-layout: fixed;
            width: 100%;
        }
        .left{
            display: table-cell;
            width: 200px;
            height: 500px;          
            background: red;
        }
        .right{
            display: table-cell;

            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="right">
                自適應
            </div>

        </div>

    </body>
</html>

情況二: 右列定寬,左列自適應
1、使用float+margin-right 實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列自適應,右列定寬</title>
    <style>

        .left{
            float: left;
            width: 100%;
            height: 500px;
            margin-right: -210px;
            background: red;
        }
        .right{
            float: right;
            width: 200px;
            height: 500px;
            background: green;
        }
    </style>
</head>
    <body>  

            <div class="left">
                自適應
            </div>
            <div class="right">
                定寬
            </div>

    </body>
</html>

2、使用flex實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列自適應,右列定寬(2)</title>
    <style>
        .parent{
            display: flex;
        }
        .left{
            flex: 1;
            /*margin-right: 20px;*/
            height: 500px;          
            background: red;
        }
        .right{
            width: 200px;
            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                自適應
            </div>
            <div class="right">
                定寬
            </div>

        </div>

    </body>
</html>

3、使用table實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列自適應,右列定寬</title>
    <style>
        .parent{
            display: table;
            table-layout: fixed;
            width: 100%;
        }
        .left{
            display: table-cell;
            height: 500px;          
            background: red;
        }
        .right{
            display: table-cell;
            width: 200px;
            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="right">
                自適應
            </div>

        </div>

    </body>
</html>

情況三: 兩列定寬,一列自適應

1、使用float+margin實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>左列自適應,右列定寬(1)</title>
    <style>

        .left{
            width: 200px;
            float: left;            
            background: red;
        }
        .center{
            width: 200px;
            float: left;    
            margin-left: 10px;      
            background: orangered;
        }
        .right{
            margin-left: 420px;
            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="center">
                定寬
            </div>
            <div class="right">
                自適應
            </div>

        </div>

    </body>
</html>

2、使用float+overflow實現

<html>
<head>
    <meta charset="UTF-8">
    <title>兩列定寬,一列自適應(2)</title>
    <style>

        .left{
            width: 200px;
            float: left;            
            background: red;
        }
        .center{
            width: 200px;
            float: left;    
            margin-left: 10px;      
            background: orangered;
        }
        .right{
            overflow: hidden;
            margin-left: 420px;
            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="center">
                定寬
            </div>
            <div class="right">
                自適應
            </div>

        </div>

    </body>
</html>

3、使用table實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>兩列定寬,一列自適應</title>
    <style>
        .parent{
            display: table;
            table-layout: fixed;
            width: 100%;
        }
        .left{
            display: table-cell;    
            width: 200px;   
            background: red;
        }
        .center{
            display: table-cell;
            width: 200px;
            margin-left: 10px;      
            background: teal;
        }
        .right{
            display: table-cell;
            margin-left: 420px;
            background: green;
        }
    </style>
</head>
    <body>  
        <div class="parent">
            <div class="left">
                定寬
            </div>
            <div class="center">
                定寬
            </div>
            <div class="right">
                自適應
            </div>

        </div>

    </body>
</html>

4、使用flex實現

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">