Flex 布局完全指南:从基础属性到实战技巧

1. 什么是 Flex 布局?

Flex 布局是 CSS3 中一种强大的布局模型,旨在为容器内的项目提供更有效、更灵活的排列、对齐和分配空间的方式,Flex 布局的核心思想是赋予容器改变其子元素(称为 Flex 项目)的宽度、高度和顺序的能力,以最佳方式填充可用空间。它特别适合构建一维布局(行或列),能够轻松解决传统布局中常见的垂直居中、等高等难题。

2. Flex 容器与项目

要使用 Flex 布局,首先需要将一个元素的display属性设置为flex。这个元素就成为了Flex 容器,其直接子元素自动成为Flex 项目

.container{display:flex;}

3. 核心属性

3.1 flex-direction:主轴方向

flex-direction属性定义了 Flex 项目在容器内的排列方向,即主轴的方向。

  • row(默认值):主轴为水平方向,从左往右。
    .container{flex-direction:row;}
  • row-reverse:主轴为水平方向,从右往左。
    .container{flex-direction:row-reverse;}
  • column:主轴为垂直方向,从上往下。
    .container{flex-direction:column;}
  • column-reverse:主轴为垂直方向,从下往上。
    .container{flex-direction:column-reverse;}

3.2 justify-content:主轴对齐

justify-content属性定义了 Flex 项目在主轴上的对齐方式。

  • flex-start(默认值):项目向主轴起点对齐。
    .container{justify-content:flex-start;}
  • flex-end:项目向主轴终点对齐。
    .container{justify-content:flex-end;}
  • center:项目在主轴上居中对齐。
    .container{justify-content:center;}
  • space-between:两端对齐,项目之间的间隔相等。
    .container{justify-content:space-between;}
  • space-around:每个项目两侧的间隔相等,所以项目之间的间隔比项目与边框的间隔大一倍。
    .container{justify-content:space-around;}

3.3 align-items:交叉轴单行对齐

align-items属性定义了 Flex 项目在交叉轴(与主轴垂直的轴)上如何对齐(适用于单行情况)。

  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
    .container{align-items:stretch;}
  • flex-start:项目向交叉轴的起点对齐。
    .container{align-items:flex-start;}
  • flex-end:项目向交叉轴的终点对齐。
    .container{align-items:flex-end;}
  • center:项目在交叉轴上居中对齐。
    .container{align-items:center;}
  • baseline:项目根据它们的基线对齐。
    .container{align-items:baseline;}

3.4 align-content:交叉轴多行对齐

align-content属性定义了多行Flex 项目在交叉轴上的对齐方式。当容器只有一行时,此属性不起作用。

  • stretch(默认值):多行拉伸以平分剩余空间。
    .container{align-content:stretch;}
  • flex-start:多行向交叉轴的起点对齐。
    .container{align-content:flex-start;}
  • flex-end:多行向交叉轴的终点对齐。
    .container{align-content:flex-end;}
  • center:多行在交叉轴上居中对齐。
    .container{align-content:center;}
  • space-between:交叉轴上两端对齐,行之间的间隔相等。
    .container{align-content:space-between;}
  • space-around:每行两侧的间隔相等,所以行之间的间隔比行与边框的间隔大一倍。
    .container{align-content:space-around;}

3.5 align-self:单个项目交叉轴对齐

align-self属性允许单个 Flex 项目有与其他项目不一样的对齐方式,可覆盖容器的align-items属性。它作用于Flex 项目上。

  • auto(默认值):继承父容器的align-items属性。
    .item{align-self:auto;}
  • stretch:拉伸以填满容器交叉轴方向。
    .item{align-self:stretch;}
  • flex-start:向交叉轴起点对齐。
    .item{align-self:flex-start;}
  • flex-end:向交叉轴终点对齐。
    .item{align-self:flex-end;}
  • center:在交叉轴上居中对齐。
    .item{align-self:center;}
  • baseline:根据基线对齐。
    .item{align-self:baseline;}

4. 实战示例与技巧

<divclass="container"><div>我是垂直居中的内容</div></div>
.container{display:flex;justify-content:center;/* 主轴居中 */align-items:center;/* 交叉轴居中 */height:300px;border:1px solid #ccc;}

5. 总结

Flex 布局通过一套直观的属性,极大地简化了 CSS 布局。记住这个核心关系:

  • 容器属性控制整体排列:flex-direction,justify-content,align-items,align-content,flex-wrap
  • 项目属性控制个体行为:flex(复合属性),align-self,order

掌握flex-direction确定方向,用justify-contentalign-items解决大部分对齐问题,再用flex属性灵活分配空间。