css的flex布局

237 阅读3分钟

Flex布局的意义


怎样通过CSS实现垂直居中,由于float布局没有float:center的写法,要实现水平居中可以使用 margin: 0 auto,要求一个父元素里面的两个子元素垂直居中对齐得自己计算margin。但是要求两个未知高度的东西对齐float布局很难解决

flex基本语法


使用 flex 布局首先要设置父容器display:flex,display:inline-flex;两者的区别和inline与block的区别一样flex会另起一行,inline-flex不会另起一行。容器包括外层父容器和内层的子容器,轴包括主轴和交叉轴。

与文档流不同container里的item的流动方向由container控制,大致有四种流动方向

container的语法


主轴语法

  1. 主轴方向:flex-direction:row|row-reverse|colum|colum—reverse;效果依次如上图,其中默认属性为row;
  2. flex-warp:warp|nowarp|warp-reverse;控制是否折行,类比正常文档流块元素放不下时会自动折行这就是warp属性,nowarp会在放不下时压缩子元素。默认属性为nowarp。warp-reverse从底下开始
  3. 主轴的对齐方向默认主轴为横轴除非用flex-direction改变,用justify-content改变,该属性是在里面item未完全利用空间时使用的。justify-content:flex-start|flex-end|center;分别是在主轴开始,主轴结尾,居中。以及不常用的三种

space-around特点每一块item都被两个空白块围绕,空白块面积一致
space-evenly特点每个item之间的空隙大小一样。注意区分区别

次轴语法

  1. 当item高度不一样时才有次轴,用align-items
  2. 多行内容,行与行之间的分布用align-content

item语法


  1. 给item加顺序,默认order为0 .item:first-child{order:100;}

2. 给item加flex-grow,默认值为1,数值越大空间越大;但是只给一个item写flex-grow那么其他item相当于0
3. 给item加flex-shrink当container开始缩小时item的变化,当items未指定大小时items永远都是够得所以会一起缩小,空间不够时items才会开始缩;一般情况logo和导航一开始就是最小的所以shrink 0防止缩小。默认shrink是1
4. flex-basis设置基准大小,表示在不伸缩的情况下子容器的原始尺寸,默认为auto
5. 定制align-items,给单独的items加上align-self:值;改变单独的items纵轴方向

flex相关

  1. 原来items是块元素在给父元素display:flex后items就表现成了内联元素,所以colum方向的宽度是尽量缩小的。
  2. 如果一个container里面有两个items,可以使justify-content来左右分布也可以对第二个item加margin-left:auto;
  3. 关于三栏内容布局一般两边是宽度固定中间适应,中间用flex-grow实现
  4. 平均布局仍要使用负margin
  5. 尽量不要把width和height写死,除非有特殊要求,但是在pc上写的页面一般是写死的。一般情况会使用min-width这样页面拉大时会响应,变小时页面超出的部分不会显示。

参考

juejin.cn/post/684490…