• CSS flex 布局学习笔记


    写在前面

    Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

    任何一个容器都可以指定为 Flex 布局。

    采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item)。

    flex容器

    容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end

    下面了解下容器和元素上有哪些常用的属性

    容器上的属性

    flex-direction

    元素在容器里摆放的方向

    注意当你调转行或列的方向后,flex-start和flex-end对应的方向也被调转了
    注意当flex以列为方向时,justify-content控制纵向对齐,align-items控制横向对齐

    row: 元素摆放的方向和文字方向一致。
    row-reverse: 元素摆放的方向和文字方向相反。
    column: 元素从上放到下。
    column-reverse: 元素从下放到上
    

    flex-wrap

    让容器中的元素换行显示

    nowrap: 所有的元素都在一行。
    wrap: 元素自动换成多行。
    wrap-reverse: 元素自动换成逆序的多行
    

    justify-content(常用)

    主轴(水平方向)的对齐方式

    flex-start: 元素和容器的左端对齐。
    flex-end: 元素和容器的右端对齐。
    center: 元素在容器里居中。
    space-between: 多余的空白间距只在元素中间区域分配 
    space-around: around是环绕的意思,元素周围保持相等的距离,空白间距在元素的周围
    space-evenly: evenly是匀称、平等的意思,每个flex子项两侧空白间距完全相等
    

    align-items(常用)

    交叉轴(垂直方向)的对齐方式

    flex-start: 元素与容器的顶部对齐。
    flex-end: 元素与容器的底部对齐。
    center: 元素纵向居中。
    baseline: 元素在容器的基线位置显示。
    stretch: 元素被拉伸以填满整个容器
    

    align-content

    决定行与行之间的间隔

    flex-start: 多行都集中在顶部。
    flex-end: 多行都集中在底部。
    center: 多行居中。
    space-between: 行与行之间保持相等距离。
    space-around: 每行的周围保持相等距离。
    stretch: 每一行都被拉伸以填满容器。
    

    元素上的属性

    order

    order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0

    flex-grow(常用)

    flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
    如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。
    如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

    flex-shrink

    flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
    如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
    如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

    负值对该属性无效。

    flex-basis

    flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小

    flex

    flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为 0 1 auto。后两个属性可选

    align-self

    可以设置单个元素有与其他元素不一样的对齐方式

    flex-start: 元素与容器的顶部对齐。
    flex-end: 元素与容器的底部对齐。
    center: 元素纵向居中。
    baseline: 元素在容器的基线位置显示。
    stretch: 元素被拉伸以填满整个容器
    

    练习

    • 实现一个平均布局

      通过给item元素的套一层item-wrap,然后item-wrap设置左右负的margin-left,margin-right 实现平均布局

      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <title>JS Bin</title>
      </head>
      <body>
      <div class="container">
        <div class="item-wrap">
          <div class="item"></div>
          <div class="item"></div>
          <div class="item"></div>
          <div class="item"></div>
          <div class="item"></div>
          <div class="item"></div>
          <div class="item"></div>
        </div>
      </div>
      </body>
      </html>
      
      .container{
         800px;
        margin: 0 auto;
        border: 1px solid red;
      }
      .item-wrap{
        display: flex;
        flex-wrap: wrap;
        margin: 0 -4px;
      }
      .item{
         calc(25% - 8px);
        height: 194px;
        background: #ddd;
        margin: 4px;
      }
      

    平均布局

    在线预览

    • 实现圣杯布局

      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width">
        <title>JS Bin</title>
      </head>
      <body>
      <div class="container">
        <div class="header">header</div>
        <div class="main">
          <div class="nav">nav</div>
          <div class="content">content</div>
          <div class="aside">aside</div>
        </div>
        <div class="footer">footer</div>
      </div>
      </body>
      </html>
      
      .container{
        display: flex;
        flex-direction: column;
      }
      .container > .header{
        height: 50px;
        background: #eee;
        
      }
      .container > .main{
        display: flex;
        height: calc(100vh - 100px);
      }
      .container > .main >.nav,
      .container > .main >.aside
      {
         230px;
        background-color: #ddd;
      }
      .container > .main >.content{
        flex: 1;
        background: #fff;
      }
      .container> .footer{
        height: 50px;
        background: #eee;
      }
      

      圣杯布局

      预览链接

    参考

    一个用来学习flex 布局的游戏

    阮一峰 flex语法篇

    阮一峰 flex实例篇

  • 相关阅读:
    ubuntu 启动 重启 停止 apache
    /usr/bin/env: php: No such file or directory 【xunsearch demo项目体验】【已解决】
    安装mezzanine时报:storing debug log for failure【已解决】
    redhat 安装 setuptools【成功】
    SnowNLP:一个处理中文文本的 Python 类库[转]
    Android 了解1G 2G 3G 知识
    Android-体系架构
    Android-bindService远程服务(Aidl)-初步
    Android-SDCard外部存储文件读写
    Android-文件模式
  • 原文地址:https://www.cnblogs.com/wubh/p/css-flex-layout-knowlege.html
Copyright © 2020-2023  润新知