CSS Flex布局

flex布局的基本概念

Flexible Box模型,通常被称为flexbox,是一种一维的布局模型。它给flexbox的子元素之间提供了强大的空间分布和对齐能力。

flexbox的两根轴线

flex布局的所有属性都跟两根轴线有关,主轴和交叉轴,主轴由flex-direction定义,交叉轴垂直于主轴。

  1. 主轴

    主轴由flex-direction定义,可以取4个值:

    • row
    • row-reverse
    • column
    • column-reverse

    row和row-reverse,主轴则为水平方向,flexbox的子元素将按水平方向排列。

    column和column-reverse,主轴为垂直方向,flexbox的子元素将按照垂直方向排列。

  2. 交叉轴

    交叉轴垂直于主轴,所以主轴设置为row和row-reverse,交叉轴就是垂直方向的,反之亦然。

flex容器

文档中使用了flexbox的区域就叫做flex容器,我们可以将一个容器的display设置为flex来将其变为flexbox,之后,这个容器中所有的直系元素都会变为flex元素。 flex 容器中的所有 flex 元素都会有下列行为:

  • 元素排列为一行 (flex-direction 属性的初始值是 row)。
  • 元素从主轴的起始线开始。
  • 元素不会在主维度方向拉伸,但是可以缩小。
  • 元素被拉伸来填充交叉轴大小。
  • flex-basis 属性为 auto。
  • flex-wrap 属性为 nowrap。
  1. flex-direction(初始值为row):在 flex 容器中添加 flex-direction 属性可以让我们更改 flex 元素的排列方向。设置 flex-direction: row-reverse 可以让元素沿着行的方向显示,但是起始线和终止线位置会交换。
  1. flex-wrap(默认值为no-wrap):flexbox是一维模型,但是我们可以将其应用到多行中,在这样做时,应该将每一行看作一个新的flex容器,任何空间分布都将在该行上发生,而不影响该空间分布的其他行。flex-wrap就是实现多行效果的参数,它指定了flex元素单行显示(no-wrap)还是多行显示(wrap和wrap-reverse),如果是单行显示,那么在子元素超出容器时,首先会进行缩小,如果子元素无法缩小,那么子元素会溢出容器;而如果设置为多行显示,当子元素无法全部显示在一行,则会换行显示


  1. 简写属性 flex-flow

    我们可以将两个属性flex-direction和flex-wrap组合为间歇属性flex-flow,例如:

    .box {
     display: flex;
     flex-flow: row wrap;
    }
    
  2. align-items(默认值是stretch):

align-items 属性可以使元素在交叉轴方向对齐。常见取值:

  • stretch:弹性元素被在侧轴方向被拉伸到与容器相同的高度或宽度。
  • flex-start:使flex元素按flex顶部对齐。
  • flex-end:使flex元素按flex底部对齐。
  • center:使flex元素居中对齐。
  1. justify-content:

    justify-content属性用来使元素在主轴方向上对齐初始值是flex-start,元素从起始线开始排列(比如,flex-direction: row;起始线就是左边,flex元素就会从左至右依次排列);flex-end则是从终止线开始排列;center是在中间排列;space-around是将排列之后的空间均匀的分布在元素左右两边;space-between是将排列之后的空间均匀分布在元素之间。

flex元素上的属性

  1. flex-basis:

    flex-basis定义了该元素的空间大小,默认值为auto,浏览器会检测这个元素是否具有确定的尺寸,如果没有给元素设定尺寸,flex-basis的值采用元素内容的尺寸。

  2. flex-grow:

    flex-grow 若被赋值为一个正整数, flex 元素会以 flex-basis 为基础,沿主轴方向增长尺寸。

    flex-grow 属性可以按比例分配空间。如果第一个元素 flex-grow 值为2, 其他元素值为1,则第一个元素将占有2/4, 另外两个元素各占有1/4。

  3. flex-shrink:

    flex-grow属性是处理flex元素在主轴上增加空间的问题,相反flex-shrink属性是处理flex元素收缩的问题。如果我们的容器中没有足够排列flex元素的空间,那么可以把flex元素flex-shrink属性设置为正整数来缩小它所占空间到flex-basis以下。

  4. flex属性的简写:

    flex践行形式允许把三个数值按flex-grow、flex-shrink、flex-basis顺序书写。

    大多数情况下可以用预定义的简写形式。 在这个教程中你可能经常会看到这种写法,许多情况下你都可以这么使用。下面是几种预定义的值:

    • flex: initial
    • flex: auto
    • flex: none
    • flex: <positive-number>

    flex: initial 是把flex元素重置为Flexbox的初始值,它相当于 flex: 0 1 auto。在这里 flex-grow 的值为0,所以flex元素不会超过它们 flex-basis 的尺寸。flex-shrink 的值为1, 所以可以缩小flex元素来防止它们溢出。flex-basis 的值为 auto. Flex元素尺寸可以是在主维度上设置的,也可以是根据内容自动得到的。

    flex: auto 等同于 flex: 1 1 auto;和上面的 flex:initial 基本相同,但是这种情况下,flex元素在需要的时候既可以拉伸也可以收缩。

    flex: none 可以把flex元素设置为不可伸缩。它和设置为 flex: 0 0 auto 是一样的。元素既不能拉伸或者收缩,但是元素会按具有 flex-basis: auto 属性的flexbox进行布局。

    你在教程中常看到的 flex: 1 或者 flex: 2 等等。它相当于flex: 1 1 0。元素可以在flex-basis为0的基础上伸缩。

  5. order
    order属性定义项目的排列顺序,数值越小,排列越靠前

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

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