Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒模型提供最大的灵活性。弹性盒模型(flexible box)模块(目前是w3c候选的推荐)旨在提供一个更加有效的方式来布置,对齐和分布在容器之间的各项内容,即使它们的大小是未知或者动态变化的。·
弹性布局的主要思想是让容器有能力来改变项目的宽度和高度,以填满可用空间(主要是为了容纳所有类型的显示设备和屏幕尺寸)的能力。也就是说:Flex布局使得子项目能够"弹性"的改变其高宽, 自由填充容器剩余空间, 以适应容器变大, 或者压缩子项目自身, 以适应容器变小; 同时还可以方便的调节子项目方向和顺序. flex常用于高宽需要自适应, 或子项目大小成比例, 或水平垂直对齐等场景.
最重要的是弹性盒子布局与方向无关,相对于常规的布局(块是垂直和内联水平为基础),很显然,这些工作以及网页设计缺乏灵活性,无法支持大型和复杂的应用程序(特别当它涉及到改变方向,缩放、拉伸和收缩等)。
注意:由于flexbox是一个整体模块,而不是单一的一个属性,它涉及到了很多东西,包括它的整个属性集。它们之中有一些是在父容器上设置,而有一些则是在子容器上设置。
基本概念:Flex弹性盒模型里, 有容器和项目之分. 设置display:flex的为容器, 容器内的元素称作它的子项目, 容器有容器的一套属性, 子项目有子项目的另一套属性. (可以这么理解: father作为弹性盒子, 制定行为规范, son享受盒子的便利, 按照规范划分各自的"辖区").
flex container:采用Flex布局的元素,即父元素,称为Flex容器,简称容器。
flex item:父元素内包含的子元素,称为Flex项目,简称项目。
Flex是没有方向之分的,在Flex容器中默认存在两根轴,水平的轴为 主轴main axis,垂直的轴为 侧轴cross axis。(如果改变flex-direction,主轴和侧轴也将会改变)
主轴的开始位置(与边框的交叉点)叫做 main start ,结束位置叫做 main end 。
侧轴的开始位置叫做 cross start , 结束位置叫做 cross end 。
项目默认沿主轴方向排列,单个项目占据的主轴空间叫做 main size ,侧轴空间叫做 cross size 。
以上概念可以用下图全部展现:
基本上,项目将制定了以下任一主轴(从 main-start 到 main-end)或十字轴((从 cross-start 到 cross-end)。
注意:
1.css 列(CSS columns)在弹性盒子中不起作用·
2.float,clearandvertical-align在flex项目中不起作用
也就是说:设为Flex布局后,子元素的float、clear、vertical-align属性将失效。
首先介绍:
父容器(父元素)的属性
容器共有六个属性
1、flex-direction
flex-direction属性
flex-direction属性决定主轴的方向,它可能有四个值。
row:默认值,主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上端。
column-reverse:主轴为垂直方向,起点在下端。
2、flex-wrap
flex-wrap属性决定项目在一行排不下的情况下是否换行,它可能有三种值。
nowrap:默认值,不换行。
wrap:换行,第一行在主轴开始方向,依次往主轴结束方向布置。
wrap-reverse:换行,第一行在主轴结束方向,依次往主轴结束方向布置
3、flex-flow
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
4、justify-content
justify-content属性定义了项目在主轴上的对齐方式,它可能有五个值。
flex-start:默认值,主轴开始方向对齐。
flex-end:主轴结束方向对齐。
center:主轴居中对齐。
space-between:两端对齐,项目之间间隔都相等。
space-around:每个项目两侧的间隔相等,所以项目之间间隔是项目与边框间隔的两倍。
5、align-items
align-items属性定义了每行项目在侧轴方向上的对齐方式,它也可能有五个值。
- flex-start:侧轴开始方向对齐。
- flex-end:侧轴结束方向对齐。
- center:侧轴居中对齐。
- baseline:项目第一行文字的基线对齐
- stretch:默认值,如果项目未设置高度或高度设为auto,将占满整个容器。
6、align-content
align-content属性定义了容器在侧轴方向上有额外空间时,如何每排布一行,当容器只有一行时,它不起作用,它可能有六个值。
flex-start:侧轴开始方向对齐。
flex-end:侧轴结束方向对齐。
center:侧轴中心中对齐。
space-between:与侧轴两端对齐,每行轴线间隔平均。
space-around:每根轴线两侧间隔相等。
stretch:默认值,占满整个整个侧轴
子容器(子元素的属性):
子容器(子元素)共有六个属性
1、order
2、flex-grow
3、flex-shrink
4、flex-basis
5、flex
6、align-self
order属性
order属性定义项目的排列顺序,数值越小排列越靠前,默认为0,可能的值为任意整数。
flex-grow属性
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间也不放大。
如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍
flex-shrink属性
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足该项目将缩小。
负值对该属性无效,即该属性可能的值为0或正整数。
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
flex-basis属性
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main-size)。浏览器根据整个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
flex属性
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
该属性有两个快捷值:auto (1 1 auto)(既可以放大占满空间,也可缩小) 和 none (0 0 auto)(不可放大,也不可缩小)。
建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
align-self属性
align-self属性允许单个项目有与其他项目不一样的侧轴对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
其值除auto外,其他与align-items完全一致。
免责声明:文章部分内容和图片来自网络,本人尊重原创作者提供的优质文章,在这里向原创作者表示敬意和感谢,这篇文章只用于本人的知识学习,绝非用于其他商业等用途,如有侵权,请与本人联系,并将在第一时间删除!谢谢!(联系邮箱:290976801@qq.com)