flex布局实现水平和垂直对齐

1. 概述

align-items: center 和 justify-content: center 是 CSS Flex 布局(弹性布局)中用于控制子元素对齐方式的核心属性,二者搭配使用可实现子元素在 flex 容器内水平+垂直双方向居中,是前端开发中最常用的居中布局方案之一。

前置条件

使用这两个属性的前提是:给父容器设置 display: flex;(开启 Flex 布局),否则属性不生效。

2. 核心概念:Flex 布局的轴

Flex 布局包含两个基础轴,理解轴的概念是掌握这两个属性的关键:

轴类型 默认方向 作用范围
主轴(Main Axis) 水平方向(左→右) justify-content 作用轴
交叉轴(Cross Axis) 垂直方向(上→下) align-items 作用轴

提示:可通过 flex-direction 修改主轴方向(如 flex-direction: column 会将主轴改为垂直方向),此时两个属性的作用方向也会同步变化。

3. 属性详细说明

3.1 justify-content: center

作用

控制 flex 容器内子元素在主轴方向 上的对齐方式,center 值表示子元素在主轴上居中对齐。

默认场景(主轴水平)

当容器未修改 flex-direction 时,justify-content: center 实现子元素水平居中。

语法

css 复制代码
.container {
  display: flex;
  justify-content: center; /* 主轴居中 */
}

3.2 align-items: center

作用

控制 flex 容器内子元素在交叉轴方向 上的对齐方式,center 值表示子元素在交叉轴上居中对齐。

默认场景(交叉轴垂直)

当容器未修改 flex-direction 时,align-items: center 实现子元素垂直居中。

语法

css 复制代码
.container {
  display: flex;
  align-items: center; /* 交叉轴居中 */
}

3.3 组合使用(最常用)

效果

子元素在 flex 容器内水平+垂直完全居中。

完整示例代码

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Flex 居中示例</title>
  <style>
    /* flex容器 */
    .flex-container {
      width: 500px;       /* 容器宽度 */
      height: 300px;      /* 容器高度 */
      background-color: #f5f5f5;
      border: 1px solid #ddd;
      
      /* 核心居中样式 */
      display: flex;              /* 开启Flex布局 */
      justify-content: center;    /* 水平居中(主轴) */
      align-items: center;        /* 垂直居中(交叉轴) */
    }

    /* flex子元素 */
    .flex-item {
      font-size: 20px;
      padding: 20px 40px;
      background-color: #42b983;
      color: white;
      border-radius: 8px;
    }
  </style>
</head>
<body>
  <div class="flex-container">
    <div class="flex-item">我是居中的子元素</div>
  </div>
</body>
</html>

示例效果

  • 绿色的子元素会精准显示在灰色容器的正中心;
  • 无论子元素内容多少,居中效果始终生效。

4. 特殊场景:修改主轴方向

当设置 flex-direction: column(主轴改为垂直方向)时,两个属性的作用方向会互换:

css 复制代码
.flex-container {
  display: flex;
  flex-direction: column; /* 主轴改为垂直方向 */
  justify-content: center;/* 垂直居中(主轴变为垂直) */
  align-items: center;    /* 水平居中(交叉轴变为水平) */
  width: 500px;
  height: 300px;
  background-color: #f5f5f5;
}

5. 常见注意事项

  1. align-items 和 justify-content 是给 flex 容器设置的属性,不是给子元素设置;
  2. 如果 flex 容器未设置固定高度(或高度由内容撑开),align-items: center 垂直居中效果会不明显;
  3. 多个子元素时,二者仍会让所有子元素整体在容器内居中(子元素之间默认沿主轴排列)。

6. 兼容性

  • 支持所有现代浏览器(Chrome、Firefox、Safari、Edge);
  • 兼容 IE 10+(IE 9 及以下不支持 Flex 布局)。
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端