关于flex弹性盒模型布局的详细介绍

    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:主轴为垂直方向,起点在下端。


flex-direction四种值对应的情况显示图

2、flex-wrap

        flex-wrap属性决定项目在一行排不下的情况下是否换行,它可能有三种值。

        nowrap:默认值,不换行。

        wrap:换行,第一行在主轴开始方向,依次往主轴结束方向布置。

        wrap-reverse:换行,第一行在主轴结束方向,依次往主轴结束方向布置


flex-wrap值对应的情况显示图

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:每个项目两侧的间隔相等,所以项目之间间隔是项目与边框间隔的两倍。


justify-content值对应的情况显示图

5、align-items

    align-items属性定义了每行项目在侧轴方向上的对齐方式,它也可能有五个值。

    - flex-start:侧轴开始方向对齐。

    - flex-end:侧轴结束方向对齐。

    - center:侧轴居中对齐。

    - baseline:项目第一行文字的基线对齐

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


align-items值对应的情况显示图  

6、align-content

    align-content属性定义了容器在侧轴方向上有额外空间时,如何每排布一行,当容器只有一行时,它不起作用,它可能有六个值。

    flex-start:侧轴开始方向对齐。

    flex-end:侧轴结束方向对齐。

    center:侧轴中心中对齐。

    space-between:与侧轴两端对齐,每行轴线间隔平均。

    space-around:每根轴线两侧间隔相等。

    stretch:默认值,占满整个整个侧轴


align-content值对应的情况显示图


子容器(子元素的属性):

子容器(子元素)共有六个属性

1、order

2、flex-grow

3、flex-shrink

4、flex-basis

5、flex

6、align-self

order属性

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


order属性


flex-grow属性

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

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


flex-grow属性


flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足该项目将缩小。

负值对该属性无效,即该属性可能的值为0或正整数。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。


flex-shrink属性

flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main-size)。浏览器根据整个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。


flex-basis属性


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完全一致。


align-self属性



免责声明:文章部分内容和图片来自网络,本人尊重原创作者提供的优质文章,在这里向原创作者表示敬意和感谢,这篇文章只用于本人的知识学习,绝非用于其他商业等用途,如有侵权,请与本人联系,并将在第一时间删除!谢谢!(联系邮箱:290976801@qq.com)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 清晨不是被阳光刺醒的,晚上也难披着晚霞的余晖踏上归程。城市的清晨听不见鸡鸣,耳边只有刺耳的油烟机的轰鸣,被无情地从...
    易安yi阅读 328评论 3 1
  • 他们刚刚认识半年,感情很好,于是订了婚。 地震发生时,他正在洗澡,喊她拿自己的衣服来,准备穿上后两人逃跑。谁知就在...
    东归雀阅读 766评论 0 51
  • 这已经是陈年往事了…… 万籁俱寂,这时的人大都已酣然入梦,只余几点灯火。在灯火幽暗的房间之内,...
    临渊lx阅读 386评论 0 0
  • 一、普通卡顿现象 今天遇到一个问题,用导航栏push到一个空的控制器的时候,出现卡顿现象,用真机调试发现还是有卡顿...
    iLeooooo阅读 4,122评论 0 6