首页 > 其他分享 >Flex 的使用

Flex 的使用

时间:2022-11-13 14:22:43浏览次数:42  
标签:Flex 主轴 align 子项 width flex 使用 grow

1. flex 父容器

container { display: flex; } 中的 display: flex 可以令一个元素成为 flex 父容器

1.1 flex-direction

用于控制主轴的方向

  • row(默认值): 主轴方向从左到右
  • row-reverse: 主轴方向从右到左
  • column: 主轴方向从上到下
  • column-reverse: 主轴方向从下到上

1.2 flex-wrap

表示当 flex 子项超出主轴宽度时是否要进行换行

  • nowrap(默认值): 默认不换行
  • wrap: 换行
  • wrap-reverse: 换行, 但是按照逆交叉轴的方向. 例如, 当 flex-direction: row
    • wrap:

      1 2 3
      4 5 6
    • wrap-reverse:

      4 5 6
      1 2 3

1.3 flex-flow

[flex-direction] [flex-wrap] 的缩写

1.4 justify-content

flex 子项在主轴上的对齐方式

  • flex-start(默认): 靠着主轴的 start 端
  • flex-end: 靠着主轴的 end 端
  • center: flex 子项在主轴上居中排列
  • space-between: flex 子项以外的空间将均匀分配到 flex 子项之间(蓝色背景的为 flex 父容器)
  • space-around: flex 子项以外的空间将均分为若干份, 每个 flex 子项主轴两侧各一份
  • space-evenly: flex 子项以外的空间将均分为若干份, 分别插入 flex 子项与 flex 子项之间, 以及 flex 子项与 flex 父容器之间

1.5 align-items

flex 子项在交叉轴上的对齐方式

1.6 align-content

将所有的 flex 子项视为一个整体, 其在 flex 父容器中的排列方式

1.8 gap/row-gap/column-gap

用于表示 flex 子项之间的空隙大小

  • 语法一:gap: 10px;: 表示 flex 子项四周的空隙大小为 10px
  • 语法二:gap: [row-gap] [column-gap]: 表示 flex 子项上下空隙大小和左右空隙大小

2. flex 子项

2.1 flex-grow

记主轴上的剩余空间的大小为 1,flex 子项根据 flex-grow 的值,按比例伸展

  • 当只有一个元素时, flex-grow 表示要占据的剩余空间的大小

    • flex-grow >= 1, 则表示要占据所有的剩余空间
    • flex-grow < 1, 则按比例占据剩余空间的大小(默认剩余空间的大小为 1)
  • 当多个 flex 子项使用 flex-grow 属性时

    Code
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <style>
        .container {
          height: 300px;
          width: 1200px;
          background-color: lightyellow;
    
          display: flex;
          flex-flow: column nowrap;
          justify-content: center;
        }
    
        .info {
          text-align: center;
        }
    
        .content {
          background: pink;
          width: 800px;
          height: 200px;
          margin: 0 auto;
    
          display: flex;
          align-items: center;
        }
    
        .box {
          height: 150px;
          flex-basis: 100px;
          display: flex;
          flex-flow: column wrap;
          justify-content: space-evenly;
        }
    
        .box1 {
          flex-grow: .1;
          background: lightblue;
        }
        .box2 {
          flex-grow: .2;
          background: lightgreen;
        }
        .box3 {
          flex-grow: .3;
          background: yellow;
        }
        .box4 {
          flex-grow: .04;
          background: orange;
        }
      </style>
    </head>
    <body>
      <div class="container">
        <div class="info">width: 800px</div>
        <div class="content">
          <div class="box box1">
            <span>flex-grow: .1</span>
            <span>flex-basis: 100px</span>
            <span>actually width: 140px</span>
          </div>
          <div class="box box2">
            <span>flex-grow: .2</span>
            <span>flex-basis: 100px</span>
            <span>actually width: 180px</span>
          </div>
          <div class="box box3">
            <span>flex-grow: .3</span>
            <span>flex-basis: 100px</span>
            <span>actually width: 220px</span>
          </div>
          <div class="box box4">
            <span>flex-grow: .04</span>
            <span>flex-basis: 100px</span>
            <span>actually width: 116px</span>
          </div>
        </div>    
      </div>
    </body>
    </html>
    
    • sum(flex-grow) >= 1, 则每个子项各自获得 \(freeSpace \times \frac{flexGrow}{\sum{flexGrow}}\)
    • sum(flex-grow) < 1, 则每个子项各自获得 \(freeSpace \times flexGrow\)
  • 0(default): 表示不占用剩余空间间隙来扩展自己的宽度

2.2 flex-shrink

记 flex 子项超出 flex 父容器部分的大小为 1, flex 子项根据 flex-shrink 的值, 按比例收缩(收缩的极限不能够小于 flex 子项内容物的长/宽)

  • 当只有一个 flex 子项时, flex-shrink 表示要收缩的比例
    • flex-shrink >= 1, 则超出部分全部收缩
    • flex-shrink < 1, 则收缩 \(overSize \times flexShrink\)
  • 当有多个 flex 子项时, flex 子项根据各自的 flex-shrink 按比例收缩
    • sum(flex-shrink) >= 1, 则每个子项收缩 \(freeShrink \times \frac{flexShrink}{\sum{flexShrink}}\).
    • sum(flex-shrink) < 1, 则每个子项收缩 \(overSize \times flexShrink\). 如下图所示: 此时 overSize = 400px, 四个元素各自收缩 40px, 80px, 120px, 400 \(\times\) 0.04 = 16px
  • 1(default): 表示超出容器的部分都会尽可能地收缩到容器内部

2.3 flex-basis

定义 flex 子项在主轴上的长度(当值小于 flex 子项中的元素宽度时,以该元素宽度为准)

  • auto(default): 当值为 auto 时, 以 height/width 为准
  • 当有特定的值时, 以 flex-basis 代替 height/width

2.4 align-self

align-items 类似,只不过 align-items 控制所有的 flex 子项,而 align-self 则控制 flex 子项自己,且优先级大于 align-items

  • auto(default): 默认继承父容器的 align-items 的值
  • flex-start/flex-end/center/baseline/stretch

2.5 order

order 的值越大,对应的 flex 子项排列顺序越靠后

  • 0(default): 默认情况下,flex 子项按代码顺序排列

标签:Flex,主轴,align,子项,width,flex,使用,grow
From: https://www.cnblogs.com/suzukaze/p/flex.html

相关文章

  • Abp vNext 使用邮件
    https://docs.abp.io/en/abp/latest/EmailingEncrypttheSMTPPasswordAbp.Mailing.Smtp.Passwordmustbeanencryptedvalue.IfyouusetheISettingManagertose......
  • Celery在项目中的使用
    一celery简要说明1Celery是一个功能完备即插即用的分布式异步任务队列框架。它适用于异步处理问题,当大批量发送邮件/短信等网络请求、或者大文件上传,批图图像处理等等......
  • 新u盘第一次使用要格式化吗
    U盘是USB盘的简称,特点是小巧便于携带、存储容量大、性价比高,常见的大小从128M、4G、8G等。那么新U盘第一次使用要格式化吗?U盘格式化FormatUSBflashdisk新U......
  • Vue中使用el-upload+XLSX实现解析excel文件为json数据
    场景业务要求为实现每天上报各部门计划人数,需要通过excel导入数据。前端可以解析excel数据并进行初步的格式校验。  导入成功之后解析的数据  excel里的数据......
  • IdelHandler介绍及使用
    https://blog.csdn.net/jdsjlzx/article/details/110532500IdleHandler主要是在MessageQueue出现空闲的时候被执行,那么何时出现空闲?MessageQueue是一个基于消息触发......
  • 在Visual Studio 中使用git系列文章目录
    在VisualStudio中使用git——什么是Git(一)在VisualStudio中使用git——给VisualStudio安装git插件(二)在VisualStudio中使用git——使用git管理源代码(三)在......
  • Gerrit 不使用代理服务的搭建配置
    1、前言Gerrit名声已很大了,我也就不在过多阐述介绍了,凡是需要安装搭建Gerrit服务器的,网上一搜索都是大把精彩教程。但是,基本都是基于代理服务的搭建安装,一种是基于apach......
  • 懒人听书下载文件被加密?使用这个工具一键解决!
    直接通过懒人听书上下载的声音是经过加密的,没办法通过其他播放器进行播放,也没法进行声音文件分享给其他小伙伴。 如果不懂电脑技术,是没办法进行解密的,不过有个工具帮我......
  • 使用 ASP.NET Core MVC 创建 Web API 系列文章目录
    使用ASP.NETCoreMVC创建WebAPI(一)使用ASP.NETCoreMVC创建WebAPI(二) 使用ASP.NETCoreMVC创建WebAPI(三)使用ASP.NETCoreMVC创建WebAPI(四)使用ASP.......
  • SAP 电商云 Spartacus UI Angular UI 和 Accelerator JSP UI 的混合使用
    Spartacus在技术和架构(library发布方式vs模板发布方式,headlessvsembedded,AngularvsJSP技术栈)等各方面,都是一种全面的从Accelerator的完整范式转变。因此,对于C......