使用Flex布局实现多行多列,每个列宽度相同

一、Flex布局实现多行多列

在前端布局中,Flexbox(弹性布局)是一个非常灵活的布局工具。通过设置父容器的 display: flexflex-wrap: wrap,可以让子元素在宽度不足时自动换行,从而实现多行布局。

示例

html 复制代码
<template>
  <div class="box-wrapper">
    <div v-for="item in 10" :key="item">{{ item }}</div>
  </div>
</template>

<style lang="scss" scoped>
.box-wrapper {
  width: 100vw;
  height: 100vh;
  border: 1px solid red;
  display: flex;
  flex-wrap: wrap;

  div {
    border: 1px solid;
    flex: 0 1 calc(100% / 3); /* 每行三列 */
  }
}
</style>
  • flex: 0 1 calc(100% / 3)

    • 0flex-grow 不放大

    • 1flex-shrink 可缩小(避免溢出)

    • calc(100% / 3)flex-basis,每个元素宽度为父容器的三分之一

  • flex-wrap: wrap → 允许子元素换行,形成多行布局


二、整除与不整除的情况

假设我们有 10 个子元素,每行三列:

  • 第一行:1 2 3

  • 第二行:4 5 6

  • 第三行:7 8 9

  • 第四行:10

注意:最后一行只有一个元素。

为什么最后一行宽度仍然和前面一致?

  • 每个元素宽度是 calc(100% / 3),固定宽度

  • 不管最后一行有几个元素,它的宽度 不会自动撑满剩余空间

  • 左侧空白不会影响元素自身宽度

这种方式可以保持所有元素宽度一致,布局整齐。

三、总结

  1. Flex布局多行多列核心 :父容器 flex-wrap: wrap + 子元素固定宽度 flex-basis

  2. 不整除情况:最后一行元素宽度依然固定,布局整齐,不需要自动伸长。

  3. 优点:简单、无需额外计算,兼容多行多列布局需求。

相关推荐
JELEE.18 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
TeleostNaCl20 小时前
解决 Chrome 无法访问网页但无痕模式下可以访问该网页 的问题
前端·网络·chrome·windows·经验分享
charlie11451419120 小时前
CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
css·笔记·学习·css3·教程
前端大卫21 小时前
为什么 React 中的 key 不能用索引?
前端
你的人类朋友1 天前
【Node】手动归还主线程控制权:解决 Node.js 阻塞的一个思路
前端·后端·node.js
小李小李不讲道理1 天前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻1 天前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
mapbar_front1 天前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰1 天前
纯flex布局来写瀑布流
前端·javascript·css
一袋米扛几楼981 天前
【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
前端·安全·xss