初始骨架和样式

  1. <div class="container">
  2. <div style="background:green" class="chunk child1">1</div>
  3. <div style="background:red" class="chunk child2">2</div>
  4. <div style="background:gold" class="chunk child3">3</div>
  5. </div>
  1. .container{
  2. width: 300px;
  3. height: 400px;
  4. background: #A0A0A0;
  5. }
  6. .chunk{
  7. width: 100px;
  8. height: 100px;
  9. }

注:下面不再重复出现以上的css属性,除非需要更改现有的属性值
在旧版chrome实现flex布局 - 图1

使用Flex布局

最新写法:

  1. .container{
  2. display: flex;
  3. }

兼容写法:

  1. .container{
  2. display: -webkit-box;
  3. }

在旧版chrome实现flex布局 - 图2

容器的属性

flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)。
属性值有:flex-direction: row | row-reverse | column | column-reverse;

flex-direction: row

row(默认值):主轴为水平方向,起点在左端。

兼容写法

  1. .container{
  2. -webkit-box-orient:horizontal;
  3. }

在旧版chrome实现flex布局 - 图3

flex-direction: row-reverse

row-reverse:主轴为水平方向,起点在右端

兼容写法:

  1. .container{
  2. -webkit-box-orient:horizontal;
  3. -webkit-box-direction:reverse;
  4. }

在旧版chrome实现flex布局 - 图4

flex-direction: column

column:主轴为垂直方向,起点在上沿

兼容写法

  1. .container{
  2. -webkit-box-orient:vertical;
  3. }

在旧版chrome实现flex布局 - 图5

flex-direction: column-reverse

column-reverse:主轴为垂直方向,起点在下沿

兼容写法

  1. .container{
  2. -webkit-box-orient:vertical;
  3. -webkit-box-direction:reverse;
  4. }

justify-content属性

justify-content属性定义了项目在主轴上的对齐方式。
属性值有:justify-content: flex-start | flex-end | center | space-between | space-around;

修改下容器的宽高,好观察对齐情况

  1. .container{
  2. width: 500px;
  3. height: 400px;
  4. }

在旧版chrome实现flex布局 - 图6

justify-content: flex-start

flex-start(默认值):左对齐
兼容写法

  1. .container{
  2. -webkit-box-pack:start;
  3. }

在旧版chrome实现flex布局 - 图7

justify-content: flex-end

flex-end:右对齐
兼容写法

  1. .container{
  2. -webkit-box-pack:end;
  3. }

在旧版chrome实现flex布局 - 图8

justify-content: center

center: 水平居中
兼容写法

  1. .container{
  2. -webkit-box-pack:center;
  3. }

在旧版chrome实现flex布局 - 图9

justify-content: space-between

pace-between:两端对齐,项目之间的间隔都相等。
兼容写法

  1. .container{
  2. -webkit-box-pack:justify;
  3. }

在旧版chrome实现flex布局 - 图10

align-items属性

align-items属性定义项目在交叉轴上如何对齐
属性值有:align-items: flex-start | flex-end | center | baseline | stretch

修改每个组块的高度,便于观察垂直对齐情况

  1. .child1{
  2. height:100px;
  3. font-size: 16px;
  4. }
  5. .child2{
  6. height:200px;
  7. font-size: 28px;
  8. }
  9. .child3{
  10. height:300px;
  11. font-size: 36px;
  12. }

在旧版chrome实现flex布局 - 图11

align-items: flex-start

flex-start:交叉轴的起点对齐
兼容写法

  1. .container{
  2. -webkit-box-align:start;
  3. }

在旧版chrome实现flex布局 - 图12

align-items: flex-end

flex-end:交叉轴的终点对齐
兼容写法

  1. .container{
  2. -webkit-box-align:end;
  3. }

在旧版chrome实现flex布局 - 图13

align-items: center

center:交叉轴的中点对齐
兼容写法

  1. .container{
  2. -webkit-box-align:center;
  3. }

在旧版chrome实现flex布局 - 图14

align-items: baseline

baseline: 项目的第一行文字的基线对齐
兼容写法

  1. .container{
  2. -webkit-box-align:baseline;
  3. }

在旧版chrome实现flex布局 - 图15

align-items: stretch

stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度

兼容写法

  1. .container{
  2. -webkit-box-align:stretch;/*前提是项目未设置高度*/
  3. }

在旧版chrome实现flex布局 - 图16

项目的属性

order属性

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

现在想实现排序顺序为:2,3,1
兼容写法

  1. .child1{
  2. -webkit-box-ordinal-group: 3;
  3. }
  4. .child2{
  5. -webkit-box-ordinal-group: 1;
  6. }
  7. .child3{
  8. -webkit-box-ordinal-group: 2;
  9. }

在旧版chrome实现flex布局 - 图17

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

兼容写法
/注:不能给项目设置宽度,否则项目的宽度与预期不同/

  1. .child1{
  2. -webkit-box-flex: 1;
  3. }
  4. .child2{
  5. -webkit-box-flex: 1;
  6. }
  7. .child3{
  8. -webkit-box-flex:2;
  9. }

在旧版chrome实现flex布局 - 图18

参考文章

  1. http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

  2. https://www.zhangxinxu.com/wordpress/2010/12/css-box-flex%E5%B1%9E%E6%80%A7%EF%BC%8C%E7%84%B6%E5%90%8E%E5%BC%B9%E6%80%A7%E7%9B%92%E5%AD%90%E6%A8%A1%E5%9E%8B%E7%AE%80%E4%BB%8B/

  3. https://www.cnblogs.com/vince-cup/p/5983745.html