flex 左右布局_Flex布局

flex布局详解

作者: 郭政鸿 2020/9/1

2628ee6fdec27ba7ee06697f3f2c2645.png

前言: 早期的web主流的布局都是采用table布局, 然后就是div+float+position一把梭,H5 出来之后无非把div变成语义化标签. 但是有个css3规范里出了个非常好用的布局属性.没错,就是本文的主角flex.

c0b65cf4e1bc8d7cc9d1428265030eeb.png

先上个我画的思维导图,总览一下flex布局都包含了哪些属性.

目录

  • 一. flex容器的属性

    • 1) flex-direction属性

    • 2) flex-wrap属性

    • 3) flex-flow属性

    • 4) justify-content属性

    • 5) align-items属性

    • 6) align-content属性

  • 二. flex子元素的属性

    • 1) order属性

    • 2) flex-grow属性

    • 3) flex-shrink属性

    • 4) flex-basis属性

    • 5) flex属性

    • 6) align-self属性

  • 三. 小提示

一. flex容器的属性

1) flex-direction属性

语法flex-direction: row | row-reverse | column | column-reverse

flex-direction决定的是flex布局的方向,是横向(row)还是竖向(column)

首先我们得明白flex布局的顺序: 从左到右, 从上到下

04bb0dd1f2b8f50a960d2216e85d86c0.png

2) flex-wrap属性

语法flex-wrap: no-wrap | wrap | wrap-reverse

wrap: 空间不足时换行显示

no-wrap: 空间不足也不换行, 挤压元素

wrap-reverse: 与flex-direction定义的反方向换行

3) flex-flow属性

语法flex-flow: ||

这是flex-directionflex-wrap的缩写属性

demo:

.wrap {
 display: flex;
  flex-wrap: row-reverse wrap-reverse;
}
0a46482f360b2898a398d483ef4d6399.png

4) justify-content属性

语法justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;

直接上效果?:

flex-start
706502faf228b5eb5fd1e60c29658db3.png
flex-end
237211c55859dc5ab79dface6765dac2.png
center
be9f2e87baa5bb10de52805273ddcce6.png
space-between

两端对齐,多余空间在中间分配

7ad2c150841beb74fb1504d70a07bcb3.png
space-around

左右的间隙等于中间元素的间距的一半

32ed0563278833635cfd1cafb087d423.png
space-evenly

左右和中间的间隙都平均分配

18731916ab360a2d2d3d3b14b63fa474.png

5) align-items属性

语法align-items: stretch | flex-start | flex-end | center | baseline;

声明子元素在竖直方向上的对齐方式

stretch:

默认值,根据子元素的高度拉深

flex-start:

与文档流方向相关, 表现为顶部对齐

flex-end:

与文档流方向相关, 表现为底部对齐

center:

表现为竖直方向上居中对齐

baseline:

表现为所有flex子项都相对于flex容器的基线(字母x的下边缘)对齐。

6) align-content属性

和justify-content属性相似, 可以看做竖直方向上的justify-content, 但是需要注意一点, 当只有单行元素的时候align-conteng属性是不生效的.

二. flex子元素的属性

1) order属性

修改order值可以改变子元素的排列顺序.

语法order: 默认值0

.box3 {order: -1}
6aca35f7975a32697555b0fdc3267872.png
image-20200901002251678

2) flex-grow属性

grow是拓展的意思, 给元素设置后会按照flex-grow的属性值进行宽度拓展

语法flex-grow:; /* 数值,可以是小数,默认值是 0 */

可以把所有的剩余空间当做1, 如果所有元素的flex-grow值之和小于1,就按值分配空间,并不是必须占据完剩余空间.

如果所有元素的flex-grow值大于1, 则将剩余空间按各个元素的flew-grow值的比例进行分配剩余空间.

3) flex-shrink属性

和grow是相反的关系, grow是按照数值比例进行放大, shrink是按照一定数值比例进行收缩

语法 flex-shrink: / 数值,默认值是 1 /

参考flex-grow属性, 一个放大一个缩小的关系.

4) flex-basis属性

语法flex-basis:|auto / auto是默认值 /

默认值是auto,此时,元素的宽度受到以下属性影响, 同时设置flex-basiswidth内容宽度超过width设置值后, width是表现无效的.

  • box-sizing盒模型(默认是content-box);
  • width/min-width/max-width等宽度属性;
  • content内容(min-content最小宽度);

flex-basis属性除了接受数值,还接受关键字值

/* 根据flex子项的内容自动调整大小 */
flex-basis: content;

/* 内部尺寸关键字 */
flex-basis: fill;
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;

但是使用关键值属性时应该注意其浏览器兼容性

浏览器兼容性查询地址:

https://www.caniuse.com/

flex-basis属性的妙用, 替代min-widthmax-width实现小于指定大小自动等分换行布局

<style>.container {display: flex;flex-wrap: wrap;
}.item {flex-basis: 100px;flex-grow: 1;
}style>
<div class="container">
 <div class="item">div>
  <div class="item">div>
  <div class="item">div>
  <div class="item">div>
div>
0c5ba6e1281c07d84533bba76bd25c38.png
854f2c802e38cee5e74da8e127083e80.png
ce46365b227b4e5425fb5f293729de26.png

5) flex属性

flex属性是flex-growflex-shrinkflex-basis的缩写。

语法flex: none | auto | [ ? || ]

第一个属性值为: flex-grow, 第二第三个分别为: flex-shrinkflex-basis可省略

  • flex默认值等同于flex:0 1 auto
  • flex:none等同于flex:0 0 auto
  • flex:auto等同于flex:1 1 auto

6) align-self属性

align-self声明的是但那个元素的竖直方向上的对齐方式, 与align-item不同的是, align-item是多所有子元素同时设置。

语法align-self: auto | flex-start | flex-end | center | baseline | stretch;

三. 小提示

在Flex布局中,flex子元素的设置floatclear以及vertical-align属性都是没有用的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值