CSS Flexbox 生成器

生成 CSS
下一个

Flexbox 是一维布局的首选:卡片行、导航栏、居中英雄区、表单。容器与 item 模型很强大,但它的十几个属性会以不太直观的方式相互作用。这个生成器省去了配置容器的猜测:选择 flex-directionjustify-contentalign-itemsflex-wrapgap,就能得到一条干净、可直接复制到样式表的 CSS 规则。

如何生成 CSS

  1. 1

    选择方向

    选择 row、column 或反向变体。这会设置 flex-direction,即 item 排列的轴线。

  2. 2

    设置 justify-content

    选择 item 在主轴上如何分布:start、center、space-between、space-around 或 end。

  3. 3

    设置 align-items

    选择 item 在交叉轴上如何对齐:stretch、start、center 或 end。

  4. 4

    设置 gap 和 wrap

    以像素为单位添加 item 间距,并决定 item 是否换到新行。

  5. 5

    复制 CSS

    生成器输出包含所有属性的容器规则,可直接粘贴到样式表。

容器属性

属性 效果
flex-direction row / column / row-reverse / column-reverse 主轴
flex-wrap nowrap / wrap / wrap-reverse 是否换行
justify-content flex-start / center / flex-end / space-between / space-around / space-evenly 主轴分布
align-items flex-start / center / flex-end / baseline / stretch 每一行在交叉轴上的对齐
align-content 同上 + space-between / space-around 换行后多行在交叉轴上的分布
gap(row-gap, column-gap) 长度 item 之间的间距

Item 属性

属性 效果
flex-grow 0+(无单位) 吸收剩余空间的比例
flex-shrink 0+(无单位) 收缩的比例
flex-basis 长度或 auto grow/shrink 前的起始尺寸
flex 缩写(1 1 auto 等) 三个值一次设置
align-self auto / flex-start / center / flex-end / baseline / stretch 为单个 item 覆盖 align-items
order 整数 视觉重排,不改 DOM

flex: 1 小技巧

flex: 1flex: 1 1 0% 的缩写。它让 item:

  • 增长以填满可用空间(grow: 1)
  • 必要时收缩(shrink: 1)
  • 从 0 尺寸开始(basis: 0%)

要做等宽列,对每个 item 用 flex: 1 就能完美平分。对不应收缩到内容以下的侧栏,用 flex: 0 0 240px(不增长、不收缩、240px 起始)。

常见模式

居中英雄区

.hero {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

Logo 在左、链接在右的导航栏

.nav {
  display: flex;
  align-items: center;
  gap: 2rem;
}
.nav-links {
  margin-left: auto;  /* 推到右边 */
  display: flex;
  gap: 1rem;
}

响应式卡片行

.card-row {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}
.card {
  flex: 1 1 260px;  /* 增长/收缩,260px 起最小宽度,再窄就换行 */
}

输入 + 按钮(输入弹性,按钮固定)

.field {
  display: flex;
  gap: 0.5rem;
}
.field input {
  flex: 1;
}
.field button {
  flex: 0 0 auto;
}

Flexbox vs Grid

  • Flexbox:一个维度(行或列)。在 item 尺寸由内容驱动,或沿单一方向分配空间时最适用。
  • Grid:两个维度(带显式轨道的行和列)。布局同时具有行和列结构时最适用。

导航栏或一摞卡片:Flexbox。多行对齐的产品卡片网格:CSS Grid。许多真实页面两者都用,页面用 Grid,组件内部用 Flexbox。

常见坑

  • item 不填满容器:默认 align-items: stretch 只在 item 没有固定高度时生效。设了显式高度它就保持那个尺寸。
  • gap 不生效:检查浏览器支持。Flex gap 进来得晚;Safari <14.1 不支持。2024+ 已经普遍。
  • column flex 的子元素塌缩:flex column 默认 align-items: stretch,会把 item 拉伸到容器宽度。如果某个子元素设置了 width,它会突破出来。
  • order 仅视觉:屏幕阅读器和键盘导航跟随 DOM 顺序。不要用 order 让内容讲得通;只用于视觉打磨。

常见问题

二维页面布局(行和列同时存在)用 Grid。一维分布(导航栏、按钮行、堆叠)用 Flexbox。Grid 单元格内部,再用 Flexbox 做内部布局。多数复杂 UI 两者都用。

因为 flex-shrink 默认是 1,但 min-width 默认是 auto,等于内容宽度。给 item 设 min-width: 0(或 min-inline-size: 0),它就能收缩到固有尺寸以下。

在容器上写 display: flex; justify-content: center; align-items: center;。两行就覆盖了绝大多数「把这个东西居中」的场景。

能,在所有现代浏览器中都能。Safari 来晚了(14.1,2021 年 4 月加入);今天所有主流浏览器都支持。能用 gap 就别再用 margin 做间距,简单多了。

相关工具