FlexBox 使用向导

简介

Flexbox 布局模块提供一个容器,使其中的元素,可以采用更便捷的方法实现布局、对齐、分布间距等方式。甚至当大小不定时,可以自动伸缩(它们称为"flex")

它的思想主要是基于 flex layout,调整容器里的元素宽/高,填充合适空格(更多用于不同设备的屏幕的适配)。

基本述语

在了解 Flexbox 述语前,有必要先看看 CSS 中关于 inline-blockarrow-up-right 的介绍

Flexbox 是一个完整的模块,不是一个单一属性,它包含了很多设置属性。 它们中的一些被设置为容器(父元素,被称为 "flex container"),其它一些被设置为子元素(称为 "flex items")

对于规则的布局是基于两块之间的相对方向流线性布局,这个 flex layout 是基于 "flex-flow 方向"。 请看下图以更好解释它。

基本上它会基于主轴(从main-start 到 main-end)或交叉轴(从cross-start 到 cross-end)方向排列它们。

  • main axis flex容器的主轴主要用于排列它的元素。不过要注意,它不一定是水平方向,它依赖于 flex-direction 属性 (见下面说明)

  • main-start | main-end flex 容器里的元素放置从main-start 开始到 main-end 结束

  • main-size flex 元素的宽或高,有 width 与 height 属性

  • cross axis 与主轴相交的即为交叉轴。它的方向依赖与主轴方向

  • cross-start | cross-end Flex 基于 cross-start 与 cross-end 排列它的元素

  • cross size 一个 flex 元素的宽或高

容器

容器属性

display

定义一个 flex 容器,给定值指定是内联(inline)或者块(block)。它可以打开一个 flex 环境用来决定元素的填充方式。

flex-direction

决定主轴方向

  • row (默认): 从左到右

  • row-reverse: 从右到左

  • column: 从上到下

  • column-reverse: 从下到上

flex-wrap

默认情况下 flex 元素会在一行显示. 你可以更变属性决定折行与折行的方向

  • nowrap (默认): 单行

  • wrap: 折行

  • wrap-reverse: 反向折行

justify-content

决定如何在主轴上分布空白区域

  • flex-start (默认):基于 start line 排列

  • flex-end: 基于 end line 排列

  • center: 居中

  • space-between: 均匀的分布间距,第一个元素在首行,最后一个在未行

  • space-around: 均匀的分布空白区域在各元素周围

align-items

决定交叉轴的排列方式

  • flex-start

  • flex-end

  • center

  • baseline

  • stretch (默认)

align-content

类似于 justify-content ,交叉轴的内容排列

-- 如果只有一行时没有效果

  • flex-start

  • flex-end

  • center

  • space-between

  • space-around

  • stretch (默认)

元素

元素属性

order

默认情况下,flex 元素,按来源顺序排列和个元素,你也可以分别指定元素的 order 属性来重新排列出现的顺序。

flex-grow

决定各元素的你伸长比例,它是一个无符号单位。如果所有元素都设置为 1 ,它们将会是同一大小的排列在容器里。如果你给定一个值是2,那他会针对其他对象的两倍。

flex-basis

看这张图arrow-up-right

flex

快捷方式 flex-grow, flex-shrink and flex-basis 这三个属性。第二和第三个参数为可选, 默认为 0 1 auto

align-self

可以指定某个元素的排列行为,请参考 align-items 解释

示例

解决一个经常会遇到的问题:完美居中

其它相关资源

Facebook Css Layoutarrow-up-right

Flexbox in the CSS specificationsarrow-up-right

Flexplorer by Bennett Feelyarrow-up-right

Flexbox at MDNarrow-up-right

Flexbox at Operaarrow-up-right

Diving into Flexbox by Bocouparrow-up-right

Mixing syntaxes for best browser support on CSS-Tricksarrow-up-right

Flexbox by Raphael Goetter (FR)arrow-up-right

Last updated

Was this helpful?