来看看最全的“css布局”喽

本文详细介绍了CSS中常见的布局方式,包括等高布局(table-cell、padding/margin相抵)、三栏布局(BFC、flex、定位)以及双飞翼布局和圣杯布局的实现,通过代码实例展示了各种布局的用法和特点。同时,强调了理解BFC的重要性。

嗨,大家好,我又来了,今天主要是分享下我们在css中常用的布局方式。可能在面试过程中也会出现哦,注意听哦
主要是下面几种

  • 等高布局
  • 三栏布局
  • 两栏布局
  • 双飞翼布局
  • 圣杯布局

1. 等高布局

这里来讲解下等高布局的实现方式,如果有我漏写的希望大家可以在留言中告诉我,相互学习。

1.1 table-cell 实现方式

1.1.1 上“效果”

在这里插入图片描述

1.1.2 上“代码”
<!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>等高布局实现 - table-cell</title>
    <style>
      .left,
      .middle,
      .right {
        width: 200px;
        display: table-cell;
        /* display: table-cell 默认就是等高布局 */
      }

      .left {
        height: 300px;
      }

      .left,
      .right {
        background: red;
      }

      .middle {
        background: blue;
      }

      .outer {
        display: table;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left"></div>
      <div class="middle"></div>
      <div class="right"></div>
    </div>
  </body>
</html>

使用display属性:table-cell 天生具备等高的效果。所以我们可以利用这种方式进行实现

1.2 使用padding以及margin相抵方式

1.1.1 上“效果”

在这里插入图片描述

1.1.2 上“代码”
<!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>等高布局 - padding,margin</title>
    <style>
      .outer {
        overflow: hidden;
      }

      .left,
      .right,
      .middle {
        float: left;
        padding-bottom: 9999px;
        margin-bottom: -9999px;
      }

      .left,
      .right {
        width: 25%;
        background: red;
      }

      .middle {
        width: 50%;
        background: yellow;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left">
        <div>11</div>
        <div>22</div>
      </div>
      <div class="middle">1</div>
      <div class="right">2</div>
    </div>
  </body>
</html>

这里我们可以利用padding-bottom, margin-bottom 相抵的方式实现等高布局,可以理解为这是一种假等高布局

2. 三栏布局

2.1 利用BFC不跟浮动元素重叠方式

2.1.1 上“效果”

在这里插入图片描述

2.1.2 上“代码”
<!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>通过BFC来实现</title>
    <style>
      * {
        padding: 0;
        margin: 0;
      }

      html, body {
        height: 100%;
      }

      .outer {
        height: 100%;
      }

      .left {
        width: 200px;
        height: 100%;
        float: left;
        background: red;
      }

      .right {
        width: 200px;
        height: 100%;
        float: left;
        background: green;
      }

      .middle {
        height: 100%;
        background: blue;
        overflow: hidden;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left">left</div>
      <div class="right">right</div>
      <div class="middle">middle</div>
    </div>
  </body>
</html>

2.2 flex实现三栏布局

2.2.1 上“效果”

在这里插入图片描述

2.2.2 上“代码”
<!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>flex实现三栏布局</title>
    <style>
      * {
        padding: 0;
        margin: 0;
      }

      .outer {
        height: 500px;
        display: flex;
        justify-content: space-between;
      }

      .left,
      .right,
      .middle {
        height: 100%;
      }

      .left,
      .right {
        width: 200px;
        background: red;
      }

      .middle {
        flex: 1;
        background: blue;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left">left</div>
      <div class="middle">middle</div>
      <div class="right">right</div>
    </div>
  </body>
</html>

利用flex:1的特性来实现两边固定宽,中间子实现的三栏布局

2.3 利用定位方式

2.3.1 上“效果”

在这里插入图片描述

2.3.2 上“代码”
<!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>position实现三栏布局</title>
    <style>
      .left {
        background: red;
        left: 0;
        top: 0;
        position: absolute;
        height: 100%;
        width: 200px;
      }

      .right {
        background: red;
        right: 0;
        position: absolute;
        top: 0;
        height: 100%;
        width: 200px;
      }

      .middle {
        background: blue;
        left: 200px;
        top: 0;
        right: 200px;
        position: absolute;
        height: 100%;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left">left</div>
      <div class="middle">middle</div>
      <div class="right">right</div>
    </div>
  </body>
</html>

其实就是利用中间定位的方式,中间定位的原则是两边的宽度

2.4 双飞翼布局

开始划重点了!!! 注意了

2.4.1 上“效果”

在这里插入图片描述

2.4.2 上“代码”
<!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>双飞翼</title>
    <style>
      header {
        height: 200px;
        background: red;
      }

      .body {
        overflow: hidden;
      }

      .middle,
      .left,
      .right {
        float: left;
        height: 200px;
      }

      .middle {
        width: 100%;
      }

      .inner {
        background: blue;
        margin: 0 200px;
        height: 200px;
      }

      .left {
        background: orange;
        width: 180px;
        position: relative;
        margin-left: -100%;
      }

      .right {
        background: green;
        width: 180px;
        margin-left: -180px;
      }
    </style>
  </head>
  <body>
    <header>header</header>
    <div class="body">
      <div class="middle">
        <div class="inner">inner</div>
      </div>
      <div class="left">left</div>
      <div class="right">right</div>
    </div>
  </body>
</html>

细细的品味代码,其实就是利用margin 来实现元素移动

2.5 圣杯布局

开始划重点了!!! 注意了

2.5.1 上“效果”

在这里插入图片描述

2.5.2 上“代码”
<!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>圣杯布局</title>
    <style>
      header {
        background: red;
      }
      header,
      footer {
        height: 100px;
      }

      footer {
        background: green;
      }

      .body {
        padding: 0 200px;
        overflow: hidden;
      }

      .middle {
        background: orange;
        float: left;
        width: 100%;
        height: 200px;
      }

      .left {
        background: orchid;
        position: relative;
        left: -200px;
        margin-left: -100%;
      }

      .right {
        background: powderblue;
        position: relative;
        margin-left: -180px;
        left: 200px;
      }
      .left,
      .right {
        height: 200px;
        width: 180px;
        float: left;
      }
    </style>
  </head>
  <body>
    <header>header</header>
    <div class="body">
      <div class="middle">middle</div>
      <div class="left">left</div>
      <div class="right">right</div>
    </div>
    <footer>footer</footer>
  </body>
</html>

希望有缘人在看代码的过程中可以将双飞翼以及圣杯布局同时看,可能收获会比较大

3. 两栏布局

3.1 利用BFC实现

3.1.1 上“效果”

在这里插入图片描述

3.1.2 上“代码”
<!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>BFC实现两栏布局</title>
    <style>
      .left {
        float: left;
        width: 200px;
        height: 500px;
        background: blue;
      }

      .right {
        height: 500px;
        background: red;
        overflow: hidden;
      }
    </style>
  </head>
  <body>
    <div class="left"></div>
    <div class="right"></div>
  </body>
</html>

3.2 利用flex实现

3.2.1 上“效果”

在这里插入图片描述

3.2.2 上“代码”
<!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>flex两栏布局</title>
    <style>
      .outer {
        width: 500px;
        height: 600px;
        display: flex;
      }

      .inner1 {
        flex: 1;
        background: red;
      }

      .inner2 {
        flex: 1;
        background: blue;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="inner1"></div>
      <div class="inner2"></div>
    </div>
  </body>
</html>

3.3 使用定位方式

3.3.1 上“效果”

在这里插入图片描述

3.3.2 上“代码”
<!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>经典两栏布局 -- 定位</title>
    <style>
      .left {
        width: 200px;
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        background: red;
      }

      .right {
        position: absolute;
        left: 200px;
        top: 0;
        bottom: 0;
        right: 0;
        background: blue;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left"></div>
      <div class="right"></div>
    </div>
  </body>
</html>

3.4 使用margin-left方式

3.4.1 上“效果”

在这里插入图片描述

3.4.2 上“代码”
<!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>float + margin实现布局</title>
    <style>
      * {
        padding: 0;
        margin: 0;
      }

      html,
      body {
        height: 100%;
      }

      .outer {
        height: 100%;
      }

      .left {
        width: 200px;
        height: 100%;
        background: red;
        float: left;
      }

      .right {
        margin-left: 200px;
        height: 100%;
        background: blue;
      }
    </style>
  </head>
  <body>
    <div class="outer">
      <div class="left">1</div>
      <div class="right">2</div>
    </div>
  </body>
</html>

4. 结束

其实上述实例基本都是代码以及截图,因为css基本都是熟练知识都是死知识,并没有什么原理可以讲解。唯一可能需要理解的就是BFC,什么是BFC,BFC的存在可以解决哪些事情就完了,如果各位想看源码可以参考下面地址,我的GitHub有很多分栏,其实还有很多js重写原理,也希望大家多多star哦

GitHub源码地址

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值