CSS Flexbox

css3_flexbox_flex-wrap_nowrap.htm

CSS Flexbox 布局模块

在 Flexbox 布局模块(问世)之前,可用的布局模式有以下四种:

  • 块(Block),用于网页中的部分(节)
  • 行内(Inline),用于文本
  • 表,用于二维表数据
  • 定位,用于元素的明确位置

弹性框布局模块,可以更轻松地设计灵活的响应式布局结构,而无需使用浮动或定位。

浏览器支持

所有现代浏览器均支持 flexbox 属性。

Chrome Internet Explorer_Edge Firefox Safari Opera
29.0 11.0 22.0 10 48

Flexbox 元素

如需开始使用 Flexbox 模型,您需要首先定义 Flex 容器。

css3_flexbox.htm

上面的元素表示一个带有三个 flex 项目的 flex 容器(蓝色区域)。

实例

含有三个 flex 项目的 flex 容器:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div>3</div>
  5. </div>

父元素(容器)

通过将 display 属性设置为 flex,flex 容器将可伸缩:

css3_flexbox.htm

实例

  1. .flex-container {
  2. display: flex;
  3. }

以下是 flex 容器属性:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex-direction 属性

flex-direction 属性定义容器要在哪个方向上堆叠 flex 项目。

css3_flexbox_flex-direction_column.htm

实例

column 值设置垂直堆叠 flex 项目(从上到下):

  1. .flex-container {
  2. display: flex;
  3. flex-direction: column;
  4. }

实例

column-reverse 值垂直堆叠 flex 项目(但从下到上):

  1. .flex-container {
  2. display: flex;
  3. flex-direction: column-reverse;
  4. }

css3_flexbox_flex-direction_column-reverse.htm

实例

row 值水平堆叠 flex 项目(从左到右):

  1. .flex-container {
  2. display: flex;
  3. flex-direction: row;
  4. }

css3_flexbox_flex-direction_row.htm

实例

row-reverse 值水平堆叠 flex 项目(但从右到左):

  1. .flex-container {
  2. display: flex;
  3. flex-direction: row-reverse;
  4. }

css3_flexbox_flex-direction_row-reverse.htm

flex-wrap 属性

flex-wrap 属性规定是否应该对 flex 项目换行。

下面的例子包含 12 个 flex 项目,以便更好地演示 flex-wrap 属性。

css3_flexbox_flex-wrap_wrap.htm

实例

wrap 值规定 flex 项目将在必要时进行换行:

  1. .flex-container {
  2. display: flex;
  3. flex-wrap: wrap;
  4. }

实例

nowrap 值规定将不对 flex 项目换行(默认):

  1. .flex-container {
  2. display: flex;
  3. flex-wrap: nowrap;
  4. }

css3_flexbox_flex-wrap_nowrap.htm

实例

wrap-reverse 值规定如有必要,弹性项目将以相反的顺序换行:

  1. .flex-container {
  2. display: flex;
  3. flex-wrap: wrap-reverse;
  4. }

css3_flexbox_flex-wrap_wrap-reverse.htm

flex-flow 属性

flex-flow 属性是用于同时设置 flex-direction 和 flex-wrap 属性的简写属性。

实例

  1. .flex-container {
  2. display: flex;
  3. flex-flow: row wrap;
  4. }

css3_flexbox_flex-flow_row_wrap.htm

justify-content 属性

justify-content 属性用于对齐 flex 项目:

css3_flexbox_justify-content_center.htm

实例

center 值将 flex 项目在容器的中心对齐:

  1. .flex-container {
  2. display: flex;
  3. justify-content: center;
  4. }

实例

flex-start 值将 flex 项目在容器的开头对齐(默认):

  1. .flex-container {
  2. display: flex;
  3. justify-content: flex-start;
  4. }

css3_flexbox_justify-content_flex-start.htm

实例

flex-end 值将 flex 项目在容器的末端对齐:

  1. .flex-container {
  2. display: flex;
  3. justify-content: flex-end;
  4. }

css3_flexbox_justify-content_flex-end.htm

实例

space-around 值显示行之前、之间和之后带有空格的 flex 项目:

  1. .flex-container {
  2. display: flex;
  3. justify-content: space-around;
  4. }

css3_flexbox_justify-content_space-around.htm

实例

space-between 值显示行之间有空格的 flex 项目:

  1. .flex-container {
  2. display: flex;
  3. justify-content: space-between;
  4. }

css3_flexbox_justify-content_space-between.htm

align-items 属性

align-items 属性用于垂直对齐 flex 项目。

css3_flexbox_align-items_center.htm

在这些例子中,我们使用 200 像素高的容器,以便更好地演示 align-items 属性。

实例

center 值将 flex 项目在容器中间对齐:

  1. .flex-container {
  2. display: flex;
  3. height: 200px;
  4. align-items: center;
  5. }

实例

flex-start 值将 flex 项目在容器顶部对齐:

  1. .flex-container {
  2. display: flex;
  3. height: 200px;
  4. align-items: flex-start;
  5. }

css3_flexbox_align-items_flex-start.htm

实例

flex-end 值将弹性项目在容器底部对齐:

  1. .flex-container {
  2. display: flex;
  3. height: 200px;
  4. align-items: flex-end;
  5. }

css3_flexbox_align-items_flex-end.htm

实例

stretch 值拉伸 flex 项目以填充容器(默认):

  1. .flex-container {
  2. display: flex;
  3. height: 200px;
  4. align-items: stretch;
  5. }

css3_flexbox_align-items_stretch.htm

实例

baseline 值使 flex 项目基线对齐:

  1. .flex-container {
  2. display: flex;
  3. height: 200px;
  4. align-items: baseline;
  5. }

css3_flexbox_align-items_baseline.htm

注意:该例使用不同的 font-size 来演示项目已按文本基线对齐:

css3_flexbox_align-items_baseline_font-size.htm

align-content 属性

align-content 属性用于对齐弹性线。

在这些例子中,我们使用 600 像素高的容器,并将 flex-wrap 属性设置为 wrap,以便更好地演示 align-content 属性。

实例

space-between 值显示的弹性线之间有相等的间距:

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: space-between;
  6. }

css3_flexbox_align-content_space-between.htm

实例

space-around 值显示弹性线在其之前、之间和之后带有空格:

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: space-around;
  6. }

css3_flexbox_align-content_space-around.htm

实例

stretch 值拉伸弹性线以占据剩余空间(默认):

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: stretch;
  6. }

css3_flexbox_align-content_stretch.htm

实例

center 值在容器中间显示弹性线:

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: center;
  6. }

css3_flexbox_align-content_center.htm

实例

flex-start 值在容器开头显示弹性线:

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: flex-start;
  6. }

css3_flexbox_align-content_flex-start.htm

实例

flex-end 值在容器的末尾显示弹性线:

  1. .flex-container {
  2. display: flex;
  3. height: 600px;
  4. flex-wrap: wrap;
  5. align-content: flex-end;
  6. }

css3_flexbox_align-content_flex-end.htm

完美的居中

在下面的例子中,我们会解决一个非常常见的样式问题:完美居中。

css3_flexbox_perfect_center.htm

解决方案:将 justify-contentalign-items 属性设置为居中,然后 flex 项目将完美居中:

实例

  1. .flex-container {
  2. display: flex;
  3. height: 300px;
  4. justify-content: center;
  5. align-items: center;
  6. }

子元素(项目)

flex 容器的直接子元素会自动成为弹性(flex)项目。

css3_flexbox_item.htm

上面的元素代表一个灰色 flex 容器内的四个蓝色 flex 项目。

实例

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div>3</div>
  5. <div>4</div>
  6. </div>

用于弹性项目的属性有:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

order 属性

order 属性规定 flex 项目的顺序。

css3_flexbox_order.htm

代码中的首个 flex 项目不必在布局中显示为第一项。

order 值必须是数字,默认值是 0。

实例

order 属性可以改变 flex 项目的顺序:

  1. <div class="flex-container">
  2. <div style="order: 3">1</div>
  3. <div style="order: 2">2</div>
  4. <div style="order: 4">3</div>
  5. <div style="order: 1">4</div>
  6. </div>

flex-grow 属性

flex-grow 属性规定某个 flex 项目相对于其余 flex 项目将增长多少。

css3_flexbox_flex-grow.htm

该值必须是数字,默认值是 0。

实例

使第三个弹性项目的增长速度比其他弹性项目快八倍:

  1. <div class="flex-container">
  2. <div style="flex-grow: 1">1</div>
  3. <div style="flex-grow: 1">2</div>
  4. <div style="flex-grow: 8">3</div>
  5. </div>

flex-shrink 属性

flex-shrink 属性规定某个 flex 项目相对于其余 flex 项目将收缩多少。

css3_flexbox_flex-shrink.htm

该值必须是数字,默认值是 0。

实例

不要让第三个弹性项目收缩得与其他弹性项目一样多:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div style="flex-shrink: 0">3</div>
  5. <div>4</div>
  6. <div>5</div>
  7. <div>6</div>
  8. <div>7</div>
  9. <div>8</div>
  10. <div>9</div>
  11. <div>10</div>
  12. </div>

flex-basis 属性

flex-basis 属性规定 flex 项目的初始长度。

css3_flexbox_flex-basis.htm

实例

将第三个弹性项目的初始长度设置为 200 像素:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div style="flex-basis: 200px">3</div>
  5. <div>4</div>
  6. </div>

flex 属性

flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写属性。

实例

使第三个弹性项目不可增长(0),不可收缩(0),且初始长度为 200 像素:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div style="flex: 0 0 200px">3</div>
  5. <div>4</div>
  6. </div>

css3_flexbox_flex.htm

align-self 属性

align-self 属性规定弹性容器内所选项目的对齐方式。

align-self 属性将覆盖容器的 align-items 属性所设置的默认对齐方式。

在这些例子中,我们使用 200 像素高的容器,以便更好地演示 align-self 属性:

实例

把第三个弹性项目对齐到容器的中间:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div>2</div>
  4. <div style="align-self: center">3</div>
  5. <div>4</div>
  6. </div>

css3_flexbox_align-self_center.htm

实例

将第二个弹性项目在容器顶部对齐,将第三个弹性项目在容器底部对齐:

  1. <div class="flex-container">
  2. <div>1</div>
  3. <div style="align-self: flex-start">2</div>
  4. <div style="align-self: flex-end">3</div>
  5. <div>4</div>
  6. </div>

css3_flexbox_align-self_flex.htm

使用 Flexbox 的响应式图库

使用 flexbox 创建响应式图像库,该图像库根据屏幕大小在四幅、两幅或全宽图像之间变化:

css3_flexbox_image_gallery.htm

使用 Flexbox 的响应式网站

使用 flexbox 创建响应式网站,其中包含弹性导航栏和弹性内容:

css3_flexbox_website.htm

CSS Flexbox 属性

下表列出了与 flexbox 一起使用的 CSS 属性:

属性 描述
display 规定用于 HTML 元素的盒类型。
flex-direction 规定弹性容器内的弹性项目的方向。
justify-content 当弹性项目没有用到主轴上的所有可用空间时,水平对齐这些项目。
align-items 当弹性项目没有用到主轴上的所有可用空间时,垂直对齐这些项。
flex-wrap 规定弹性项目是否应该换行,若一条 flex 线上没有足够的空间容纳它们。
align-content 修改 flex-wrap 属性的行为。与 align-items 相似,但它不对齐弹性项目,而是对齐 flex 线。
flex-flow flex-direction 和 flex-wrap 的简写属性。
order 规定弹性项目相对于同一容器内其余弹性项目的顺序。
align-self 用于弹性项目。覆盖容器的 align-items 属性。
flex flex-grow、flex-shrink 以及 flex-basis 属性的简写属性。