# Grid
# background
As we all know, canvas is drawn at the pixel level. Unlike HTML, it does not automatically display its internal block-level elements in one line, and displays the in-line elements in sequence on the same line. If you want to achieve block-level and inline effects similar to HTML on canvas, developers need to manually calculate the horizontal and vertical coordinates of drawing graphics, which is really troublesome. However, this bad situation will be completely solved in canvas-like-html, that is, using the library's built-in row and col elements to implement grid layout in canvas.
# Overview
The grid layout will not be described in detail here. Here is a brief description of the working principle of implementing grid in canvas-like-html:
- Create a row element through the
rowelement - Add the
colelement inside therowelement to achieve multi-column arrangement - Each column element
colcan pass in thespanattribute to control the width it occupies in the row element. - The span of the column element col only accepts values from
1~24, that is, a row element can be divided into up to 24 columns. - All elements in the column element col (except row, which occupies an exclusive row) will be arranged one by one like the inline elements in HTML. If they exceed the row, they will be arranged in a row.
# Basic grid usage
<canvas width="800" height="50">
<row>
<col :span="6"><span>col-6</span></col>
<col :span="6"><span>col-6</span></col>
<col :span="6"><span>col-6</span></col>
<col :span="6"><span>col-6</span></col>
</row>
</canvas>
# vertical alignment
By setting the
alignattribute of the row element, all column elements under the row element can be vertically aligned.
<canvas width="800" height="200">
<row>
<col :span="24">
<row>
<col :span="24">
<span>align: top</span>
</col>
</row>
<row align="top">
<col :span="12"><button>col-12</button></col>
<col :span="12"><span>col-12</span></col>
</row>
<row>
<col :span="24">
<span>align: middle</span>
</col>
</row>
<row align="middle">
<col :span="12"><button>col-12</button></col>
<col :span="12"><span>col-12</span></col>
</row>
<row>
<col :span="24">
<span>align: bottom</span>
</col>
</row>
<row align="bottom">
<col :span="12"><button>col-12</button></col>
<col :span="12"><button>col-12</button></col>
</row>
</col>
</row>
</canvas>
# horizontal arrangement
By setting the
justifyattribute of the row element, all column elements under the row element can be arranged horizontally.
<canvas width="800" height="350">
<row>
<col :span="24">
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
<row>
<col :span="24">
<span>justify: start</span>
</col>
</row>
<row justify="start">
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
<col :span="2"><button type="primary">col-2</button></col>
</row>
</col>
</row>
</canvas>
# offset
Column offset can be achieved by setting the
offsetof the column element.
<canvas width="800" height="50">
<row>
<col :span="24">
<row>
<col :span="6" :offset="6"><span>col-6 col-offset-6</span></col>
<col :span="6" :offset="6"><span>col-6 col-offset-6</span></col>
</row>
<row>
<col :span="12" :offset="6"><span>col-12 col-offset-6</span></col>
</row>
</col>
</row>
</canvas>
# pull、push
By setting the
pullandpushof the col element, you can control the position of the column left and right.Note:
pullandpushonly change the position of the current column element and will not affect subsequent columns. The effect is similar to the position: absolute element setting left and right in CSS.
<canvas width="800" height="100">
<row>
<col :span="24">
<row>
<col :span="6" :push="2"><span>col-6 push-2</span></col>
<col :span="6" :push="3"><span>col-6 push-3</span></col>
</row>
<row justify="end">
<col :span="6" :pull="2"><span>col-6 pull-2</span></col>
<col :span="6" :pull="2"><span>col-6 pull-2</span></col>
</row>
<row justify="center">
<col :span="18" :push="6"><span>col-18 push-6</span></col>
<col :span="6" :pull="4"><span>col-6 pull-4</span></col>
</row>
</col>
</row>
</canvas>
# gutter
By setting the
gutterof therowelement, you can set a gap for its direct childcolelements.Note: The moving distance is in pixels
<canvas width="800" height="50">
<row :gutter="5" justify="center">
<col :span="2">
<tag type="success">col-2</tag>
</col>
<col :span="2">
<tag type="success">col-2</tag>
</col>
<col :span="2">
<tag type="success">col-2</tag>
</col>
<col :span="2">
<tag type="success">col-2</tag>
</col>
</row>
</canvas>
# Attributes
# row
| Attribute | Description | Type | Accepted values | Default |
|---|---|---|---|---|
| align | vertical alignment | string | top| middle | bottom | top |
| justify | horizontal arrangement | string | start| center | end | space-around | space-between | space-evenly | start |
| gutter | spacing | number | 0 | |
| type | Layout method, currently only supports flex | string | flex | flex |
# col
| Attribute | Description | Type | Accepted values | Default |
|---|---|---|---|---|
| span | The number of cells occupied by the grid | number | 1-24 | 24 |
| offset | The number of spacer cells on the left side of the grid | number | 0 | |
| push | The number of cells the grid moves to the left | number | 0 | |
| pull | The number of cells the grid moves to the right | number | 0 |