---
title: Flex List
description: Flex List
---

Field-level catalog tables below stay in English — they match the machine design schema used by the editor, API, and MCP.

Decoration and visibility use [Decoration & visibility (BlockShell)](/en/design/shared-concepts/block-shell).

> Preferred flex layout for slot children (no columns array). The editor `listLayout` control writes per-breakpoint maps (not a single enum): flexDirectionByBreakpoint, gapByBreakpoint, justifyContentByBreakpoint, alignItemsByBreakpoint, flexWrapByBreakpoint. Use Item order (itemOrderByChildId) to change child CSS order by breakpoint without moving blocks in the canvas. Prefer over legacy RowBlock for new designs (including email chrome).

## Fields

### `content`

Main content payload. Shape depends on the block: nested slot blocks, rich-text HTML, or body copy.

```
content: []
```

### `listLayout`

_Editor-only control — does not persist its own value._

Editor-only control. Persists flexDirectionByBreakpoint, gapByBreakpoint, justifyContentByBreakpoint, alignItemsByBreakpoint, flexWrapByBreakpoint — not a stored listLayout string.

```
flexDirectionByBreakpoint: { mobile: "column", desktop: "row" }
gapByBreakpoint: { mobile: 12, desktop: 24 }
justifyContentByBreakpoint: { desktop: "flex-start" }
alignItemsByBreakpoint: { desktop: "stretch" }
flexWrapByBreakpoint: { desktop: "wrap" }
```

### `itemOrder`

_Editor-only control — does not persist its own value._

Editor-only Flex List Item order control. Does not persist as itemOrder — writes itemOrderByChildId.

```
// Writes:
itemOrderByChildId: { "HeadingBlock-1": { mobile: 2, desktop: 0 } }
```

### `layout`

#### `flexDirectionByBreakpoint`

Flex direction per breakpoint id (row | column | row-reverse | column-reverse).

```
layout: {
  flexDirectionByBreakpoint: { mobile: "column", desktop: "row" }
}
```

#### `gapByBreakpoint`

Gap in px per breakpoint.

```
layout: {
  gapByBreakpoint: { mobile: 12, desktop: 24 }
}
```

#### `itemOrderByChildId`

Map of child Puck id → breakpoint id → CSS order. Omitted ids keep source order. Web-only (email keeps DOM order).

```
layout: {
  itemOrderByChildId: { "HeadingBlock-1": { mobile: 2, desktop: 0 } }
}
```

<details><summary>Default props</summary>

```json
{
  "content": [],
  "layout": {
    "flexWrapByBreakpoint": {
      "mobile": false,
      "desktop": false
    },
    "gapByBreakpoint": {
      "mobile": 8,
      "desktop": 8
    },
    "justifyContentByBreakpoint": {},
    "alignItemsByBreakpoint": {}
  },
  "shell": {
    "customizeEnabled": false,
    "pointerEvents": "auto",
    "decorationBySelector": {},
    "visibility": {
      "showOnBreakpoints": {},
      "showOnLocales": {},
      "authVisibility": "all",
      "routeLockVisibility": "all",
      "roleVisibility": [],
      "entryActionVisibility": "all",
      "queryPageVisibility": "all",
      "hideWhenEmpty": ""
    },
    "anchor": {
      "anchorId": "",
      "anchorKey": ""
    },
    "box": {
      "padding": "none",
      "paddingEnabled": false,
      "marginsEnabled": false,
      "sizeByBreakpoint": {},
      "positionEnabled": false,
      "positionByBreakpoint": {}
    },
    "background": {
      "backgroundEnabled": false,
      "backgroundWidth": "page",
      "backgroundKind": "solid",
      "backgroundColorLight": "",
      "backgroundColorDark": "",
      "gradientType": "linear",
      "gradientAngle": 180,
      "gradientColors": [
        {
          "light": "",
          "dark": "",
          "offset": 50
        },
        {
          "light": "",
          "dark": "",
          "offset": 50
        }
      ],
      "gradientColor1Light": "",
      "gradientColor1Dark": "",
      "gradientColor2Light": "",
      "gradientColor2Dark": "",
      "backgroundImageSrc": "",
      "backgroundImageMode": "cover",
      "backgroundRepeatSize": 100,
      "backgroundPosition": "center",
      "backgroundMotionEnabled": false,
      "backgroundMotionDirectionDeg": 0,
      "backgroundMotionSpeed": 20,
      "backgroundMotionRotateDegPerSec": 0,
      "backgroundVideoSrc": "",
      "backgroundVideoFit": "cover",
      "backgroundVideoLoop": true,
      "backgroundVideoRepeatSize": 100,
      "backgroundAnimationMode": "particle",
      "backgroundAnimShape": "circle",
      "backgroundAnimSvgSrc": "",
      "backgroundAnimColorMode": "solid",
      "backgroundAnimColorLight": "#ffffff88",
      "backgroundAnimColorDark": "#ffffff66",
      "backgroundAnimSize": 12,
      "backgroundAnimJitter": 0.2,
      "backgroundParticleCount": 40,
      "backgroundParticleLifetimeSec": 4,
      "backgroundParticleSpeed": 40,
      "backgroundParticleAnimType": "fade",
      "backgroundParticleFromSide": "left",
      "backgroundParticleToSide": "right",
      "backgroundGridStyle": "cells",
      "backgroundGridMotionDirectionDeg": 0,
      "backgroundGridMotionSpeed": 0,
      "backgroundGridRotateDegPerSec": 0,
      "backgroundGridHoverGrowLimitPct": 50,
      "backgroundGridHoverRotateLimitDeg": 0,
      "backgroundGridReactionTimeSec": 1,
      "backgroundGridHoverGrow": true,
      "backgroundGridHoverRotate": false,
      "backgroundGridHoverColor": false,
      "backgroundGridHoverColorLight": "#ffffff55",
      "backgroundGridHoverColorDark": "#ffffff33",
      "backgroundGridReactionSpeed": 1,
      "backgroundBackdropEnabled": false,
      "backgroundBackdropBlurPx": 0,
      "backgroundBackdropBrightness": 1,
      "backgroundBackdropContrast": 1,
      "backgroundBackdropSaturate": 1,
      "backgroundBackdropGrayscale": 0,
      "backgroundBackdropSepia": 0,
      "backgroundBackdropHueRotateDeg": 0
    },
    "border": {
      "borderEnabled": false,
      "borderColorLight": "",
      "borderColorDark": "",
      "borderStyle": "solid"
    },
    "shadow": {
      "shadowEnabled": false,
      "shadowValueLight": "",
      "shadowValueDark": ""
    },
    "effects": {
      "effectsEnabled": false,
      "opacity": 1,
      "filterBlurPx": 0,
      "filterBrightness": 1,
      "filterContrast": 1,
      "filterSaturate": 1,
      "filterGrayscale": 0,
      "filterSepia": 0,
      "filterHueRotateDeg": 0,
      "filterDropShadowOffsetX": 0,
      "filterDropShadowOffsetY": 0,
      "filterDropShadowBlur": 0,
      "filterDropShadowColorLight": "",
      "filterDropShadowColorDark": "",
      "mixBlendMode": "normal"
    },
    "scrollAnimation": {
      "scrollAnimationEnabled": false,
      "scrollAnimationType": "fadeIn",
      "scrollAnimationDuration": 600,
      "scrollAnimationDelay": 0
    },
    "cursorTilt": {
      "cursorTiltEnabled": false,
      "cursorTiltIntensity": 12
    },
    "wander": {
      "wanderEnabled": false,
      "wanderSpeed": 40,
      "wanderJitter": 40,
      "wanderTurnRadius": 50,
      "wanderTurnSmoothness": 40,
      "wanderLimits": "parent"
    },
    "transform": {
      "transformEnabled": false,
      "transformRotateX": 0,
      "transformRotateY": 0,
      "transformRotateZ": 0,
      "transformTranslateX": 0,
      "transformTranslateY": 0,
      "transformTranslateZ": 0,
      "transformScale": 1
    }
  }
}
```

</details>
