flex基本概念

127 阅读3分钟

flex 布局的基本概念

Flexible Box 模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力

 * 内容 : 弹性盒模型包括主轴 侧轴  
   * 伸缩容器的属性  
   * display伸缩容器:   
       flex            块级  
       inline-flex     内联   
  
   * flex-direction        主轴方向:   
       row             默认,从左到右   
       row-reverse     从右向左  
       column          从上到下  
       column-reverse  从下到上  
  
   * flex-wrap         伸缩容器是单行还是多行 并控制侧轴的方向,侧轴的方向决定堆放的方向  
       nowrap(默认值) | wrap(多行显示) | wrap-reverse(多行显示-反方向 从下往上排列)              
  
   * justify-content   伸缩项目在主轴上的对齐方式:   
       flex-start      默认,向伸缩容器的起始位置对齐  
       flex-end        向伸缩容器的的终点位置对齐  
       centent         向伸缩容器的中间位置对齐  
       space-between   伸缩项目平均分布 第一个伸缩项目在伸缩容器中最开始位置 最后一个伸缩项目在伸缩容器中的终点位置  
       space-around    伸缩项目平均分布在伸缩容器里 两端保留一半的空间  
  
   * align-content     伸缩项目在侧轴上的对齐方式(多行模式)  
       flex-start      向伸缩容器的起始位置对齐  
       flex-end        向伸缩容器的结束位置对齐  
       center          向伸缩容器的中间位置对齐  
       space-between   在伸缩容器里平均分布  
       space-around    在伸缩容器里平均分布 两边各有一半空间  
       stretch         各行将会伸展占用剩余空间 会受max-... min-... 影响  
  
   * align-items       伸缩项目在侧轴上的对齐方式(对单行对齐进行控制)  
       flex-start      侧轴的起始位置  
       flex-end        侧轴的结束位置  
       center          侧轴中心位置  
       baseline        基线对齐  
       stretch         默认,如果没设置高度 伸缩项目默认填充整个容器 如果有max-height max-width等属性 会受到影响  
  
   * flex-grow         伸缩项目占用多少剩余空间(如果给一个元素设置了width又设置了flex-grow 剩余空间=总宽度-width)  
       number          占用空间比例 注:[给每个元素一个宽度 会让所有元素忽略内容长短带来的宽度影响 如果不给宽度 每 个元素的宽是等于去掉内容以后的宽度]

伸缩项目上的属性

   * order             伸缩项目在文档流中出现的位置  
   * align-self        伸缩项目在侧轴上的对齐方式  
       flex-start      侧轴的起始位置  
       flex-end        侧轴的结束位置  
       center          侧轴的中心位置  
       baseline        基线对齐  

   实际值 = 计划值 - 总差值 * flex-shrink/(flex-shrink和)

总结一下:

  1. flex-direction调整主轴方向(默认为水平方向)
  2. justify-content调整主轴对齐
  3. align-items调整侧轴对齐(子元素可以使用align-self覆盖)
  4. flex-wrap控制是否换行
  5. align-content堆栈(由flex-wrap产生的独立行)对齐
  6. flex-flow是flex-direction + flex-wrap的简写形式
  7. flex是子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配
  8. order控制子项目的排列顺序,正序方式排序,从小到大