WEBSTORM前端 —— 第2章:CSS —— 第5节:标准流、浮动、Flex 布局

目录

一、标准流

二、浮动

1.浮动

2. 浮动 – 产品区域布局

3. 清除浮动

(1)场景

(2)解决方法

(3)处理方法

①方法一:额外标签法

② 方法二:单伪元素法

③方法三:双伪元素法(推荐)

④方法四:overflow

4.浮动 – 总结

三、Flex 布局

1.Flex – 认识

2.Flex – 组成

3.Flex 布局 

(1) 主轴对齐方式

 (2)侧轴对齐方式

(3)修改主轴方向

 (4)弹性伸缩比

 (5)弹性盒子换行

(6)行对齐方式

 四、综合案例 – 抖音解决方案

1.图片素材

2.效果图

3.源代码


一、标准流

标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。


二、浮动

1.浮动

(1)作用:让块元素水平排列。

(2)属性名:        float

(3)属性值  :      left:左对齐                  right:右对齐

(4)特点:

  • 浮动后的盒子对齐
  • 浮动后的盒子具备行内块特点
  • 浮动后的盒子脱标不占用标准流的位置
<!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>
    /* 特点:顶对齐;具备行内块显示模式特点;浮动的盒子会脱标 */
    .one {
      width: 100px;
      height: 100px;
      background-color: brown;
      float: left;
    }
    .two {
      width: 200px;
      height: 200px;
      background-color: orange;
      float: right;
    }
  </style>
</head>
<body>
  <div class="one">one</div>
  <div class="two">two</div>
</body>
</html>

效果图:


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>
    * {
      margin: 0;
      padding: 0;
    }
    li {
      list-style: none;
    }
    .product {
      margin: 50px auto;
      width: 1226px;
      height: 628px;
      background-color: pink;
    }
    .left {
      float: left;
      width: 234px;
      height: 628px;
      background-color: skyblue;
    }
    .right {
      float: right;
      width: 978px;
      height: 628px;
      background-color: brown;
    }
    .right li {
      float: left;
      margin-right: 14px;
      margin-bottom: 14px;
      width: 234px;
      height: 300px;
      background-color: orange;
    }
    /* 第四个li和第八个li 去掉右侧的margin */
    .right li:nth-child(4n) {
      margin-right: 0;
    }
    /* 细节:如果父级宽度不够,浮动的盒子会掉下来 */
  </style>
</head>
<body>
  <!-- 版心:左右,右面:8个产品 → 8个 li -->
  <div class="product">
    <div class="left"></div>
    <div class="right">
      <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
      </ul>
    </div>
  </div>
</body>
</html>

效果图:


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>浮动-清除浮动</title>
<style>
  .father {
    margin: 10px auto;
    width: 1200px;
    /* height: 300px; */
    background-color: pink;
  }
  .left {
    float: left;
    width: 200px;
    height: 300px;
    background-color: skyblue;
  }
  .right {
    float: right;
    width: 950px;
    height: 300px;
    background-color: orange;
  }
  .bottom {
    height: 100px;
    background-color: brown;
  }
</style>
</head>
<body>
<div class="father">
  <div class="left"></div>
  <div class="right"></div>
</div>
<div class="bottom"></div>
</body>
</html>

效果图:

(3)处理方法

①方法一:额外标签法

元素内容的最后添加一个级元素,设置 CSS 属性 clear: both

<!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>
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }
    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }
    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }
    .bottom {
      height: 100px;
      background-color: brown;
    }
    .clearfix {
      clear: both;
    }
  </style>
</head>
<body>
  <div class="father">
    <div class="left"></div>
    <div class="right"></div>
    <div class="clearfix"></div>
  </div>
  <div class="bottom"></div>
</body>
</html>

效果图:


② 方法二:单伪元素法
.clearfix::after {
content : "" ;
display : block;
clear : both;
}
<!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>
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }
    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }
    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }
    .bottom {
      height: 100px;
      background-color: brown;
    }
    /* 单伪元素法 */
  .clearfix::after {
    content: "";
    display: block;
    clear: both;
  }
  </style>
</head>
<body>
  <div class="father clearfix">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>
</body>
</html>

 效果图与①一样!


③方法三:双伪元素法(推荐)
.clearfix::before ,
.clearfix::after {
content : "" ;
display : table;
}
.clearfix::after {
clear : both;
}
<!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>
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;
    }
    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }
    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }
    .bottom {
      height: 100px;
      background-color: brown;
    }
    /* before 解决外边距塌陷问题 */
    /* 双伪元素法 */
    .clearfix::before,
    .clearfix::after {
      content: "";
      display: table;
    }
    /* after 清除浮动 */
    .clearfix::after {
      clear: both;
    }
  </style>
</head>
<body>
  <div class="father clearfix">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>
</body>
</html>

  效果图与①一样!


方法四:overflow

元素添加 CSS 属性 overflow: hidden

<!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>清除浮动-overflow</title>
  <style>
    .father {
      margin: 10px auto;
      width: 1200px;
      /* height: 300px; */
      background-color: pink;

      overflow: hidden;
    }
    .left {
      float: left;
      width: 200px;
      height: 300px;
      background-color: skyblue;
    }
    .right {
      float: right;
      width: 950px;
      height: 300px;
      background-color: orange;
    }
    .bottom {
      height: 100px;
      background-color: brown;
    }
  </style>
</head>
<body>
  <div class="father">
    <div class="left"></div>
    <div class="right"></div>
  </div>
  <div class="bottom"></div>
</body>
</html>

  效果图与①一样!


4.浮动 – 总结

(1)浮动属性 floatleft 表示浮动,right 表示浮动

(2)特点

  1. 浮动后的盒子对齐
  2. 浮动后的盒子具备行内块特点
  3. 父级宽度不够,浮动的子级换行
  4. 浮动后的盒子脱标

三、Flex 布局

1.Flex – 认识

Flex 布局也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布对齐能力。

Flex 模型不会产生浮动布局中脱标现象,布局网页更简单、更灵活

<!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>
    .box {
      display: flex;
      justify-content: space-between;

      /* height: 300px; */
      border: 1px solid #000;
    }
    .box div {
      /* float: left;
      margin: 50px; */
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>
</body>
</html>

效果图:


2.Flex – 组成

(1)设置方式:给元素设置 display: flex元素可以自动挤压或拉伸

(2)组成部分:

  1. 弹性容器
  2. 弹性盒子
  3. 主轴:默认在水平方向
  4. 侧轴 / 交叉轴:默认在垂直方向
<!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>
    /* 弹性容器 */
    .box {
      display: flex;

      height: 300px;
      border: 1px solid #000;
    }
    /* 弹性盒子:沿着主轴方向排列 */
    .box div {
      width: 200px;
      /* height: 100px; */
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div><div>2</div>
    <div>3</div><div>1</div>
    <div>2</div><div>3</div>
    <div>1</div><div>2</div>
    <div>3</div>
  </div>
</body>
</html>

 效果图:


3.Flex 布局 


(1) 主轴对齐方式

属性名:justify-content

<!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>
    .box {
      display: flex;
      /* justify-content: flex-start; */
      /* justify-content: flex-end; */
      /* 居中 */
      /* justify-content: center; */
      /* 父级剩余的尺寸分配成间距 */
      /* 弹性盒子之间的间距相等 */
      /* justify-content: space-between; */
      /* 间距出现在弹性盒子两侧 */
      /* 视觉效果:弹性盒子之间的间距是两端间距的2倍 */
      /* justify-content: space-around; */
      /* 各个间距都相等 */
      justify-content: space-evenly;
      height: 300px;
      border: 1px solid #000;
    }
    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>
</body>
</html>

效果图:


 (2)侧轴对齐方式

属性名

  • align-items:当前弹性容器内所有弹性盒子的侧轴对齐方式(给弹性容器设置)
  • align-self:单独控制某个弹性盒子的侧轴对齐方式(给弹性盒子设置)

<!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>
    .box {
      display: flex;
      /* 弹性盒子在侧轴方向没有尺寸才能拉伸 */
      /* align-items: stretch; */
      /* align-items: center; */
      /* align-items: flex-start; */
      align-items: flex-end;
      height: 300px;
      border: 1px solid #000;
    }
    /* 第二个div,侧轴居中对齐 */
    .box div:nth-child(2) {
      align-self: center;
    }
    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div>
    <div>2</div>
    <div>3</div>
  </div>
</body>
</html>

 效果图:


(3)修改主轴方向

主轴默认在水平方向,侧轴默认在垂直方向

属性名:flex-direction

 

左图为下面代码引用图片! 

<!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>
    .box {
      display: flex;
      /* 修改主轴方向 垂直方向;侧轴自动变换到水平方向 */
      flex-direction: column;
      /* 主轴在垂直,视觉效果:垂直居中 */
      justify-content: center;
      /* 侧轴在水平,视觉效果:水平居中 */
      align-items: center;
      width: 150px;
      height: 120px;
      background-color: pink;
    }
    img {
      width: 32px;
      height: 32px;
    }
  </style>
</head>
<body>
  <div class="box">
    <img src="./images/1.png" alt="">
    <span>媒体</span>
  </div>
</body>
</html>

效果图:


 (4)弹性伸缩比

  1. 作用:控制弹性盒子的主轴方向的尺寸
  2. 属性名:flex
  3. 属性值:整数数字,表示占用父级剩余尺寸的份数
<!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>
    /* 默认情况下,主轴方向尺寸是靠内容撑开;侧轴默认拉伸 */
    .box {
      display: flex;
      flex-direction: column;
      height: 300px;
      border: 1px solid #000;
    }
    .box div {
      /* height: 100px; */
      background-color: pink;
    }
    .box div:nth-child(1) {
      width: 200px;
    }
    .box div:nth-child(2) {
      flex: 1;
    }
    .box div:nth-child(3) {
      flex: 2;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div><div>2</div><div>3</div>
  </div>
</body>
</html>

效果图:


 (5)弹性盒子换行

  1. 弹性盒子可以自动挤压或拉伸,默认情况下,所有弹性盒子都在一行显示
  2. 属性名:flex-wrap
  3. 属性值:
    1. wrap:换行
    2. nowrap:不换行(默认)
<!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>
    .box {
      display: flex;
      flex-wrap: wrap;
      /* 不换行 */
      /* flex-wrap: nowrap; */
      justify-content: space-between;
      height: 300px;
      border: 1px solid #000;
    }
    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  </style>
</head>
<body>
  <div class="box">
    <div>1</div><div>2</div>
    <div>3</div><div>4</div>
    <div>5</div><div>6</div>
    <div>7</div><div>8</div>
    <div>9</div><div>10</div>
    <div>11</div><div>12</div>
  </div>
</body>
</html>

效果图:


(6)行对齐方式

  1. 属性名:align-content
  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>
    .box {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-between;
      /* 调整 行对齐方式:对单行弹性盒子不生效 */
      /* align-content: flex-start; */
      /* align-content: flex-end; */
      /* align-content: center; */
      /* align-content: space-between; */
      /* align-content: space-around; */
      /* 没有代码提示 */
      align-content: space-evenly;
      height: 400px;
      border: 1px solid #000;
    }
    .box div {
      width: 200px;
      height: 100px;
      background-color: pink;
    }
  </style></head>
<body>
  <div class="box">
    <div>1</div><div>2</div>
    <div>3</div><div>4</div>
    <div>5</div><div>6</div>
    <div>7</div><div>8</div>
  </div>
</body></html>

效果图:


 四、综合案例 – 抖音解决方案

1.图片素材

                        ​​​​​​​                ​​​​​​​        

2.效果图

3.源代码

<!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>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    li {
      list-style: none;
    }
    .box {
      margin: 50px auto;
      width: 1200px;
      height: 418px;
      border: 1px solid #ddd;
      border-radius: 10px;
    }
    .box ul {
      display: flex;
      /* 弹性盒子换行 */
      flex-wrap: wrap;
      /* 调整主轴对齐方式 */
      justify-content: space-between;
      /* 调整 行对齐方式 */
      align-content: space-between;
      padding: 90px 40px 90px 60px;
      height: 418px;
    }
    .box li {
      display: flex;
      width: 500px;
      height: 88px;
      /* background-color: pink; */
    }
    .box .pic {
      margin-right: 15px;
    }
    .box .text h4 {
      line-height: 40px;
      font-size: 20px;
      font-weight: 400;
      color: #333;
    }
    .box .text p {
      font-size: 14px;
      color: #666;
    }
  </style>
</head>
<body>
  <div class="box">
    <ul>
      <li>
        <div class="pic">
          <img src="./images/1.svg" alt="">
        </div>
        <div class="text">
          <h4>一键发布多端</h4>
          <p>发布视频到抖音短视频、西瓜视频及今日头条</p>
        </div>
      </li>
      <li>
        <div class="pic">
          <img src="./images/2.svg" alt="">
        </div>
        <div class="text">
          <h4>管理视频内容</h4>
          <p>支持修改已发布稿件状态和实时查询视频审核状态</p>
        </div>
      </li>
      <li>
        <div class="pic">
          <img src="./images/3.svg" alt="">
        </div>
        <div class="text">
          <h4>发布携带组件</h4>
          <p>支持分享内容携带小程序、地理位置信息等组件,扩展内容及突出地域性</p>
        </div>
      </li>
      <li>
        <div class="pic">
          <img src="./images/4.svg" alt="">
        </div>
        <div class="text">
          <h4>数据评估分析</h4>
          <p>获取视频在对应产品内的数据表现、获取抖音热点,及时进行表现评估</p>
        </div>
      </li>
    </ul>
  </div>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值