1# stack
2
3The **\<stack>** component provides a stack container where child components are successively stacked and the latter one overwrites the previous one.
4
5> **NOTE**
6>
7> This component is supported since API version 4. Updates will be marked with a superscript to indicate their earliest API version.
8
9
10## Child Components
11
12Supported.
13
14
15## Attributes
16
17| Name   | Type    | Default Value | Mandatory  | Description                                      |
18| ----- | ------ | ---- | ---- | ---------------------------------------- |
19| id    | string | -    | No   | Unique ID of the component.                                |
20| style | string | -    | No   | Style declaration of the component.                                |
21| class | string | -    | No   | Style class of the component, which is used to refer to a style table.                         |
22| ref   | string | -    | No   | Reference information of child elements, which is registered with the parent component on **$refs**.|
23
24
25## Events
26
27| Name                | Parameter                               | Description         |
28| ------------------ | --------------------------------- | ----------- |
29| click              | -                                 | Triggered when the component is clicked. |
30| longpress          | -                                 | Triggered when the component is long pressed. |
31| swipe<sup>5+</sup> | [SwipeEvent](js-lite-common-events.md) | Triggered when a user quickly swipes on the component.|
32
33
34## Styles
35
36| Name                                | Type                                      | Default Value  | Mandatory  | Description                                      |
37| ---------------------------------- | ---------------------------------------- | ----- | ---- | ---------------------------------------- |
38| width                              | &lt;length&gt; \| &lt;percentage&gt;<sup>5+</sup> | -     | No   | Component width.<br><br>If this attribute is not set, the default value **0** is used.       |
39| height                             | &lt;length&gt; \| &lt;percentage&gt;<sup>5+</sup> | -     | No   | Component height.<br><br>If this attribute is not set, the default value **0** is used.       |
40| padding                            | &lt;length&gt;                           | 0     | No   | Shorthand attribute to set the padding for all sides.<br>The attribute can have one to four values:<br>- If you set only one value, it specifies the padding for all the four sides.<br>- If you set two values, the first value specifies the top and bottom padding, and the second value specifies the left and right padding.<br>- If you set three values, the first value specifies the top padding, the second value specifies the left and right padding, and the third value specifies the bottom padding.<br>- If you set four values, they respectively specify the padding for top, right, bottom, and left sides (in clockwise order).|
41| padding-[left\|top\|right\|bottom] | &lt;length&gt;                           | 0     | No   | Left, top, right, and bottom padding.                         |
42| margin                             | &lt;length&gt; \| &lt;percentage&gt;<sup>5+</sup> | 0     | No   | Shorthand attribute to set the margin for all sides. The attribute can have one to four values:<br>- If you set only one value, it specifies the margin for all the four sides.<br>- If you set two values, the first value specifies the top and bottom margins, and the second value specifies the left and right margins.<br>- If you set three values, the first value specifies the top margin, the second value specifies the left and right margins, and the third value specifies the bottom margin.<br>- If you set four values, they respectively specify the margin for top, right, bottom, and left sides (in clockwise order).|
43| margin-[left\|top\|right\|bottom]  | &lt;length&gt; \| &lt;percentage&gt;<sup>5+</sup> | 0     | No   | Left, top, right, and bottom margins.                         |
44| border-width                       | &lt;length&gt;                           | 0     | No   | Shorthand attribute to set the margin for all sides.                      |
45| border-color                       | &lt;color&gt;                            | black | No   | Shorthand attribute to set the color for all borders.                      |
46| border-radius                      | &lt;length&gt;                           | -     | No   | Radius of round-corner borders.           |
47| background-color                   | &lt;color&gt;                            | -     | No   | Background color.                                 |
48| opacity<sup>5+</sup>               | number                                   | 1     | No   | Opacity of an element. The value ranges from **0** to **1**. The value **1** means opaque, and **0** means completely transparent.       |
49| display                            | string                                   | flex  | No   | How and whether to display the box containing an element. Available values are as follows:<br>- **flex**: flexible layout<br>- **none**: not rendered|
50| [left\|top]                        | &lt;length&gt; \| &lt;percentage&gt;<sup>6+</sup> | -     | No   | Edge of the element.<br>- **left**: left edge position of the element. This attribute defines the offset between the left edge of the margin area of a positioned element and left edge of its containing block.<br>- **top**: top edge position of the element. This attribute defines the offset between the top edge of a positioned element and that of a block included in the element.|
51
52>  **NOTE**
53>
54> The absolute positioning does not support a percentage. Therefore, **margin** cannot be set for the child components of the **\<stack>** component.
55
56
57## Example
58
59
60```html
61<!-- xxx.hml -->
62<stack class="stack-parent">
63  <div class="back-child bd-radius"></div>
64  <div class="positioned-child bd-radius"></div>
65  <div class="front-child bd-radius"></div>
66</stack>
67```
68
69
70```css
71/* xxx.css */
72.stack-parent {
73  width: 400px;
74  height: 400px;
75  background-color: #ffffff;
76  border-width: 1px;
77  border-style: solid;
78}
79.back-child {
80  width: 300px;
81  height: 300px;
82  background-color: #3f56ea;
83}
84.front-child {
85  width: 100px;
86  height: 100px;
87  background-color: #00bfc9;
88}
89.positioned-child {
90  width: 100px;
91  height: 100px;
92  left: 50px;
93  top: 50px;
94  background-color: #47cc47;
95}
96.bd-radius {
97  border-radius: 16px;
98}
99```
100
101![en-us_image_0000001380789188](figures/en-us_image_0000001380789188.png)
102