Flex布局知识点总结

Flex布局
  • Flex是Flexible Box的缩写,顾名思义为“弹性布局”,用来为盒装模型提供最大的灵活性。任何一个容器都可以指定为Flex 布局。
  • 以前我们想要两个div横向排列需要设置浮动来完成,现在通过给父元素添加 display:flex; 属性可以实现盒子横向布局。
  • 需要注意的是,设为flex布局以后,子元素的float、clear和vertical-align属性将失效.

案例地址:https://github.com/pengjunshan/WebPJS/C3H5Flex

其它Web文章
HtmlCss基础学习第一章
CSS基础学习第二章
CSS浮动的使用和解决浮动的五种方法
CSS定位relative、absolute、fixed使用总结
原生开发WebApi知识点总结
开发中常用jQuery知识点总结
C3动画+H5知识点使用总结
ES6常用知识总结
Vue学习知识总结
开发环境到生产环境配置webpack
待续......

//任何一个容器都可以指定为Flex 布局。
.box{
    display:flex;
}
//内元素也可以使用Flex布局。
.box{
    display:inline-flex;
}
//webkit内核的浏览器,必需加上-webkit前缀
.box{
    display:-webkit-flex;
    display:flex;
}
主轴-交叉轴
  • 弹性容器:给元素添加display:flex后就是弹性容器。
  • 弹性属性:弹性容器中的所有子元素称为<弹性元素>,弹性元素永远沿主轴排列。

1.每个弹性容器都有两根轴:主轴(main axis)和交叉轴(cross axis),两轴之间成90度关系。注意:水平的不一定就是主轴。
2.每根轴都有起点和终点,这对于元素的对齐非常重要。
3.弹性元素也可以通过display:flex设置为另一个弹性容器,形成嵌套关系。因此一个元素既可以是弹性容器也可以是弹性元素。
4.弹性容器的两根轴非常重要,所有属性都是作用于轴的。下面从轴入手,将所有flex布局属性串起来理解。

1.弹性容器属性

属性 含义
flex-direction 主轴方向
flex-wrap 换行
flex-flow flex-direction和flex-wrap合写
justify-content 主轴上的对齐方式
align-items 交叉轴上的对齐方式(单行)
align-content 交叉轴上多行/多列对齐方式

2.弹性元素属性

属性 含义
order 顺序
flex-grow 放大比例(空间过多时)
flex-shrink 缩小比例(空间过少时)
flex-basis 固定尺寸
flex flex-grow和flex-shrink和flex-basis合写
align-self 自身的对齐方式,覆盖掉父级的align-items对齐方式
1.1 flex-direction属性

1.flex-direction属性决定主轴的方向(即项目的排列方向),方向不管怎么变,主轴和交叉轴的起点都是在一起的。
2.flex-direction:row | row-reverse | column | column-reverse;
3.弹性元素的排列方式也会发生改变,因为弹性元素永远沿主轴排列。

flex-direction的值

  • row(默认值):主轴为水平方向,起点在左端
  • row-reverse:主轴为水平方向,起点在右端
  • column:主轴为垂直方向,起点在上沿
  • column-reverse:主轴为垂直方向,起点在下沿
    row:主轴为水平方向,起点在左端。交叉轴为垂直方向,起点在上端。
row-两轴方向

row-reverse:主轴为水平方向,起点在有端。交叉轴为垂直方向,起点在上端。

row-reverse-两轴方向

column:主轴为垂直方向,起点在上端。交叉轴为水平方向,起点在左端。

column-两轴方向

column-reverse:主轴为垂直方向,起点在下端。交叉轴为水平方向,起点左端。

column-reverse-两轴方向
1.2 flex-wrap属性

默认情况下,项目都排在一条线(又称“轴线”)上。flex-wrap属性定义,如果一条轴线 排不下,如何换行?
flex-wrap: nowrap | wrap | wrap-reverse;

flex-wrap的值

  • nowrap:不换行,元素自动压缩
  • wrap:换行,向下换行
  • wrap-reverse:换行,向上换行

nowrap:不换行,弹性元素自动压缩

不换行元素自动压缩

wrap:换行:如果主轴在水平方向上,向下换行。如果主轴在垂直方向上,向右换行。

向下换行

wrap-reverse:换行:如果主轴在水平方向上,向上换行。如果主轴在垂直方向上,向左换行。

图片.png
1.3 flex-flow属性

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认 row nowrap。
flex-flow = flex-drection + flex-wrap;

1.4 justify-content属性

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

justify-content的值

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center:居中
  • space-between:两端对齐,项目之间的间隔都相等
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

    主轴上的对齐方式
1.5 align-items属性

注意:align-items属性定义项目在交叉轴上如何对齐。
align-items:flex-start | flex-end | center |baseline | stretch;
默认值是stretch,当元素没有设置具体尺寸或者auto时会将容器在交叉轴方向撑满(撑满整个容器)。

align-items的值:

  • flex-start:交叉轴的起点对齐
  • flex-end:交叉轴的终点对齐
  • center:交叉轴的中点对齐
  • baseline:项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

    交叉轴上的对齐方式
1.6 align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
也是在交叉轴上如何对齐;
align-content: flex-start | flex-end | center | space-between | space-around | stretch

align-content属性值:
+ stretch(默认值):轴线占满整个交叉轴。
+ flex-start:与交叉轴的起点对齐。
+ flex-end:与交叉轴的终点对齐。
+ center:与交叉轴的中点对齐。
+ space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
+ space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

align-content属性值
1.7 align-items和align-content的区别

两者差异总结:

  • 两者“作用域”不同
  • align-content管全局(所有行视为整体)
  • align-items管单行
结合效果
2.1 order属性

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

order属性
2.2 flex-grow属性

flex-grow属性定义项目的放大比例,默认值为0,即如果存在剩余空间,也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目为1,则牵着占据的剩余空间将比其他项多一倍;
无多余宽度时,flex-grow无效;

flex-grow属性
2.3 flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,改项目将缩小;
值为0时不缩放;
元素宽度总和没有大于容器宽度时,此属性无效;
第一个元素flex-shrik:0; 其它都是1,所以第一个元素不压缩,其它都等比压缩;

flex-shrink
2.4 flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。

  • flex-basis为auto:flex-basis为auto时,如设置了width则元素尺寸由width决定;没有设置则由内容决定
  • 宽度为0:width: 0 >完全没显示,flex-basis: 0 >根据内容撑开宽度
  • 宽度和flex-basis非0:数值相同时两者等效,同时设置,flex-basis优先级高
  • 改变主轴:将主轴方向改为上→下,此时主轴上的尺寸是元素的height,flex-basis == height

    查看源码
2.5 flex属性

flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为0 1 auto。

简写:

  • flex: 1 = flex: 1 1 0;
  • flex: 2 = flex: 2 1 0;
  • flex: auto = flex: 1 1 auto;
  • flex: none = flex: 0 0 auto; // 常用于固定尺寸 不伸缩

    flex
2.6 align-self属性

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

align-self值:

  • flex-start:交叉轴的起点对齐
  • flex-end : 交叉轴的终点对齐
  • center:交叉轴的中点对齐
  • baseline:项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容
align-self
总结
主轴方向、换行
缩放、顺序
对齐方式
案例

代码中详细注释,案例请到https://github.com/pengjunshan/WebPJS中查看

弹性容器案例





    
    
    
    Document
    


    
    
老大
老二
老三
老四
老五
老大
老二
老三
老四
老五
老六
老七
老八
老九
老十
老大
老二
老三
老四
老五
老六
老七
老八
老九
老十
老大
老二
老三
老四
老五
老大
老二
老三
老四
老五
老大
老二
老三
老四
老五
老六
老七
老八
老九
老十

弹性元素案例





    
    
    
    Document
    



    
    
老大
老二
老三
老四
老五
老大
老二
老三
老大
老二
老三
老四
老五
老六
老七
老八
老九
老十
老九
老十
老大
老二
老三
老四
老五
老六
老七
老八
老九
老十
老九
老十
老大
老二
老三
老四
老大
老二
老三
老四

版权声明:
作者:倾城
链接:https://www.techfm.club/p/23953.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>