1. 程式人生 > >前端經典佈局(兩邊固定中間自適應)

前端經典佈局(兩邊固定中間自適應)

一、介紹

  下邊將介紹前端很流行的佈局方式,要求兩邊固定,中間自適應。比較流行的佈局方式有聖盃佈局,雙翼佈局,flex佈局、絕對定位佈局。

二、聖盃佈局

  聖盃佈局,顧名思義,他具有以下特點:

  1.三列布局,中間自適應,兩邊定寬;

  2.中間欄要求在瀏覽器中優先展示;

  接下來我們看實現方式:

  div我們這樣寫:

<div class="container"> 
          <div class="main">main</div> 
          <div class="left">left</
div>   <div class="right">right</div> </div>

  下邊直接看程式碼實現:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        <style type="text/css">
            .container {
                padding
: 0 300px 0 200px; } .left, .main, .right { position: relative; min-height: 130px; float: left; } .left { left: -200px; margin-left: -100%; background: green; width
: 200px; } .right { right: -300px; margin-left: -300px; background-color: red; width: 300px; } .main { background-color: blue; width: 100%; } </style> </head> <body> <div class="container">   <div class="main">main</div>   <div class="left">left</div>   <div class="right">right</div> </div> </body> </html>

出來的樣子就是這樣:

  程式碼中main的寬度設為100%,left跟right剛好固定到了左右兩邊。其中使用了一個margin-left為負的值,負的margin-left會讓元素沿文件流向左移動,如果負的數值比較大就會一直移動到上一行。設定left部分的margin-left為-100%,就會使left向左移動一整個行的寬度,由於left左邊是父元素的邊框,所以left繼續跳到上一行左移,一直移動到上一行的開頭,並覆蓋了main部分(仔細觀察下圖,你會發現main裡面的字“main”不見了,因為被left遮住了),left上移過後,right就會處於上一行的開頭位置,這時再設定right部分margin-left為負的寬度,right就會左移到上一行的末尾。 接下來只要把left和right分別移動到這兩個留白就可以了。可以使用相對定位移動 left和right部分。

三、雙翼佈局

  聖盃佈局和雙飛翼佈局解決問題的方案在前一半是相同的,也就是三欄全部float浮動,但左右兩欄加上負margin讓其跟中間欄div並排,以形成三欄佈局。不同在於解決 “中間欄div內容不被遮擋”問題的思路不一樣。 程式碼實現:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>index</title>
    <style type="text/css">
    .left, .main, .right {
        float: left;
        min-height: 130px;
        text-align: center;
    }
    .left {
        margin-left: -100%;
        background: green;
        width: 200px;
    }

    .right {
        margin-left: -300px;
        background-color: red;
        width: 300px;
    }
    .main {
        background-color: blue;
        width: 100%;
    }
    .content{
        margin: 0 300px 0 200px;
    }
    </style>
</head>
<body>
<div class="container"> 
  <div class="main">
      <div class="content">main</div> 
    </div>
  <div class="left">left</div> 
  <div class="right">right</div> 
</div>
</body>
</html>

  雙飛翼佈局比聖盃佈局多使用了1個div,少用大致4個css屬性(聖盃佈局container的 padding-left和padding-right這2個屬性,加上左右兩個div用相對佈局position: relative及對應的right和left共4個屬性,;而雙飛翼佈局子div裡用margin-left和margin-right共2個屬性,比聖盃佈局思路更直接和簡潔一點。簡單說起來就是:雙飛翼佈局比聖盃佈局多建立了一個div,但不用相對佈局了。

四、flex佈局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>實現三欄水平佈局之Flex佈局</title>
    <style type="text/css">
    .container{
        display: flex;
        min-height: 130px;
    }
    .main{
        flex-grow: 1;
        background-color: blue;
    }
    .left{
        order: -1;
        flex-basis: 200px;
        background-color: green;
    }
    .right{
        flex-basis: 300px;
        background-color: red;
    }
    </style>
</head>
<body>
<div class="container"> 
  <div class="main">main</div> 
  <div class="left">left</div> 
  <div class="right">right</div> 
</div>
</body>
</html>

五、絕對定位佈局

  絕對定位佈局就是相當於把左右兩個div絕對定位到左右兩邊的padding就可以了,這裡就不寫程式碼了。

  本文參考CSDN 作者 萌主_iii 。