flex布局

flex意味“弹性盒子”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。
采用flex布局的元素,称为flex容器,它的所有子元素自动成为容器成员。

如果需要将容器设为flex容器,则第一步如下将div设置为flex容器:

div
{
 display: flex;
}

容器的属性

flex-direction决定子元素的排列方向

决定主轴的方向(即项目的排列方向)。它有4个可能的值 :
(1)row默认值,主轴为水平方向,子元素从左向右排列
实例:

 <div class="mydiv">
<div>我是1</div>
<div>我是2</div>
<div>我是3</div>
 </div>
.mydiv
{
 width: 400px;
 border: 2px solid pink;
 padding: 10px;
 display: flex;
  flex-direction: row;
}

flex布局
(2)row-reverse:主轴为水平方向,起点在容器的右端。

.mydiv{
 flex-direction: row-reverse;
}

flex布局
(3)column:主轴为垂直方向,起点在容器的上沿。

.mydiv{
flex-direction: column;
}

flex布局
(4)column-reverse:主轴为垂直方向,起点在容器的下沿。

.mydiv{
flex-direction: column-reverse;
}

flex布局

flex-wrap规定如果一行放不下如何换行。

默认情况下容器里变得额所有项目都排在一条线上,flex-wrap定义如果一行排不下 如何换行。它可能的值有三个:
(1)nowrap(默认):不换行。

div{
 flex-direction: row;
 flex-wrap: nowrap;
}

如果不换行,则会挤压子元素,放在一条线上。
flex布局
(2)wrap:换行,第一行在上方。

div{
 flex-direction: row;
 flex-wrap: wrap;
}

flex布局
(3)wrap-reverse:换行,第一行在下方。

div{
 flex-direction: row;
 flex-wrap: wrap-reverse;
}

flex布局

flex-flow是上面两个属性的简写形式

是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
例如:

flex-flow:row wrap;

justify-content定义在主轴上的对齐方式

justify-content 定义了项目在主轴上的对齐方式。它可能的值有5个:
(1)flex-start向主轴的起始位置对齐,也就是从主轴的起始位置开始排列。

div{
 display: flex;
 flex-direction: row;
 justify-content: flex-start;
}

flex布局
(2)flex-end:向主轴结束位置对齐,也就是从主轴结束的位置开始排列。

div{
 display: flex;
 flex-direction: row;
 justify-content: flex-end;
}

flex布局
(3)center: 居中

div{
 display: flex;
 flex-direction: row;
 justify-content: center;
}

flex布局
(4)space-between:如果有两个以上的项目,则容器主轴的开始和结束位置各一个,其他的项目均匀排列,项目之间的间隔相等。排列顺序同样和flex-direction有关。如果只有两个项目则一边一个。如果只有一个项目则只在容器主轴的开始位置排列

div{
 display: flex;
 flex-direction: row;
 justify-content: space-between;
}

flex布局
(5)space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。排列顺序同样和flex-direction有关。如果只有一个项目则排列在中间。

div{
 display: flex;
 flex-direction: row;
 justify-content: space-around;
}

flex布局

align-items定义项目在交叉轴(纵轴)上如何对齐

align-items属性定义项目在交叉轴(纵轴)上如何对齐。它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。
(1)flex-start:交叉轴的起点对齐。

div{
display: flex;
flex-direction: row;
align-items: flex-start;
}

flex布局
(2)flex-end:交叉轴的终点对齐。

div{
display: flex;
flex-direction: row;
align-items: flex-end;
}

flex布局
(3)center:交叉轴的中点对齐。

div{
display: flex;
flex-direction: row;
align-items: center;
}

flex布局
(4)baseline: 项目的第一行文字的基线对齐。

div{
display: flex;
flex-direction: row;
align-items: baseline;
}

如下图效果,使第一行文字基线对齐。
flex布局
(5)stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

div{
display: flex;
flex-direction: row;
align-items: stretch;
}

如下图未设置高度,元素自动填满整个容器。
flex布局

align-content定义了多根轴线(多行)的对齐方式

align-content属性定义了多根轴线(多行)的对齐方式。如果项目只有一根轴线(一行),该属性不起作用。
如果flex-direction的值是column,则该属性定义了多列的对齐方式。如果项目只有一列,该属性不起左右。
属性值包括:
(1)stretch(默认值):多行占满整个交叉轴。

div{
display: flex;
flex-direction: row;
 align-content: stretch;
}

flex布局
(2)flex-start:与交叉轴的起点对齐。

div{
 display: flex;
 flex-wrap: wrap;
 align-content: flex-start;
}

flex布局
(3)flex-end:与交叉轴的终点对齐。

div{
 display: flex;
 flex-wrap: wrap;
 align-content: flex-end;
}

flex布局
(4)center:与交叉轴的中点对齐。

div{
 display: flex;
 flex-wrap: wrap;
 align-content:center;
}

flex布局
(5)space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

div{
 display: flex;
 flex-wrap: wrap;
 align-content:space-between;
}

flex布局
(6)space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

div{
 display: flex;
 flex-wrap: wrap;
 align-content:space-around;
}

flex布局

瓜分父容器的空间

1.先了解什么是剩余空间
现在有一个容器A,它的里面有三个元素a1,a2,a3,剩余空间=容器A的宽度-a1-a2-a3
flex布局

flex-grow用于瓜分父容器的剩余空间

flex-grow默认为0,它需要在flex容器的子元素上设置。
上述例子中,如果A容器宽度为500px,a1的宽度为100px,a2的宽度为200px,a3的宽度为40px,那么剩余宽度为500-100-200-40=170px;
例子1:
如果此时我们队a1设置flex-grow:1,那么剩余的170px都会分给a1,a1原来有100px此时会有100px+170px=270px;
例子2:
如果a2此时也来瓜分剩余空间,a2中设置了flex-grow:2,那么父容器会把剩余空间分成三份,a1分1/3,a2分2/3

https://www.cnblogs.com/ghfjj/p/6529733.html

上一篇:使用react-navigation时报错:undefined is not an object (evaluating rngesturehandlermodule.direction)


下一篇:关于图数据的实现原理及基本方案学习。