grid element
A CSS grid. Use it for card grids, galleries and dashboards.
Renders
<div> with display: gridRequired
Nothing beyond
type; set columns to make it a grid with more than one column.Native apps
Web, and server-driven native apps
Syntax
grid element
{ "type": "grid" }An element lives in a screen's sections, another element's elements, a layout slot or a component root.
Properties
| Property | Type | Description |
|---|---|---|
elements | array of element | |
columns | integer (1–24)string | |
responsiveColumns | object {name: integer (1–24)} | grid columns per breakpoint |
gap | string | |
data | object |
|
item | element | |
empty | element |
Plus the properties every element accepts: id, className, style, responsive, states, animation, visible, ariaLabel, attributes and more.
Example
grid example
{
"type": "grid",
"columns": 3,
"responsiveColumns": { "tablet": 2, "mobile": 1 },
"gap": "16px",
"elements": [
{ "type": "box", "className": "tile", "content": "One" },
{ "type": "box", "className": "tile", "content": "Two" },
{ "type": "box", "className": "tile", "content": "Three" }
]
}columns is either a count (3 equal columns) or any CSS grid-template-columns string ("2fr 1fr"). responsiveColumns changes the count at or below a breakpoint. Any container accepts columns; grid just says so in its name.
Expected output
The HTML IWC rendered for the example above (inside the page's content wrapper). Class names such as i807b63fc are generated per element for its scoped CSS.
Rendered HTML
<div class="iwc-page ipage" id="iwc-content">
<div class="iwc-grid i72932197">
<div class="iwc-box iea383178 tile">
One
</div>
<div class="iwc-box i210ff983 tile">
Two
</div>
<div class="iwc-box ia1230993 tile">
Three
</div>
</div>
</div>Data, conditions & styling
- Conditional rendering:
"visible": {"auth": "signed-in"},{"roles": ["admin"]}or an expression such as"=product.stock > 0". Decided on the server: hidden elements are never sent. - Data binding:
bindtakes text from data (name,user.name,props.title,params.slug,state.cart.count);bindsbinds attributes. Containers become data-driven withdata+item. See data binding. - Styling:
classNamefor your stylesheets,stylefor CSS in JSON,statesfor hover/focus/active,animationfor entrance motion. See the style property reference. - Responsive behaviour:
responsiveapplies CSS at or below a breakpoint ({"mobile": {"padding": "12px"}}); grids also takeresponsiveColumns.