Fork me on GitHub

flex

Flex

Flex 容器:

首先,实现 flex 布局需要先指定一个容器,任何一个容器都可以被置顶为 flex 布局,这样容器内部的元素就可以使用 flex 来进行布局。

1
2
3
.container {
display: flex | inline-flex; //可以有两种取值
}

分别生成一个块状或行内的 flex 容器盒子。简单说来,如果你使用块元素如 div,你就可以使用 flex,而如果你使用行内元素,你可以使用 inline-flex。

需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。

有下面六种属性可以设置在容器上,它们分别是:

flex-direction
1
flex-direction: row(默认) | row-reverse | column | column-reverse;
flex-wrap
1
flex-wrap: nowrap(默认) | wrap | wrap-reverse;;
flex-flow
1
flex-flow: <flex-direction> || <flex-wrap>;
justify-content
1
justify-content: flex-start | flex-end | center(默认) | space-between | space-around;
align-items
1
align-items: flex-start | flex-end | center(默认) | baseline | stretch;
align-content
1
align-content: flex-start | flex-end | center(默认) | space-between | space-around | stretch;

Flex 项目属性:

有六种属性可运用在 item 项目上:

order
1
order: <integer>;
flex-grow
1
flex-grow: <number>;(默认 0)
flex-shrink
1
flex-shrink: <number>;(默认 1)
flex-basis
1
flex-basis: <length> | auto;(默认 auto)
flex
1
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] (默认 0 1 auto)
左边固定右边自适应时: flex:0 0 80px;即不伸缩,固定宽度80px;
flex:1 => 1 1 0%; flex:0 => 0 1 0%; flex: 0% => 1 1 0%;
align-self
1
align-self: auto | flex-start | flex-end | center | baseline | stretch;

补充

当 flex-wrap 为 wrap | wrap-reverse,且子项宽度和不及父容器宽度时,flex-grow 会起作用,子项会根据 flex-grow 设定的值放大(为0的项不放大)
当 flex-wrap 为 wrap | wrap-reverse,且子项宽度和超过父容器宽度时,首先一定会换行,换行后,每一行的右端都可能会有剩余空间(最后一行包含的子项可能比前几行少,所以剩余空间可能会更大),这时 flex-grow 会起作用,若当前行所有子项的 flex-grow 都为0,则剩余空间保留,若当前行存在一个子项的 flex-grow 不为0,则剩余空间会被 flex-grow 不为0的子项占据
当 flex-wrap 为 nowrap,且子项宽度和不及父容器宽度时,flex-grow 会起作用,子项会根据 flex-grow 设定的值放大(为0的项不放大)
当 flex-wrap 为 nowrap,且子项宽度和超过父容器宽度时,flex-shrink 会起作用,子项会根据 flex-shrink 设定的值进行缩小(为0的项不缩小)。但这里有一个较为特殊情况,就是当这一行所有子项 flex-shrink 都为0时,也就是说所有的子项都不能缩小,就会出现讨厌的横向滚动条
总结上面四点,可以看出不管在什么情况下,在同一时间,flex-shrink 和 flex-grow 只有一个能起作用,这其中的道理细想起来也很浅显:空间足够时,flex-grow 就有发挥的余地,而空间不足时,flex-shrink 就能起作用。当然,flex-wrap 的值为 wrap | wrap-reverse 时,表明可以换行,既然可以换行,一般情况下空间就总是足够的,flex-shrink 当然就不会起作用
-------------本文结束感谢您的阅读-------------