06 - Flex 布局

标准流 Normal Flow

<!DOCTYPE html>
<html>
  <head>
    <style>
      .box {
        width: 100px;
        height: 100px;
        border: 1px solid black;
        margin: 10px;
        padding: 5px;
      }
    </style>
  </head>
  <body>
    <div class="box">Box 1</div>
    <div class="box">Box 2</div>
    <div class="box">Box 3</div>
  </body>
</html>

浮动 float

<!DOCTYPE html>
<html>
  <head>
    <style>
      .left {
        float: left;
        width: 150px;
        height: 150px;
        background-color: red;
        margin: 10px;
      }

      .right {
        float: right;
        width: 150px;
        height: 150px;
        background-color: blue;
        margin: 10px;
      }
    </style>
  </head>
  <body>
    <div class="left"></div>
    <div class="right"></div>
  </body>
</html>

浮动基本使用与布局

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>浮动的基本使用</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      .product {
        width: 1226px;
        height: 614px;
        margin: 50px auto;
        /* border: 1px solid #000; */
      }

      .product__left {
        width: 234px;
        height: 100%;
        background-color: skyblue;
        float: left;
      }

      .product__right {
        width: 978px;
        height: 100%;
        float: right;
      }

      .product__right ul {
        list-style: none;
      }

      .product__right ul li {
        width: 234px;
        height: 300px;
        background-color: orange;
        margin: 0 14px 14px 0;
        float: left;
      }

      .product__right ul li:nth-child(4n) {
        margin-right: 0;
      }
    </style>
  </head>

  <body>
    <div class="product">
      <div class="product__left"></div>
      <div class="product__right">
        <ul>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
          <li></li>
        </ul>
      </div>
    </div>
  </body>
</html>

京东布局练习

考拉布局练习

浮动的问题 - 高度塌陷

清除浮动 clear

MDN 文档
备注

如果一个元素里只有浮动元素,那它的高度会是 0。如果你想要它自适应即包含所有浮动元素,那你需要清除它的子元素。一种方法叫做 clearfix,即 clear 一个不浮动的 ::after 伪元素。

#container::after {
  content: "";
  display: block;
  clear: both;
}

清除浮动塌陷

MDN 文档

浮动总结

清除浮动的方法:

  1. 使用空的块级元素(常用方法): 在浮动元素后面添加一个空的块级元素,给它应用 clear: both; 属性。这个空元素会插入到浮动元素后面,强制父元素包含浮动元素。
  2. 使用 clear 属性: 可以直接在需要清除浮动的元素上应用 clear: both;,使其不受浮动元素的影响。这种方法适用于在浮动元素后紧接着需要清除浮动的情况。
  3. 使用 overflow 属性: 将父元素的 overflow 属性设置为 autohidden,可以使其包含浮动元素。但要注意,这可能导致内容溢出时的滚动条。
  4. 使用 clearfix 类: 在父元素上应用 clearfix 类,该类会通过伪元素清除浮动,从而解决高度塌陷问题。

flex 布局

DOCS

flex 布局简介

flex 布局组成



主轴对齐方式 justify-content

MDN 文档


侧轴对齐方式 align-items/align-self

MDN 文档




修改主轴方向 flex-direction

MDN 文档




弹性换行 flex-wrap

MDN 文档




行对齐方式 align-content

MDN 文档



排布顺序 order

MDN 文档

放大比例 flex-grow

MDN 文档





收缩比例 flex-shrink

MDN 文档



初始尺寸 flex-basis

MDN 文档


弹性伸缩比 flex

MDN 文档

### 总结 flex 布局 container 和 item 的属性以及作用

综合案例 6 - 抖音解决方案

<!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>
      .douyin-solution {
        width: 1200px;
        height: 418px;
        margin: 50px auto;

        border: 1px solid #ddd;
        border-radius: 10px;
        background-color: #f5f5f5;
      }

      .douyin-solution__list {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        align-items: center;

        height: 100%;
      }

      .douyin-solution__item {
        display: flex;
        width: 50%;
        height: 50%;
      }

      .douyin-solution__item-pic img {
        width: 100px;
        height: 100px;
      }

      .douyin-solution__item-text-title {
        line-height: 20px;
        font-size: 20px;
        font-weight: 400;
        color: #333;
      }

      .douyin-solution__item-text-desc {
        font-size: 14px;
        /* line-height: 14px; */
        color: #666;
      }
    </style>
  </head>

  <body>
    <div class="douyin-solution">
      <ul class="douyin-solution__list">
        <li class="douyin-solution__item">
          <div class="douyin-solution__item-pic">
            <img
              src="https://s2.loli.net/2023/08/27/7oK8pZ3WwfkgxT1.png"
              alt=""
              class="douyin-solution__item-pic-img" />
          </div>
          <div class="douyin-solution__item-text">
            <h4 class="douyin-solution__item-text-title">一键发布多端</h4>
            <p class="douyin-solution__item-text-desc">发布视频到抖音短视频、西瓜视频及今日头条</p>
          </div>
        </li>

        <li class="douyin-solution__item">
          <div class="douyin-solution__item-pic">
            <img
              src="https://s2.loli.net/2023/08/27/pLMIHQxJl2bCs75.png"
              alt=""
              class="douyin-solution__item-pic-img" />
          </div>
          <div class="douyin-solution__item-text">
            <h4 class="douyin-solution__item-text-title">管理视频内容</h4>
            <p class="douyin-solution__item-text-desc">支持修改已发布稿件状态和实时查询视频审核状态</p>
          </div>
        </li>

        <li class="douyin-solution__item">
          <div class="douyin-solution__item-pic">
            <img
              src="https://s2.loli.net/2023/08/27/cqnEhfTKseV1jwb.png"
              alt=""
              class="douyin-solution__item-pic-img" />
          </div>
          <div class="douyin-solution__item-text">
            <h4 class="douyin-solution__item-text-title">发布携带组件</h4>
            <p class="douyin-solution__item-text-desc">
              支持分享内容携带小程序、地理位置信息等组件,扩展内容及突出地域性
            </p>
          </div>
        </li>

        <li class="douyin-solution__item">
          <div class="douyin-solution__item-pic">
            <img
              src="https://s2.loli.net/2023/08/27/w7aW5qMh1ofIXxp.png"
              alt=""
              class="douyin-solution__item-pic-img" />
          </div>
          <div class="douyin-solution__item-text">
            <h4 class="douyin-solution__item-text-title">数据评估分析</h4>
            <p class="douyin-solution__item-text-desc">
              获取视频在对应产品内的数据表现、获取抖音热点,及时进行表现评估
            </p>
          </div>
        </li>
      </ul>
    </div>
  </body>
</html>
## 作业 1 - 小米模块案例

使用 float

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>小米模块案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      .page {
        width: 1226px;
        margin: 30px;
      }

      .page__left {
        float: left;
        width: 234px;
        height: 614px;
        background-color: #800080;
      }

      .page__right {
        float: right;
        width: 978px;
        height: 614px;
        background-color: pink;
      }

      .page__item {
        float: left;
        width: 234px;
        height: 300px;
        margin: 0 14px 14px 0;

        background-color: #87ceeb;
      }

      .page__item:nth-child(4n) {
        margin-right: 0;
      }

      .page__item:nth-child(n + 4) {
        margin-bottom: 0;
      }
    </style>
  </head>

  <body>
    <div class="page">
      <div class="page__left"></div>
      <div class="page__right">
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
      </div>
    </div>
  </body>
</html>

使用 flexbox

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>小米模块案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      .page {
        display: flex;
        justify-content: space-between;
        width: 1226px;
        margin: 30px;
      }

      .page__left {
        width: 234px;
        height: 614px;
        background-color: #800080;
      }

      .page__right {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;

        width: 978px;
        height: 614px;
        background-color: pink;
      }

      .page__item {
        width: 234px;
        height: 300px;
        margin-bottom: 14px;
        background-color: #87ceeb;
      }
    </style>
  </head>

  <body>
    <div class="page">
      <div class="page__left"></div>
      <div class="page__right">
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
        <div class="page__item"></div>
      </div>
    </div>
  </body>
</html>

作业 2 - 网页导航案例

使用 float

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>网页导航案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      ul {
        list-style: none;
      }

      a {
        text-decoration: none;
        color: #000;
      }

      .nav {
        margin: 30px;
        height: 50px;
        /* background-color: pink */
      }

      .nav__item {
        float: left;
      }

      .nav__link {
        float: left;
        width: 80px;
        height: 50px;
        background-color: #ffc0cb;

        text-align: center;
        line-height: 50px;
        font-size: 16px;
        color: #fff;
      }

      .nav__link:hover {
        background-color: #008000;
      }
    </style>
  </head>

  <body>
    <ul class="nav">
      <li class="nav__item"><a class="nav__link" href="#">新闻 1</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 2</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 3</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 4</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 5</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 6</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 7</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 8</a></li>
    </ul>
  </body>
</html>

使用 flexbox

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>网页导航案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      ul {
        list-style: none;
      }

      a {
        text-decoration: none;
        color: #000;
      }

      .nav {
        display: flex;
        margin: 30px;
        height: 50px;
        /* background-color: pink */
      }

      .nav__item {
        display: flex;
      }

      .nav__link {
        width: 80px;
        height: 50px;
        background-color: #ffc0cb;

        text-align: center;
        line-height: 50px;
        font-size: 16px;
        color: #fff;
      }

      .nav__link:hover {
        background-color: #008000;
      }
    </style>
  </head>

  <body>
    <ul class="nav">
      <li class="nav__item"><a class="nav__link" href="#">新闻 1</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 2</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 3</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 4</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 5</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 6</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 7</a></li>
      <li class="nav__item"><a class="nav__link" href="#">新闻 8</a></li>
    </ul>
  </body>
</html>

作业 3 - 微金所导航案例

使用 float

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>微金所导航案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }

      ul {
        list-style: none;
      }

      a {
        text-decoration: none;
        color: #000;
      }

      .header {
        height: 50px;
        border-bottom: 1px solid #ccc;
      }

      .header__nav {
        width: 1200px;
        margin: 0 auto;
      }

      .header__item {
        float: left;
        width: 20%;
        height: 100%;
        /* background-color: pink; */

        text-align: center;
        line-height: 50px;
        border-right: 1px solid #ccc;
      }

      .header__item--last {
        border-right: none;
      }

      .header__link {
        display: block;
        height: 100%;
      }
    </style>
  </head>

  <body>
    <div class="header">
      <ul class="header__nav">
        <li class="header__item"><a class="header__link" href="#">我要投资</a></li>
        <li class="header__item"><a class="header__link" href="#">平台介绍</a></li>
        <li class="header__item"><a class="header__link" href="#">新手专区</a></li>
        <li class="header__item"><a class="header__link header__link--app" href="#">手机微金所</a></li>
        <li class="header__item header__item--last"><a class="header__link" href="#">个人中心</a></li>
      </ul>
    </div>
  </body>
</html>

使用 flexbox

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>微金所导航案例</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }

      ul {
        list-style: none;
      }

      a {
        text-decoration: none;
        color: #000;
      }

      .header {
        height: 50px;
        border-bottom: 1px solid #ccc;
      }

      .header__nav {
        display: flex;
        width: 1200px;
        margin: 0 auto;
      }

      .header__item {
        width: 20%;
        height: 100%;
        /* background-color: pink; */

        text-align: center;
        line-height: 50px;
        border-right: 1px solid #ccc;
      }

      .header__item--last {
        border-right: none;
      }

      .header__link {
        display: block;
        height: 100%;
      }
    </style>
  </head>

  <body>
    <div class="header">
      <ul class="header__nav">
        <li class="header__item"><a class="header__link" href="#">我要投资</a></li>
        <li class="header__item"><a class="header__link" href="#">平台介绍</a></li>
        <li class="header__item"><a class="header__link" href="#">新手专区</a></li>
        <li class="header__item"><a class="header__link header__link--app" href="#">手机微金所</a></li>
        <li class="header__item header__item--last"><a class="header__link" href="#">个人中心</a></li>
      </ul>
    </div>
  </body>
</html>

作业 4 - 抖音开放 API

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>抖音开放API</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }

      ul {
        list-style: none;
      }

      body {
        background-color: #f5f5f5;
      }

      .page {
        width: 1076px;
        height: 540px;
        margin: 30px;
        /* background-color: pink; */
      }

      .page__list {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        align-content: space-between;
      }

      .page__item {
        width: 254px;
        height: 260px;
        margin-bottom: 20px;
        padding: 0 45px;
        background-color: #fff;

        text-align: center;
        border-radius: 10px;
      }

      .page__img {
        width: 58px;
        height: 58px;
        margin-top: 45px;
      }

      .page__title {
        margin-top: 20px;
        margin-bottom: 5px;
        font-weight: 600;
      }

      .page__desc {
        font-size: 14px;
        color: #999;
      }
    </style>
  </head>

  <body>
    <div class="page">
      <ul class="page__list">
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/mPxKUCLsZbyWNHV.png" alt="" />
          <h4 class="page__title">账号授权</h4>
          <p class="page__desc">包含抖音帐号授权登录与授权绑定的能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/pIjwfOskeQzR6tB.png" alt="" />
          <h4 class="page__title">用户管理</h4>
          <p class="page__desc">包含用户的基础信息以及关系链相关数据的获取</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/fpwdJDukiEBz6Xa.png" alt="" />
          <h4 class="page__title">视频管理</h4>
          <p class="page__desc">包含抖音、西瓜、头条视频的发布以及相关数据的获取能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/4SQO2LnUhG8REtc.png" alt="" />
          <h4 class="page__title">互动管理</h4>
          <p class="page__desc">包含私信收发以及评论管理的能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/ByGi4r3MAUg1zZl.png" alt="" />
          <h4 class="page__title">搜索管理</h4>
          <p class="page__desc">包含通过关键词获取抖音视频及该视频下评论,并进行回复的能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/aRlAT89x5DHQ7Su.png" alt="" />
          <h4 class="page__title">数据开放服务</h4>
          <p class="page__desc">包含用户授权后的公开用户数据,视频数据等能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/CO4kMtYWIFHRels.png" alt="" />
          <h4 class="page__title">企业号开放能力</h4>
          <p class="page__desc">包含企业号意向用户、企业消息卡片、团购活动等的管理能力</p>
        </li>
        <li class="page__item">
          <img class="page__img" src="https://s2.loli.net/2023/08/28/u7dPMyiR5JeLXCD.png" alt="" />
          <h4 class="page__title">生活服务开放能力</h4>
          <p class="page__desc">包含商铺/商品库/交易系统等能力的开放接入</p>
        </li>
      </ul>
    </div>
  </body>
</html>

作业 5 - 小兔鲜部分