天天看点

css经典布局之三栏布局(双飞翼,圣杯)!!!

双飞翼布局和圣杯布局两者实现效果相同,都是为了实现一个两侧宽度固定而中间自适应的三栏布局

如图:

css经典布局之三栏布局(双飞翼,圣杯)!!!

要实现一个三列布局的具体要求为:

  1. header和footer各自占领屏幕所有宽度,高度固定。
  2. 中间的container是一个三栏布局。
  3. 三栏布局两侧宽度固定不变,中间部分自动填充整个区域。
  4. 中间部分的高度是三栏中最高的区域的高度。

主要实现思路为:

  1. Lleft、center、right三种都设置左浮动
  2. 设置center宽度为100%
  3. 设置负边距,left设置负边距为100%,right设置负边距为自身宽度
  4. 设置content的margin值为左右两个侧栏留出空间,margin值大小为left和right宽度

具体代码如下:

<!DOCTYPE html>
<html>
 
<head>
  <meta charset="utf-8">
  <script src="http://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"></script>
</head>
<style>
  body {
    min-width: 550px;
    font-weight: bold;
    font-size: 20px;
  }
  #header,
  #footer {
    background: rgba(29, 27, 27, 0.726);
    text-align: center;
    height: 60px;
    line-height: 60px;
  }
  #container {
    overflow: hidden;
  }
  .column {
    text-align: center;
    height: 300px;
    line-height: 300px;
  }
  #left, #right, #center {
    float: left;
  }
  #center {
    width: 100%;
    background: rgb(206, 201, 201);
  }
  #left {
    width: 200px;
    margin-left: -100%;
    background: rgba(95, 179, 235, 0.972);
  }
  #right {
    width: 150px;
    margin-left: -150px;
    background: rgb(231, 105, 2);
  }
  .content {
    margin: 0 150px 0 200px;
  }
</style>
 
<body>
  <div id="header">#header</div>
 
  <div id="container">
    <div id="center" class="column">
      <div class="content">#center</div>
    </div>
    <div id="left" class="column">#left</div>
    <div id="right" class="column">#right</div>
  </div>
 
  <div id="footer">#footer</div>
</body>
 
</html>
           

还有经典方式就是使用flex布局!!(阮一峰教程!!)

  1. 需在外部用一个div(class=‘contan’)放置所有内容,display设为flex,并且可换行flex-wrap:wrap;
  2. 头部、尾部宽度为100%,将中间部分(bd)挤到中间;
  3. 中间(bd)宽度也为100%,display设为flex,使其中内容为三栏布局(left、right宽度固定,中间middle自适应(flex:1));

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    .contain {
            display: flex;
            flex-wrap: wrap;
            height: 300px;
        }
        .hd {
            background-color: #666;
            width: 100%;
            height: 15%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .footer {
            background-color: #666;
            width: 100%;
            height: 10%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .bd {
            display: flex;
            width: 100%;
            height: 75%;
        }
        .mi {
            background-color: red;
            flex: 1;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .le {
            background-color: green;
            width: 200px;
            display: flex;
            justify-content: flex-start;
            align-items: center;
        }
        .ri {
            background-color: yellow;
            width: 100px;
            display: flex;
            justify-content: flex-end;
            align-items: center;
        }
</style>
<body>
    <div class="contain">
        <div class="hd">header</div>
        <div class="bd">
            <div class="le">left</div>
            <!--需按顺序排列,middle不在最前面-->
            <div class="mi">middle</div>
            <div class="ri">right</div>
        </div>
        <div class="footer">footer</div>
    </div>
</body>
</html>