flex布局

108 阅读5分钟

flex布局的使用

  • 什么是flex布局
  • flex容器(父级容器)相关属性
  • flex项目(子元素)相关属性

什么是flex布局

Flex布局意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。
注意:设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效

flex布局基本概念:

graph TD
flex布局属性--> flex容器相关属性:对整体的项目起作用 -->注意主轴和侧轴方向
flex布局属性--> flex元素相关属性:单独子项目起作用--> 注意主轴和侧轴方向

什么是主轴和测轴

flex布局的使用我们要注意好x轴和y轴的方向,否则会出现布局混乱
主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向(x轴正向)
侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的(y轴负向)
方向:默认主轴从左向右,侧轴默认从上到下
注意:主轴和侧轴方向是可以被flex-direction改变

可以看图大概了解一下整体内容: download.webp

flex容器(父级容器)相关属性

  • justify-content
  • align-items(单行)
  • align-content(多行)
  • flex-wrap
  • flex-direction
  • flex-flow

justify-content主轴上的子元素排列方式

justify-content属性定义了项目在 (x轴)主轴上的对齐方式
注意:使用这个属性前要确定好主轴的方向

属性简介
flex-start默认值,根据主轴方向头部开始,x轴则从左到右
flex-end根据主轴方向从尾部开始
center根据主轴方向居中对齐
space-around平均分布
space-between头尾贴边,中间平均分布

代码示范:

align-items测轴上子元素排列方式(单行)

控制子元素在测轴(y轴)上的排列方式
注意:在子元素为单行的时候使用

属性值简介
flex-strat默认值,从上到下
flex-end从下到上
center垂直居中
stretch(没有设置高度情况下)伸缩

代码示范:

align-content测轴上子元素排列方式(多行)

设置子项在测轴上的排列方式,且只能用于子元素多行的情况下,也就是flex-wrap:wrap这个属性出现才有作用,单行情况下是无法作用的

属性简介
flex-start默认值,根据测轴方向头部开始,x轴则从左到右
flex-end根据测轴方向从尾部开始
center根据测轴方向居中对齐
space-around测轴平均分布
space-between测轴头尾贴边,中间平均分布
stretch子元素高度平分父元素高度

代码示范:

flex-direction设置主轴的方向

flex-direction属性决定主轴的方向
注意:
1、 主轴和测轴是会发生变化的,看flex-direction设置谁为主轴,谁为测轴
2、 子元素是跟着主轴来排列的

属性值简介
row默认值,从左到右
row-reverse从右到左
column从上到下
column-reverse从下到上

代码示范:

flex-wrap设置子元素是否换行

默认情况下项目是不会换行的,统一在一条轴上
flex-warp属性定义,flex布局默认不换行

属性简介
nowrap默认值,不换行
wrap换行
wrap-reverse与测轴反方向换行

代码示范:

flex-flow复合属性(flex-direction和flex-wrap)

同时使用flex-direction和flex-wrap的复合属性(没有固定顺序)

代码示范:

flex项目(子元素)相关属性

  • align-self
  • order
  • flex-grow
  • flex-basis
  • flex-shrink
  • flex复合属性(flex-grow、flex-shrink、flex-basis)

align-self控制子元素自己在测轴上的排列方式

align-self属性允许单个项目与其他项目测轴上不一样对齐方式,可以覆盖父级的align-items属性
默认值为auto,表示继承父元素的align-items属性,如果没有父元素则为stretch

属性简介
auto(默认值)表示继承容器的 align-items 属性。
flex-start默认值,根据测轴方向头部开始,x轴则从左到右
flex-end根据测轴方向从尾部开始
center根据测轴方向居中对齐
baseline沿着交叉轴方向,按照项目内的文字对齐。
stretch沿着交叉轴方向自动进行拉升到最大。

代码示范:

order属性定义子元素的排列顺序

数值越小,排列越靠前,默认值为0
注意:和z-index不一样

flex-grow属性定义自身宽度加上剩余空间分配

flex-grow属性定义子元素在父盒子分配剩余空间,用flex-grow的值来表示占有多少份数
属性值为数字,数字为1则表示占有总份数1份,默认值为0
flex计算:总宽度 / 总flex-grow份数 * 子元素对应flex-grow份数==子元素占有剩余空间

代码示范:

flex-basis设置宽度

指定了子项在容器主轴方向上的初始大小,优先级高于自身的宽度width(宽度始终是basis设置的宽度)

代码示范:

flex-shrink指定flex 元素的收缩规则

flex-shrink 属性指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值,默认值是1

代码示范:

flex复合属性

一个属性:flex:(flex-grow:默认值1,初始值0)

两个属性值:
flex:(flex-grow:默认值1)(flex-basis:默认值0%) basis需要带有单位
flex:(flex-grow:默认值1)(flex-shrink:默认值1) 两个属性值都不需要带单位

三个属性值:flex:(flex-grow:默认值1,初始值0) (flex-shrink:默认值1)(flex-basis:默认值0%)

注意:
1、flex-grow和flex-shrink不能为负数
2、flex-basis注意带单位