掌握Flex布局:面向小白的Flex全面教程

129 阅读4分钟

为什么你需要学习Flex布局?

在传统布局中,垂直居中一个元素可能需要复杂的技巧,比如负边距或绝对定位。而Flex布局通过简单的属性设置,就能轻松解决这类问题。无论是导航菜单、卡片列表,还是表单对齐,Flex布局都能让代码更简洁、维护更高效。


核心概念:弹性容器与项目

1. 弹性容器

只需一行代码即可创建弹性容器:

.container {
  display: flex; /* 声明为弹性容器 */
}

所有直接子元素自动成为弹性项目,并遵循以下规则:

  • 主轴方向:默认水平排列(从左到右)
  • 自动伸缩:项目宽度默认压缩至内容大小,高度默认拉伸填满容器

2. 主轴与侧轴

  • 主轴(Main Axis):通过 flex-direction 控制方向
  • 侧轴(Cross Axis):始终与主轴垂直

六大核心属性解析

1. 主轴方向:flex-direction

.container {
  flex-direction: row;           /* 水平排列(默认) */
  flex-direction: column;        /* 垂直排列 */
  flex-direction: row-reverse;   /* 反向水平排列 */
}

学习笔记补充:
“切换轴的方向时,justify-contentalign-items的对齐方向会随之改变。”


2. 主轴对齐:justify-content

.container {
  justify-content: space-between;  /* 两端贴边,中间平分(常用) */
  justify-content: space-evenly;   /* 所有间隙完全均等(包括边框) */
  justify-content: center;         /* 居中无间隙 */
}

主轴对齐示意图


3. 侧轴对齐:align-items

.container {
  align-items: stretch;    /* 默认:拉伸填满容器高度 */
  align-items: center;     /* 垂直居中(最常用) */
  align-items: flex-start; /* 顶部对齐 */
}

学习笔记强调:
“若侧轴方向未设置高度,stretch会让项目高度等于容器高度。”


4. 弹性伸缩比:flex

.item {
  flex: 1; /* 占1份剩余空间 */
  flex: 2; /* 占2份剩余空间 */
}

实战场景:实现三栏布局(侧边栏固定,主内容自适应):

.sidebar { width: 200px; }
.main { flex: 1; } /* 占满剩余空间 */

5. 换行与多行对齐

.container {
  flex-wrap: wrap;          /* 允许换行 */
  align-content: space-between; /* 多行顶部与底部贴边 */
}

学习笔记提醒:
align-content只对多行布局生效,单行时请用align-items。”


6. 项目排序:order

.item:nth-child(1) { order: 2; } /* 显示在第二位 */
.item:nth-child(2) { order: 1; } /* 显示在第一位 */

order属性示意图


实战案例:多端发布功能卡片

代码解析(来自flex-test1.html)

<div class="boxs">
  <!-- 4个相同卡片 -->
  <div class="box">
    <div class="left">
      <i class="el-icon-share"></i> <!-- 图标 -->
    </div>
    <div class="right">
      <div class="top"><span class="big">一键多端发布</span></div>
      <div class="down"><span class="small">发布到多个视频平台</span></div>
    </div>
  </div>
</div>
.boxs {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-evenly; /* 卡片均匀分布 */
  align-content: space-evenly;   /* 行间距均匀 */
}

.box {
  display: flex;
  align-items: center; /* 图标与文字垂直居中 */
}

.right {
  flex-direction: column;  /* 文字垂直排列 */
  justify-content: center; /* 文字区域内部垂直居中 */
}

实现效果

  • 响应式适配:当容器宽度不足时自动换行
  • 视觉平衡:图标与文字始终保持对齐
  • 间距统一:卡片之间、卡片与边框的间距完全均等

image.png


Flex布局的常见误区

1. 忘记设置容器高度

/* 错误示例:垂直居中失效 */
.container {
  display: flex;
  align-items: center; 
  height: auto; /* 容器高度由内容撑开 */
}

/* 正确做法 */
.container {
  height: 300px; /* 明确高度 */
}

2. 混淆flex:1width:100%

.item {
  flex: 1;      /* 按比例分配剩余空间 */
  width: 100%;  /* 强制占满容器,可能破坏布局 */
}

最佳实践建议

  1. 移动端优先:Flex布局天然适配小屏幕

    .nav {
      display: flex;
      justify-content: space-around; /* 导航按钮均匀分布 */
    }
    
  2. 表单对齐:使用align-items: baseline对齐输入框

    .form-item {
      display: flex;
      align-items: baseline; /* 标签与输入框基线对齐 */
    }
    
  3. 复杂布局:嵌套使用Flex容器

    .card {
      display: flex;          /* 外层横向布局 */
    }
    .card-content {
      display: flex;
      flex-direction: column; /* 内层纵向布局 */
    }
    

总结

Flex布局通过容器属性项目属性的配合,解决了传统布局的三大痛点:

  1. 垂直居中困难
  2. 动态内容适配不灵活
  3. 多列对齐复杂

记住这个万能模板:

.container {
  display: flex;
  justify-content: center; /* 主轴居中 */
  align-items: center;     /* 侧轴居中 */
  flex-wrap: wrap;         /* 允许换行 */
}

尝试修改示例代码中的属性值,比如将justify-contentspace-evenly改为space-between,观察布局变化——这是掌握Flex布局最快的方式!