都 2025 年了,还不会 Flex 布局?

642 阅读3分钟

大家好,我是前端架构师,关注微信公众号【程序员大卫】免费领取前端精品资料。

背景

在早期,我们主要依靠传统 CSS 技巧(比如使用 float 或者 vertical-align)来实现网页布局,那时的做法显得又麻烦又不直观。到了 2025 年,Flex 布局已经在 PC 和移动端得到了广泛支持,极大地简化了布局开发。

提示: 虽然 Grid 布局在 PC 端的兼容性非常好,但在移动端还有待完善。关于 Grid 的更多内容,我们会在后续文章中详细介绍。

1. 元素垂直居中对齐

旧方法:

以前,我们常用 vertical-align: middle; 来实现内联元素的垂直居中,但这种方法要求元素必须是 inline-blockinline,并且需要额外调整。

<style>
  img {
    border: 1px solid red;
  }
  img,
  .text {
    display: inline-block;
    vertical-align: middle;
  }
</style>
<div class="box">
  <img src="./images/logo.svg" />
  <div class="text">Hello</div>
</div>

Flex 方法:

现在只需简单设置父元素为 Flex 布局,并使用 align-items: center; 即可轻松实现垂直居中。

<style>
  .box {
    display: flex;
    align-items: center;
  }
</style>

2. 元素两端对齐

旧方法:

过去常使用 float 实现左右两端对齐,代码略显冗长,并且有时需要处理浮动带来的问题(如父容器高度塌陷)。

<style>
  .box {
    border: 1px solid red;
    overflow: hidden;
  }
  img {
    float: left;
  }
  .text {
    float: right;
  }
</style>

Flex 方法:

利用 Flex 布局,只需一行代码 justify-content: space-between; 就能轻松实现两端对齐。如果还需要垂直居中,只需额外添加 align-items: center;

.box {
  border: 1px solid red;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

3. 纵向排列的元素水平居中

旧方法:

如果页面内容垂直排列(例如:图片下方的文本),需要分别对图片和文本单独设置居中样式。

<style>
  .box {
    border: 1px solid red;
  }

  img {
    display: block;
    margin: 0 auto;
  }

  .text {
    text-align: center;
  }
</style>
<div class="box">
  <img src="./images/logo.svg" />
  <div class="text">Hello</div>
</div>

Flex 方法:

将容器设置为 Flex 布局,并将主轴方向设为垂直(flex-direction: column;),再使用 align-items: center; 即可实现所有子元素水平居中。

.box {
  display: flex;
  flex-direction: column;
  align-items: center;
}

4. 等分容器空间

旧方法:

通常需要借助 JavaScript 动态计算容器内子元素的宽度,比较繁琐。

const items = document.querySelectorAll('.item');
const containerWidth = document.querySelector('.box').offsetWidth;
items.forEach(item => {
  item.style.width = (containerWidth / items.length) + 'px';
});

Flex 方法:

只需为子元素设置 flex: 1;,它们会自动平分父容器的可用空间。

<style>
  .box {
    display: flex;
  }
  .item {
    flex: 1;
    border: 1px solid red;
  }
</style>
<div class="box">
  <div class="item">item-1</div>
  <div class="item">item-2</div>
  <div class="item">item-3</div>
</div>

5. 圣杯布局(三栏自适应)

场景:常见的三栏布局——左右两侧固定宽度,中间区域自适应。

利用 Flex 布局,这种布局实现起来也十分简单:

<style>
  .container {
    display: flex;
    height: 100%;
  }
  .left,
  .right {
    flex: 0 0 200px; /* 固定宽度 */
  }
  .left {
    background: red;
  }
  .right {
    background: yellow;
  }
  .center {
    flex: 1; /* 自适应宽度 */
    background: blue;
  }
</style>
<div class="container">
  <div class="left"></div>
  <div class="center"></div>
  <div class="right"></div>
</div>

总结

通过以上示例,你可以看到 Flex 布局如何大幅简化 CSS 布局的书写,让开发者专注于业务逻辑而不是处理繁琐的布局计算。无论是元素对齐、居中还是复杂的三栏布局,Flex 都能为你提供优雅的解决方案。

最后

点赞👍 + 关注➕ + 收藏❤️ = 学会了🎉。

更多优质内容关注公众号,@前端大卫。