CSS Flexbox 生成器

可视化构建 CSS Flexbox 布局,配置弹性方向、换行、justify-content、align-items 等属性,实时预览。免费在线工具。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
选择 row、row-reverse、column 或 column-reverse,预览和 CSS 会立即更新。
选择 nowrap、wrap 或 wrap-reverse,控制子项是否形成多行。
输入 CSS 间距。一个值设置两个方向,两个值依次为行间距、列间距。空值使用 1rem,输入值不经校验。
设置 1–8 个预览子项。这会改变方框数量;导出的规则只包含容器属性。
对齐设置
选择子项沿 flex-direction 所定义主轴的空间分配方式。初始选项为 normal。
选择子项沿交叉轴的对齐方式。初始选项为 normal,设置的是容器属性。
选择换行后的各行沿交叉轴的对齐方式。nowrap 时不生效。初始选项为 normal。
复制含七条声明的完整 .container 规则。Ctrl/⌘+L 清空间距文本、CSS 和预览,保留下拉选项及子项数量。失败时可重试或手动选中 CSS。

阅读完整使用指南 CSS Flexbox 布局生成器:可视化配置弹性布局,一键导出 CSS
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

生成的规则里有什么

生成器输出一条 .container 规则,固定七条声明:display: flex、flex-direction、flex-wrap、justify-content、align-items、align-content 和 gap。粘贴到样式表后,把 .container 换成你自己的类名即可。每个属性都会写出来,即使是默认值,用不到的行可以直接删掉。

下拉框默认就是 CSS 初始值:row、nowrap,justify-content、align-items、align-content 为 normal。在弹性容器里,normal 在交叉轴上拉伸子项与换行后的各行,在主轴上从起点排列(CSS Box Alignment Level 3),所以这三行与不写效果相同。gap: 1rem 不一样:弹性容器的 gap 初始值是 normal,即 0,默认规则会在子项之间加 1rem 的间距,不需要就删掉这一行。默认输出如下:

.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: normal;
  align-items: normal;
  align-content: normal;
  gap: 1rem;
}

这条规则只作用于容器,子项上的 flex、order、align-self 都要自己补写。

示例一:移动端底部标签栏

手机页面底部常见“首页、分类、购物车、我的”四个标签。保持 row 和 nowrap,展开“对齐设置”,justify-content 选 space-around,align-items 选 center,间距填 0:

.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  justify-content: space-around;
  align-items: center;
  align-content: normal;
  gap: 0;
}

按对齐规则计算:容器宽 360px、四个标签各 60px 时,剩余空间是 120px。space-around 给每个标签两侧各留一半,四个标签的左边缘依次在 15、105、195、285px,两端只留 15px,标签之间是 30px。如果希望两端和中间的空隙一样大,改选 space-evenly,左边缘变成 24、108、192、276px,所有空隙都是 24px。align-items: center 让图标和文字高度不同的标签在竖直方向居中。

示例二:商品筛选标签自动换行

筛选栏里的“包邮”“满 300 减 40”“次日达”“七天无理由退货”这类标签,数量多时要能换到下一行。把 flex-wrap 改为 wrap,align-items 选 center,间距填 8px:

.container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: normal;
  align-items: center;
  align-content: normal;
  gap: 8px;
}

换行时,浏览器按每个标签不换行时的宽度把它们分到各行,放不下的整个移到下一行,所以标签内部的文字一般不会被拆开。只有一个标签本身比容器还宽时,才会在标签里面折行。gap: 8px 一个值同时设置行间距和列间距;想让行距大一些,可以写两个值,如 12px 8px(先行后列)。

nowrap 时中文标签会被压成一字一行

如果不开换行,空间不够时子项会收缩。弹性子项默认的最小宽度是 auto,按 CSS Flexbox Level 1 的规定,它等于内容能缩到的最小宽度。英文只能在单词之间断行,最小宽度是最长单词的宽度;中文几乎可以在任意两个字之间断行,最小宽度只有一个字。结果是,一行里放着一个固定宽度的元素和一个中文标签时,空间一紧,标签就会变成一字一行的竖条。

解决办法要看你希望谁让步:要让标签保持一行,在标签上加 flex-shrink: 0 或 white-space: nowrap,再让旁边的元素可以收缩;如果旁边也是固定宽度,内容就会超出容器。这类属性写在子项上,工具不生成,需要复制后自己补写。

限制

  • 只生成容器规则。flex-grow、flex-shrink、flex-basis、order、align-self 都没有控件。
  • justify-content 没有 stretch 和 start / end,align-content 没有 space-evenly,需要时在复制后的 CSS 里手动改。
  • 间距输入框不校验,无效值会照原样复制,浏览器会丢弃这条声明。
  • 预览子项数量为 1–8。
  • row-reverse 和 column-reverse 只改变显示顺序,键盘焦点和读屏软件仍按 HTML 顺序。

需要同时控制行和列时,用 CSS Grid 生成器。

Flexbox 与 Grid 的区别

一维布局(沿单行或单列排列子项)用 Flexbox;需要同时控制行和列的二维布局用 CSS Grid。实践中,Flexbox 擅长组件级布局(导航、按钮组、表单行),Grid 更适合页面级结构。

FAQ

什么是 CSS Flexbox?

CSS Flexbox(弹性盒布局)是一种一维布局模型,沿单轴(行或列)分配空间。适用于导航栏、工具栏、卡片行、居中元素以及任何需要沿单一方向灵活排列子项的 UI。

justify-content 和 align-items 有什么区别?

justify-content 控制主轴(由 flex-direction 定义的方向)上的对齐方式;align-items 控制交叉轴(垂直于主轴)上的对齐方式。对于行方向的 Flex 容器:justify-content 控制水平对齐,align-items 控制垂直对齐。

什么时候应该使用 flex-wrap?

默认情况下 flex-wrap 为 nowrap——所有子项保持在一行,必要时会收缩。设置 flex-wrap: wrap 可让子项无法容纳时换行。适合响应式卡片行或标签列表等在较窄宽度下需要重新排列的场景。

align-content 的作用是什么?

align-content 控制各行沿交叉轴的分布方式,只在 flex-wrap 设为 wrap 或 wrap-reverse 时有效。设为 wrap 的容器即使所有子项都在一行内也算多行容器,align-content 会移动这一行;nowrap 时无效。

Flexbox 中的 gap 属性是什么?

gap(row-gap 和 column-gap 的简写)设置 Flex 子项之间的间距,不会给容器外边缘添加 margin。该属性最初只用于 Grid;在 Flex 容器中,Chrome 84、Firefox 63、Safari 14.1 及以后版本支持。

我的设置会被发送或保存吗?

不会。CSS 在浏览器标签页里生成,所选的值、间距和子项数量不会发送到服务器,也不会写入浏览器存储。页面的统计只记录使用事件(工具名和动作:生成或复制),不包含你的设置。