1# 位置设置
2
3设置组件的对齐方式、布局方向和显示位置。
4
5>  **说明:**
6>
7>  从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9## align
10
11align(value: Alignment)
12
13设置容器元素绘制区域内的子元素的对齐方式。
14
15**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
16
17**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
18
19**系统能力:** SystemCapability.ArkUI.ArkUI.Full
20
21**参数:**
22
23| 参数名 | 类型                                        | 必填 | 说明                                                         |
24| ------ | ------------------------------------------- | ---- | ------------------------------------------------------------ |
25| value  | [Alignment](ts-appendix-enums.md#alignment) | 是   | 设置容器元素绘制区域内的子元素的对齐方式。<br/>只在Stack、Button、Marquee、StepperItem、Text、TextArea、TextInput、FolderStack中生效,其中和文本相关的组件Marquee、Text、TextArea、TextInput的align结果参考[textAlign](ts-basic-components-text.md#textalign)。<br/>不支持textAlign属性的组件则无法设置水平方向的文字对齐。<br/>默认值:Alignment.Center<br/>**说明:** <br/>在Stack中该属性与alignContent效果一致,只能设置子组件在容器内的对齐方式。 |
26
27## direction
28
29direction(value: Direction)
30
31设置容器元素内主轴方向上的布局。
32
33**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
34
35**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
36
37**系统能力:** SystemCapability.ArkUI.ArkUI.Full
38
39**参数:**
40
41| 参数名 | 类型                                        | 必填 | 说明                                                |
42| ------ | ------------------------------------------- | ---- | --------------------------------------------------- |
43| value  | [Direction](ts-appendix-enums.md#direction) | 是   | 设置容器元素内主轴方向上的布局。<br/>属性配置为auto的时候,按照系统语言方向进行布局。<br/>该属性在Column组件上不生效。<br/>默认值:Direction.Auto |
44
45## position
46
47position(value: Position | Edges | LocalizedEdges)
48
49绝对定位,确定子组件相对父组件的位置。
50
51**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
52
53**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
54
55**系统能力:** SystemCapability.ArkUI.ArkUI.Full
56
57**参数:**
58
59| 参数名 | 类型                                                         | 必填 | 说明                                                         |
60| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
61| value  | [Position](ts-types.md#position) \| [Edges<sup>12+</sup>](ts-types.md#edges12) \| [LocalizedEdges<sup>12+</sup>](ts-types.md#localizededges12) | 是   | 绝对定位,确定子组件相对父组件的位置。当父容器为Row/Column/Flex时,设置position的子组件不占位。<br/>Position类型基于父组件左上角确定位置;Edges类型基于父组件四边确定位置,top/left/right/bottom分别为组件各边距离父组件相应边的边距,通过边距来确定组件相对于父组件的位置;LocalizedEdges类型基于父组件四边确定位置,支持镜像模式。<br/>适用于置顶显示、悬浮按钮等组件在父容器中位置固定的场景。<br/>不支持在宽高为零的布局容器上设置。<br/>当父容器为[RelativeContainer](ts-container-relativecontainer.md), 且子组件设置了alignRules属性, 则子组件的position属性不生效。 |
62
63## markAnchor
64
65markAnchor(value: Position | LocalizedPosition)
66
67设置元素在位置定位时的锚点。
68
69**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
70
71**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
72
73**系统能力:** SystemCapability.ArkUI.ArkUI.Full
74
75**参数:**
76
77| 参数名 | 类型                             | 必填 | 说明                                                         |
78| ------ | -------------------------------- | ---- | ------------------------------------------------------------ |
79| value  | [Position](ts-types.md#position) \| [LocalizedPosition<sup>12+</sup>](ts-types.md#localizedposition12) | 是   | 设置元素在位置定位时的锚点,从position或offset的位置上,进一步偏移。<br/>设置.position({x: value1, y: value2}).markAnchor({x: value3, y: value4}),效果等于设置.position({x: value1 - value3, y: value2 - value4}),offset同理。<br/>单独使用markAnchor,设置.markAnchor({x: value1, y: value2}),效果等于设置.offset({x: -value1, y: -value2})。<br/>API version 9及以前,默认值为:<br/>{<br/>x: 0,<br/>y: 0<br/>}<br/>API version 10:无默认值。 |
80
81## offset
82
83offset(value: Position | Edges | LocalizedEdges)
84
85相对偏移,组件相对原本的布局位置进行偏移。
86
87**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
88
89**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
90
91**系统能力:** SystemCapability.ArkUI.ArkUI.Full
92
93**参数:**
94
95| 参数名 | 类型                                                         | 必填 | 说明                                                         |
96| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
97| value  | [Position](ts-types.md#position) \| [Edges<sup>12+</sup>](ts-types.md#edges12)  \| [LocalizedEdges<sup>12+</sup>](ts-types.md#localizededges12) | 是   | 相对偏移,组件相对原本的布局位置进行偏移。offset属性不影响父容器布局,仅在绘制时调整位置。<br/>Position类型基于组件自身左上角偏移,Edges类型基于组件自身四边偏移。 offset属性设置 {x: x, y: y} 与设置 {left: x, top: y} 以及 {right: -x, bottom: -y} 效果相同,  类型LocalizedEdges支持镜像模式:LTR模式下start 等同于x,RTL模式下等同于-x<br/>API version 9及以前,默认值为:<br/>{<br/>x: 0,<br/>y: 0<br/>}<br/>默认单位:vp<br/>API version 10:无默认值。 |
98
99## alignRules<sup>9+</sup>
100
101alignRules(value: AlignRuleOption)
102
103指定设置在相对容器中子组件的对齐规则,仅当父容器为[RelativeContainer](ts-container-relativecontainer.md)时生效。
104
105**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
106
107**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
108
109**系统能力:** SystemCapability.ArkUI.ArkUI.Full
110
111**参数:**
112
113| 参数名 | 类型                                        | 必填 | 说明                     |
114| ------ | ------------------------------------------- | ---- | ------------------------ |
115| value  | [AlignRuleOption](#alignruleoption对象说明) | 是   | 指定设置在相对容器中子组件的对齐规则。 |
116
117## alignRules<sup>12+</sup>
118
119alignRules(alignRule: LocalizedAlignRuleOptions)
120
121指定设置在相对容器中子组件的对齐规则,仅当父容器为[RelativeContainer](ts-container-relativecontainer.md)时生效。该方法水平方向上以start和end分别替代原方法的left和right,以便在RTL模式下能镜像显示,建议使用该方法指定设置在相对容器中子组件的对齐规则。
122
123**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
124
125**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
126
127**系统能力:** SystemCapability.ArkUI.ArkUI.Full
128
129**参数:**
130
131| 参数名 | 类型                                        | 必填 | 说明                     |
132| ------ | ------------------------------------------- | ---- | ------------------------ |
133| alignRule  | [LocalizedAlignRuleOptions](#localizedalignruleoptions12对象说明) | 是   | 指定设置在相对容器中子组件的对齐规则。 |
134
135## AlignRuleOption对象说明
136
137**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
138
139| 名称   | 类型                                                         | 描述                                                         |
140| ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
141| left   | { anchor: string, align: [HorizontalAlign](ts-appendix-enums.md#horizontalalign) } | 设置左对齐参数。<br/>-&nbsp;anchor:设置作为锚点的组件的id值。<br/>-&nbsp;align:设置相对于锚点组件的对齐方式。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
142| right  | { anchor: string, align: [HorizontalAlign](ts-appendix-enums.md#horizontalalign) } | 设置右对齐参数。<br/>-&nbsp;anchor:设置作为锚点的组件的id值。<br/>-&nbsp;align:设置相对于锚点组件的对齐方式。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
143| middle | { anchor: string, align: [HorizontalAlign](ts-appendix-enums.md#horizontalalign) } | 设置横向居中对齐方式的参数。<br/>-&nbsp;anchor:设置作为锚点的组件的id值。<br/>-&nbsp;align:设置相对于锚点组件的对齐方式。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
144| top    | { anchor: string, align: [VerticalAlign](ts-appendix-enums.md#verticalalign) } | 设置顶部对齐的参数。<br/>-&nbsp;anchor:设置作为锚点的组件的id值。<br/>-&nbsp;align:设置相对于锚点组件的对齐方式。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
145| bottom | { anchor: string, align: [VerticalAlign](ts-appendix-enums.md#verticalalign) } | 设置底部对齐的参数。<br/>-&nbsp;anchor:设置作为锚点的组件的id值。<br/>-&nbsp;align:设置相对于锚点组件的对齐方式。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
146| center | { anchor: string, align: [VerticalAlign](ts-appendix-enums.md#verticalalign) } | 设置纵向居中对齐方式的参数。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。                                 |
147| bias<sup>11+</sup>   | [Bias](#bias对象说明) | 设置组件在锚点约束下的偏移参数,其值为到左/上侧锚点的距离与锚点间总距离的比值。<br/>**卡片能力:** 从API version 11开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
148
149## LocalizedAlignRuleOptions<sup>12+</sup>对象说明
150
151**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
152
153| 名称   | 类型                                                         | 描述                                                         |
154| ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
155| start  | [LocalizedHorizontalAlignParam](#localizedhorizontalalignparam12对象说明) | 设置横向对齐方式的参数,LTR模式时为左对齐,RTL模式时为右对齐。 |
156| end    | [LocalizedHorizontalAlignParam](#localizedhorizontalalignparam12对象说明) | 设置横向对齐方式的参数,LTR模式时为右对齐,RTL模式时为左对齐。 |
157| middle | [LocalizedHorizontalAlignParam](#localizedhorizontalalignparam12对象说明) | 设置横向居中对齐方式的参数。|
158| top    | [LocalizedVerticalAlignParam](#localizedverticalalignparam12对象说明) | 设置纵向顶部对齐的参数。 |
159| bottom | [LocalizedVerticalAlignParam](#localizedverticalalignparam12对象说明) | 设置纵向底部对齐的参数。 |
160| center | [LocalizedVerticalAlignParam](#localizedverticalalignparam12对象说明) | 设置纵向居中对齐方式的参数。      |
161| bias   | [Bias](#bias对象说明) | 设置组件在锚点约束下的偏移参数,其值为到左/上侧锚点的距离与锚点间总距离的比值。|
162
163## LocalizedHorizontalAlignParam<sup>12+</sup>对象说明
164
165**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
166
167| 名称   | 类型                                                         | 描述                                                         |
168| ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
169| anchor  | string  | 设置作为锚点的组件的id值。 |
170| align   | [HorizontalAlign](ts-appendix-enums.md#horizontalalign)  | 设置相对于锚点组件的横向对齐方式。 |
171
172## LocalizedVerticalAlignParam<sup>12+</sup>对象说明
173
174**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
175
176| 名称   | 类型                                                         | 描述                                                         |
177| ------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
178| anchor  | string | 设置作为锚点的组件的id值。 |
179| align   | [VerticalAlign](ts-appendix-enums.md#verticalalign)  | 设置相对于锚点组件的纵向对齐方式。 |
180
181## Bias对象说明
182
183设置组件在锚点约束下的偏移参数。
184<br/>以水平方向Bias为例,其值为组件到左锚点的距离 D<sub>start</sub>与组件到水平方向锚点间总距离 D<sub>start</sub> +  D<sub>end</sub>的比值。镜像语言下,D<sub>start</sub>为组件到右锚点的距离。下图中D<sub>width</sub>表示组件宽度。
185<br/>![bias_horizontal_example.png](figures/bias_horizontal_example.png)
186<br/>竖直方向同理,其值为组件到上锚点的距离D<sub>top</sub>与组件到竖直方向锚点间总距离D<sub>top</sub> + D<sub>bottom</sub>的比值。下图中D<sub>height</sub>表示组件高度。
187<br/>![bias_vertical_example.png](figures/bias_vertical_example.png)
188
189
190**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
191
192| 参数名   | 类型                                       | 必填   | 说明                                       |
193| ----- | ---------------------------------------- | ---- | ---------------------------------------- |
194| horizontal  | number | &nbsp;否 | 水平方向上的bias值。<br/>当子组件的width属性有正确值并且有2个水平方向的锚点时生效。<br/>默认值:&nbsp;0.5 |
195| vertical  | number | &nbsp;否 | 垂直方向上的bias值。<br/>当子组件的height属性有正确值并且有2个垂直方向的锚点时生效。<br/>默认值:&nbsp;0.5 |
196
197## chainMode<sup>12+</sup>
198
199chainMode(direction: Axis, style: ChainStyle)
200
201指定以该组件为链头所构成的链的参数,仅当父容器为[RelativeContainer](ts-container-relativecontainer.md)时生效。链头指满足[规则说明](ts-container-relativecontainer.md#规则说明)中成链规则时链的第一个组件(水平方向从左边起始,镜像语言下从右边起始;竖直方向从上边起始)。
202详细用法请参考[RelativeContainer示例7(设置链)](ts-container-relativecontainer.md#示例7设置链)。
203
204**系统能力:** SystemCapability.ArkUI.ArkUI.Full
205
206**参数:**
207
208| 参数名 | 类型                                        | 必填 | 说明                     |
209| ------ | ------------------------------------------- | ---- | ------------------------ |
210| direction  | [Axis](ts-appendix-enums.md#axis) | 是   | 链的方向。 |
211| style  | [ChainStyle](#chainstyle12) | 是   | 链的样式。 |
212
213## ChainStyle<sup>12+</sup>
214
215定义链的风格。
216
217**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
218
219**系统能力:** SystemCapability.ArkUI.ArkUI.Full
220
221| 名称          | 说明                                                         |
222| ------------- | ------------------------------------------------------------ |
223| SPREAD        | 组件在约束锚点间均匀分布。详细用法请参考[RelativeContainer示例7(设置链)](ts-container-relativecontainer.md#示例7设置链)。 |
224| SPREAD_INSIDE | 除首尾2个子组件的其他组件在约束锚点间均匀分布。详细用法请参考[RelativeContainer示例7(设置链)](ts-container-relativecontainer.md#示例7设置链)。 |
225| PACKED        | 链内子组件无间隙。详细用法请参考[RelativeContainer示例7(设置链)](ts-container-relativecontainer.md#示例7设置链)。 |
226
227## chainWeight<sup>14+</sup>
228
229chainWeight(chainWeight: ChainWeightOptions)
230
231对形成链的组件进行重新布局。仅当父容器为[RelativeContainer](ts-container-relativecontainer.md)时生效。
232
233**系统能力:** SystemCapability.ArkUI.ArkUI.Full
234
235**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
236
237**参数:**
238
239| 参数名 | 类型                                        | 必填 | 说明                     |
240| ------ | ------------------------------------------- | ---- | ------------------------ |
241| chainWeight  | [ChainWeightOptions](ts-types.md#chainweightoptions14对象说明) | 是   | 设置了chainWeight属性的组件与同一条链上的兄弟组件在水平或竖直方向的尺寸会按照设置的权重进行分配,分配时会忽略组件本身尺寸设置,按分配的权重自适应占满剩余空间。 |
242
243
244## 示例
245
246### 示例1(对齐方式和主轴方向上的布局)
247
248设置内容在元素内的对齐方式和子元素在父容器主轴方向上的布局。
249
250```ts
251// xxx.ets
252@Entry
253@Component
254struct PositionExample1 {
255  build() {
256    Column() {
257      Column({ space: 10 }) {
258        // 元素内容<元素宽高,设置内容在与元素内的对齐方式
259        Text('align').fontSize(9).fontColor(0xCCCCCC).width('90%')
260        Stack() {
261          Text('First show in bottom end').height('65%').backgroundColor(0xD2B48C)
262          Text('Second show in bottom end').backgroundColor(0xF5DEB3).opacity(0.9)
263        }.width('90%').height(50).margin({ top: 5 }).backgroundColor(0xFFE4C4)
264        .align(Alignment.BottomEnd)
265        Stack() {
266          Text('top start')
267        }.width('90%').height(50).margin({ top: 5 }).backgroundColor(0xFFE4C4)
268        .align(Alignment.TopStart)
269
270        // 父容器设置direction为Direction.Ltr,子元素从左到右排列
271        Text('direction').fontSize(9).fontColor(0xCCCCCC).width('90%')
272        Row() {
273          Text('1').height(50).width('25%').fontSize(16).backgroundColor(0xF5DEB3)
274          Text('2').height(50).width('25%').fontSize(16).backgroundColor(0xD2B48C)
275          Text('3').height(50).width('25%').fontSize(16).backgroundColor(0xF5DEB3)
276          Text('4').height(50).width('25%').fontSize(16).backgroundColor(0xD2B48C)
277        }
278        .width('90%')
279        .direction(Direction.Ltr)
280        // 父容器设置direction为Direction.Rtl,子元素从右到左排列
281        Row() {
282          Text('1').height(50).width('25%').fontSize(16).backgroundColor(0xF5DEB3).textAlign(TextAlign.End)
283          Text('2').height(50).width('25%').fontSize(16).backgroundColor(0xD2B48C).textAlign(TextAlign.End)
284          Text('3').height(50).width('25%').fontSize(16).backgroundColor(0xF5DEB3).textAlign(TextAlign.End)
285          Text('4').height(50).width('25%').fontSize(16).backgroundColor(0xD2B48C).textAlign(TextAlign.End)
286        }
287        .width('90%')
288        .direction(Direction.Rtl)
289      }
290    }
291    .width('100%').margin({ top: 5 })
292  }
293}
294```
295
296![align.png](figures/align.png)
297
298### 示例2(位置偏移)
299
300基于父组件、相对定位、锚点作出位置偏移。
301
302```ts
303// xxx.ets
304@Entry
305@Component
306struct PositionExample2 {
307  build() {
308    Column({ space: 20 }) {
309      // 设置子组件左上角相对于父组件左上角的偏移位置
310      Text('position').fontSize(12).fontColor(0xCCCCCC).width('90%')
311      Row() {
312        Text('1').size({ width: '30%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
313          .textAlign(TextAlign.Center)
314        Text('2 position(30, 10)')
315          .size({ width: '60%', height: '30' })
316          .backgroundColor(0xbbb2cb)
317          .border({ width: 1 })
318          .fontSize(16)
319          .align(Alignment.Start)
320          .position({ x: 30, y: 10 })
321        Text('3').size({ width: '45%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
322          .textAlign(TextAlign.Center)
323        Text('4 position(50%, 70%)')
324          .size({ width: '50%', height: '50' })
325          .backgroundColor(0xbbb2cb)
326          .border({ width: 1 })
327          .fontSize(16)
328          .position({ x: '50%', y: '70%' })
329      }.width('90%').height(100).border({ width: 1, style: BorderStyle.Dashed })
330
331      // 相对于起点偏移,其中x为最终定位点距离起点水平方向间距,x>0往左,反之向右。
332      // y为最终定位点距离起点垂直方向间距,y>0向上,反之向下
333      Text('markAnchor').fontSize(12).fontColor(0xCCCCCC).width('90%')
334      Stack({ alignContent: Alignment.TopStart }) {
335        Row()
336          .size({ width: '100', height: '100' })
337          .backgroundColor(0xdeb887)
338        Text('text')
339          .fontSize('30px')
340          .textAlign(TextAlign.Center)
341          .size({ width: 25, height: 25 })
342          .backgroundColor(Color.Green)
343          .markAnchor({ x: 25, y: 25 })
344        Text('text')
345          .fontSize('30px')
346          .textAlign(TextAlign.Center)
347          .size({ width: 25, height: 25 })
348          .backgroundColor(Color.Green)
349          .markAnchor({ x: -100, y: -25 })
350        Text('text')
351          .fontSize('30px')
352          .textAlign(TextAlign.Center)
353          .size({ width: 25, height: 25 })
354          .backgroundColor(Color.Green)
355          .markAnchor({ x: 25, y: -25 })
356      }.margin({ top: 25 }).border({ width: 1, style: BorderStyle.Dashed })
357
358      // 相对定位,x>0向右偏移,反之向左,y>0向下偏移,反之向上
359      Text('offset').fontSize(12).fontColor(0xCCCCCC).width('90%')
360      Row() {
361        Text('1').size({ width: '15%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
362          .textAlign(TextAlign.Center)
363        Text('2  offset(15, 30)')
364          .size({ width: 120, height: '50' })
365          .backgroundColor(0xbbb2cb)
366          .border({ width: 1 })
367          .fontSize(16)
368          .align(Alignment.Start)
369          .offset({ x: 15, y: 30 })
370        Text('3').size({ width: '15%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
371          .textAlign(TextAlign.Center)
372        Text('4 offset(-5%, 20%)')
373          .size({ width: 100, height: '50' })
374          .backgroundColor(0xbbb2cb)
375          .border({ width: 1 })
376          .fontSize(16)
377          .offset({ x: '-5%', y: '20%' })
378      }.width('90%').height(100).border({ width: 1, style: BorderStyle.Dashed })
379    }
380    .width('100%').margin({ top: 25 })
381  }
382}
383```
384
385![position.png](figures/position.png)
386
387### 示例3(绝对定位和相对偏移)
388
389使用position设置绝对定位,确定子组件相对父组件的位置。使用offset设置相对偏移,组件相对原本的布局位置进行偏移。
390
391```ts
392// xxx.ets
393@Entry
394@Component
395struct Example3 {
396  build() {
397    Column({ space: 20 }){
398      Text('position use Edges').fontSize(12).fontColor(0xCCCCCC).width('90%')
399      Row() {
400        Text('bottom:0, right:0').size({ width: '30%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
401          .textAlign(TextAlign.Center).position({bottom: 0, right: 0})
402        Text('top:0, left:0').size({ width: '30%', height: '50' }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
403          .textAlign(TextAlign.Center).position({top: 0, left: 0})
404        Text('top:10%, left:50%').size({ width: '50%', height: '30' }).backgroundColor(0xbbb2cb).border({ width: 1 }).fontSize(16)
405          .textAlign(TextAlign.Center).position({ top: '10%', left: '50%' })
406        Text('bottom:0, left:30').size({ width: '50%', height: '30' }).backgroundColor(0xbbb2cb).border({ width: 1 }).fontSize(16)
407          .textAlign(TextAlign.Center).position({ bottom: 0, left: 30 })
408      }.width('90%').height(100).border({ width: 1, style: BorderStyle.Dashed })
409
410
411      Text('offset use Edges').fontSize(12).fontColor(0xCCCCCC).width('90%')
412      Row() {
413        Text('1').size({ width: '25%', height: 50 }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
414          .textAlign(TextAlign.Center)
415        Text('2 top:30, left:0').size({ width: '25%', height: 50 }).backgroundColor(0xbbb2cb).border({ width: 1 }).fontSize(16)
416          .textAlign(TextAlign.Center).offset({top: 30, left: 0})
417        Text('3').size({ width: '25%', height: 50 }).backgroundColor(0xdeb887).border({ width: 1 }).fontSize(16)
418          .textAlign(TextAlign.Center)
419        Text('4 bottom:10, right:30').size({ width: '25%', height: 50 }).backgroundColor(0xbbb2cb).border({ width: 1 }).fontSize(12)
420          .textAlign(TextAlign.Center).offset({bottom: 10, right: 30})
421      }.width('90%').height(150).border({ width: 1, style: BorderStyle.Dashed })
422    }.width('100%').margin({ top: 25 })
423  }
424}
425```
426
427![position.png](figures/position2.jpeg)
428
429### 示例4(镜像效果)
430
431通用布局属性支持镜像能力。从上到下依次通过position,offset,markAnchor实现镜像效果。黄色赋值为原本效果,粉色赋值为镜像效果。
432
433```ts
434// xxx.ets
435import { LengthMetrics } from '@kit.ArkUI';
436@Entry
437@Component
438struct Example4 {
439  private scroller: Scroller = new Scroller()
440
441  build() {
442    Column() {
443      Stack({ alignContent: Alignment.End }) {
444        Scroll(this.scroller) {
445          Flex({ direction: FlexDirection.Column }) {
446            RelativeContainer() {
447              Row() {
448              }
449              .position({ start: LengthMetrics.px(200), top: LengthMetrics.px(100) })
450              .width("30%")
451              .height("20%")
452              .backgroundColor(Color.Pink)
453              .padding(50)
454              .margin(50)
455              Row() {
456              }
457              .position({ left:'200px', top: '100px' })
458              .width("30%")
459              .height("20%")
460              .backgroundColor(Color.Yellow)
461              .padding(50)
462              .margin(50)
463              Row() {
464              }
465              .offset({ start: LengthMetrics.vp(100), top: LengthMetrics.vp(200)  })
466              .width("30%")
467              .height("20%")
468              .backgroundColor(Color.Pink)
469              .padding(50)
470              .margin(50)
471              Row() {
472              }
473              .offset({ left: 100, top: 200  })
474              .width("30%")
475              .height("20%")
476              .backgroundColor(Color.Yellow)
477              .padding(50)
478              .margin(50)
479              Row() {
480              }
481              .markAnchor({ start: LengthMetrics.fp(100), top: LengthMetrics.fp(-350) })
482              .width("30%")
483              .height("20%")
484              .backgroundColor(Color.Pink)
485              .padding(50)
486              .margin(50)
487              Row() {
488              }
489              .markAnchor({ x: '100fp', y: '-350fp' })
490              .width("30%")
491              .height("20%")
492              .backgroundColor(Color.Yellow)
493              .padding(50)
494              .margin(50)
495            }
496            .backgroundColor(Color.White)
497            .padding(50)
498            .margin(50)
499          }
500        }
501        .width('100%')
502        .scrollBar(BarState.Off)
503        .scrollable(ScrollDirection.Vertical)
504
505        ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical, state: BarState.Auto }) {
506          Text()
507            .width(20)
508            .height(100)
509            .borderRadius(10)
510            .backgroundColor('#C0C0C0')
511        }.width(20).backgroundColor('#ededed')
512      }
513    }.height('90%')
514  }
515}
516```
517![position.png](figures/position3.png)