淺談三欄佈局-八種實現(less語法)

前端中佈局方式多樣,今天我們淺談一下三欄佈局的幾種實現方式,希望對你有所幫助。

目錄

什麼是三欄佈局?

1.浮動佈局實現:

2.flex佈局實現

3.絕對定位實現

4.BFC實現

5.table實現:

6.網格(grid)佈局

7.聖盃佈局

8.雙飛翼佈局

總結:


什麼是三欄佈局?

三欄佈局:整體高度已知,左右兩邊寬度固定,中間內容寬度自適應

三欄佈局常見的實現方式:

  • 浮動佈局
  • flex佈局
  • 絕對定位
  • BFC
  • table
  • 網格(grid)佈局
  • 聖盃佈局
  • 雙飛翼佈局

廢話不多說,直接上圖,關於三欄佈局情況如下圖所示

 

1.浮動佈局實現:

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
    <!--方式1-浮動佈局-->
    <div class="float">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="main">center</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

*{
  margin: 0;
  padding: 0;
}

/*1.浮動佈局*/
.float{
  text-align: center;
  line-height: 100px;
  .left{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: left;
  }
  .right{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: right;
  }
  .main{
    /*不給寬度-自適應*/
    height: 100px;
    background: #ccc;
  }
}

2.flex佈局實現

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
     <!--方式2.flex佈局-->
    <div class="flexBox">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="main">center</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*2.flex佈局*/
.flexBox{
   display: flex;
   text-align: center;
   line-height: 100px;
   .left{
     width: 100px;
     height: 100px;
     background-color: #ddd;
   }
   .right{
     width: 100px;
     height: 100px;
     background-color: #ddd;

   }
   .main{
     height: 100px;
     background-color: #ccc;
     flex:1;
   }
 }

3.絕對定位實現

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
     <!--方式3.絕對定位-->
     <div class="position">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="main">center</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*絕對定位*/
.position{
  position: relative;
  text-align: center;
  line-height: 100px;
  .left{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    position: absolute;
    left: 0;
  }
  .right{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    position: absolute;
    right:0;
  }
  .main{
    height: 100px;
    background: #ccc;
  }
}

4.BFC實現

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
    <!--方式4-BFC-->
    <div class="BFC">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="main">center</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*4.BFC方式*/
.BFC{
  text-align: center;
  line-height: 100px;
  .left{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: left;
  }
  .right{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: right;
  }
  .main{
    height: 100px;
    background-color: #ccc;
    //觸發BFC
    overflow: hidden;
  }
}

5.table實現:

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
    <!--方式5.table-->
    <div class="tableBox">
         <div class="left">left</div>
        <div class="right">right</div>
        <div class="main">center</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*5.table*/
.tableBox{
  // 要設置父元素寬度
  width: 100%;
  display: table; // 每一個子元素都要設置display:table-cell
  text-align: center;
  line-height: 100px;
  .left{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    display:table-cell;
  }
  .right{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    display:table-cell;
  }
  .main{
    height: 100px;
    background-color: #ccc;
    display:table-cell;
  }
}

6.網格(grid)佈局

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
   <!--方式6.網格grid佈局-->
    <div class="gridBox">
        <div class="left">left</div>
        <div class="main">center</div>
        <div class="right">right</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*6.網格佈局*/
.gridBox{
  // 只需要父元素設置即可
  display: grid;
  grid-template-rows: 100px;/*設置行高*/
  grid-template-columns: 100px auto 100px;/*設置列數屬性*/
  text-align: center;
  line-height: 100px;
  .left{
    background-color: #ddd;
  }
  .right{
    background-color: #ddd;
  }
  .main{
    background-color: #ccc;
  }
}

7.聖盃佈局

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
   <!--方式7.聖盃佈局-->
    <div class="hollyCupBox">
        <div class="left">left</div>
        <div class="main">center</div>
        <div class="right">right</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*7.聖盃佈局*/

.hollyCupBox{
  // 父元素也需要兩邊空出100px
  margin: 0 100px;
  text-align: center;
  line-height: 100px;
  .left{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: left;
    position: relative;
    left:-100px;
    margin-right:-100%;
  }
  .right{
    width: 100px;
    height: 100px;
    background-color: #ddd;
    float: left;
    position: relative;
    right: -100px;
    margin-left: -100px;
  }
  .main{
    width: 100%;
    height: 100px;
    background-color: #ccc;
    float: left;
  }
}

8.雙飛翼佈局

HTML代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>三欄佈局-8種實現</title>
    <link rel="stylesheet/less" href="less/index.less" type="text/css">
</head>
<body>
   <!--8.雙飛翼佈局-->
    <div class="doubleFly">
        <div class="container">
            <div class="main">center</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
<script src="js/less.js"></script>
</body>
</html>

CSS代碼(less語法):

/*8.雙飛翼佈局*/

.doubleFly {
  line-height: 100px;
  text-align: center;
  .container {
    width: 100%; // 全都是浮動
    float: left;
    .main {
      // 空出兩邊間隔
      margin: 0 100px;
      height: 100px;
      background-color: #ccc;
    }
  }
  .left {
    float: left;
    // 關鍵地方,這個100是整個父元素的寬度
    margin-left: -100%;
    height: 100px;
    background-color: #ddd;
    width: 100px;
  }
  .right {
    float: right;
    // 關鍵地方
    margin-left: -100px;
    height: 100px;
    background-color: #ddd;
    width: 100px;
  }
}

總結:

1.聖盃佈局、雙飛翼佈局、flex佈局的高度取決於內容區(center部分),頁面的高度取決於內容區
2.絕對定位的內容區高度取決於兩邊欄的最高點。
3.table-cell佈局能讓三欄的高度一致,但不能優先渲染 center。
4.網格佈局極其強大,但兼容性差
5.浮動:脫離文檔流,需要清除浮動;但兼容性比較好
6.絕對定位:快;但是需要處理下面元素的位置
7.Flex:目前比較完美的方案,特別是移動端
8.思考這些佈局的優缺點?
9.嘗試使用flex+rem佈局

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章