Grid
The grid block lays out a fixed number of freeform cells in a CSS grid. Reach for it when you need a custom layout of content, images, or other blocks that doesn't fit one of the more structured types (feature grid, pricing table, team, and so on).
Fields
| Field | Description | Required? |
|---|---|---|
heading | Section heading shown above the grid. Placeholder example: "Featured items". | No |
grid_cols | Number of columns, selected from 1 to 4. Defaults to 2. | No |
grid_gap | CSS gap value between cells (e.g. 1rem). Defaults to 1rem. | No |
cell_count | Number of cells to render, selected from 1 to 6. Defaults to 4 (or the number of existing cells). | No |
Cell 1 ... Cell N | One free-text box per cell (N = cell_count). Each box accepts raw HTML, and its placeholder hints that you can nest a shortcode like {{block:my-block-name}} inside it. | No |
HTML safety
heading is escaped and rendered as plain text. Every cell body is rendered without escaping, so cells accept raw HTML. This is also the one block type where a cell's content can itself contain a {{block:...}} shortcode: nested block shortcodes inside a grid cell are resolved recursively at build time, so you can compose other blocks (a callout, an embed, even another grid) inside a grid cell.
Using it
{{block:homepage-services-grid}} Place the shortcode in a page or post body wherever you want the grid to appear. Set grid_cols and grid_gap in the admin editor to control the layout; each cell is edited as its own text box.
Example
A homepage "Services" section with 3 columns and 3 cells, each cell holding a small hand-written HTML snippet:
| Field | Value |
|---|---|
heading | Services |
grid_cols | 3 |
grid_gap | 1.5rem |
cell_count | 3 |
| Cell 1 | <h3>Consulting</h3><p>Strategy and roadmap work.</p> |
| Cell 2 | <h3>Implementation</h3><p>Hands-on build and migration.</p> |
| Cell 3 | {{block:support-callout}} |
Cell 3 shows the nested-block capability: instead of writing HTML directly, the editor drops in a shortcode for an existing callout block, which is resolved and rendered in place when the page builds.