两栏三栏布局

202 阅读1分钟

两栏布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .left {
        width: 200px;
        background-color: aquamarine;
    }
    .right {
        background-color: aliceblue;
    }
</style>
<body>
    <div class="outer">
        <div class="left">left</div>
        <div class="right">right</div>
    </div><style>
 /*基本思路*/ 
.left{
    float: left;
}
.right{
    margin-left: 200px;
}
/*BFC*/
.left{
    float: left;
}
.right{
    overflow: hidden;
}
/*flex*/
.outer{
    display: flex;
}
.left{
​
}
.right{
    flex: 1;
}
/*绝对定位*/
.outer{
    position: relative;
}
.left{
​
}
.right{
    position: absolute;
    left: 200px;
}
/* Grid */
.outer{
   displaygrid;
    grid-template-column: 200px 1fr
}
.left{
​
}
.right{
​
}
</style>
</body>
</html>

三栏布局

思路:

圣杯布局:

  1. 优化加载center内容 同时设置成width:100%
  2. .left .right 的 margin设置成负值 移动到上边
  3. 通过相对定位将 .left .right 移动合适的位置

双飞翼布局:

  1. 优化加载center内容 同时设置成width:100%
  2. .left .right 的 margin设置成负值 移动到上边
  3. 设置center的 margin-left -right的位置移动相应的内容
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    div{
        min-height: 100px;
    }
    .left {
        width: 100px;
        background-color: aquamarine;
    }
    .center{
        background-color: bisque;
    }
    .right {
        width: 200px;
        background-color: aliceblue;
    }
</style>
<body>
    <div class="outer">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
    
​
    <div class="outer">
        <!-- 圣杯布局 实现优先加载cenetr-->
        <div class="center">center</div>    
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
​
    <div class="outer">
        <!-- 双飞翼布局 实现优先加载cenetr-->
        <div class="center">center</div>
    </div>
    <div class="left">left</div>
    <div class="right">right</div>
<style>
 /* 基本思路 */
.left {
    float: left;    
}
.center{
    margin-left: 200px;
    margin-right: 200px;
}
.right {
    float: right;
}
​
/*flex*/
.outer{
    display: flex;
}
.left {
    
}
.center{
    flex: 1;
}
.right {
​
}
/* 绝对定位 *//* Grid */
.left {
    
}
.center{
     display: grid;
     grid-template-columns: 100px 1fr 100px;
}
.right {
    
}
    
/* 圣杯布局 */
.outer{
    padding-left: 100px;
    padding-right: 200px;
}
.left {
    float: left;
    margin-left: -100%; /*将元素移动到上边*/   
    position: relative;
    left: -100px;
}
.center{
    float: left;
    width: 100%;
}
.right {
    float: left;
    margin-left: -200px;    
    position: relative;
    left: 200px;
}
/* 双飞翼布局 */
.outer{
    float: left;
    width: 100%;
}
.left {
    float: left;
    margin-left: -100%;    
}
.center{
     margin-left: 100px;
    margin-right: 200px; 
}
.right {
    float: left;
    margin-left: -200px;    
}
</style>
</body>
</html>