• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# div
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @lanshouren-->
5<!--Designer: @lanshouren-->
6<!--Tester: @liuli0427-->
7<!--Adviser: @HelloCrease-->
8
9>  **说明:**
10>  从API version 4开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
11
12基础容器,用作页面结构的根节点或将内容进行分组。
13
14## 权限列表
15
1617
18
19## 子组件
20
21支持。
22
23
24## 属性
25
26支持[通用属性](js-components-common-attributes.md)。
27
28
29## 样式
30
31除支持组件[通用样式](js-components-common-styles.md)外,还支持如下样式:
32
33| 名称                           | 类型           | 默认值       | 必填 | 描述                                                         |
34| ------------------------------ | -------------- | ------------ | ---- | ------------------------------------------------------------ |
35| flex-direction                 | string         | row          | 否   | flex容器主轴方向。可选项有:<br/>-&nbsp;column:垂直方向从上到下。<br/>-&nbsp;row:水平方向从左到右。 |
36| flex-wrap                      | string         | nowrap       | 否   | flex容器是单行还是多行显示,该值暂不支持动态修改。可选项有:<br/>-&nbsp;nowrap:不换行,单行显示。<br/>-&nbsp;wrap:换行,多行显示。 |
37| justify-content                | string         | flex-start   | 否   | flex容器当前行的主轴对齐格式。可选项有:<br/>-&nbsp;flex-start:项目位于容器的开头。<br/>-&nbsp;flex-end:项目位于容器的结尾。<br/>-&nbsp;center:项目位于容器的中心。<br/>-&nbsp;space-between:项目位于各行之间留有空白的容器内。<br/>-&nbsp;space-around:项目位于各行之前、之间、之后都留有空白的容器内。<br/>-&nbsp;space-evenly<sup>5+</sup>:&nbsp;&nbsp;均匀排列每个元素,每个元素之间的间隔相等。 |
38| align-items                    | string         | stretch<br/> | 否   | flex容器当前行的交叉轴对齐格式,可选值为:<br/>-&nbsp;stretch:弹性元素在交叉轴方向被拉伸到与容器相同的高度或宽度。<br/>-&nbsp;flex-start:元素向交叉轴起点对齐。<br/>-&nbsp;flex-end:元素向交叉轴终点对齐。<br/>-&nbsp;center:元素在交叉轴居中。<br/>-&nbsp;baseline:如Flex布局纵向排列,则该值与’flex-start‘等效。横向布局时,内容元素存在文本时按照文本基线对齐,否则底部对齐。 |
39| align-content                  | string         | flex-start   | 否   | 交叉轴中有额外的空间时,多行内容对齐格式,可选值为:<br/>-&nbsp;flex-start:所有行从交叉轴起点开始填充。第一行的交叉轴起点边和容器的交叉轴起点边对齐。接下来的每一行紧跟前一行。<br/>-&nbsp;flex-end:所有行从交叉轴末尾开始填充。最后一行的交叉轴终点和容器的交叉轴终点对齐。同时所有后续行与前一个对齐。<br/>-&nbsp;center:所有行朝向容器的中心填充。每行互相紧挨,相对于容器居中对齐。容器的交叉轴起点边和第一行的距离相等于容器的交叉轴终点边和最后一行的距离。<br/>-&nbsp;space-between:所有行在容器中平均分布。相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的边对齐。<br/>-&nbsp;space-around:所有行在容器中平均分布,相邻两行间距相等。容器的交叉轴起点边和终点边分别与第一行和最后一行的距离是相邻两行间距的一半。 |
40| grid-template-[columns\|rows]  | string         | 1行1列       | 否   | 用于设置当前网格布局行和列的数量,不设置时默认1行1列,仅当display为grid时生效。<br/>示例:如设置grid-template-columns为:<br/>-&nbsp;50px&nbsp;100px&nbsp;60px:分三列,第一列50px,第二列100px,第三列60px;<br/>-&nbsp;1fr&nbsp;1fr&nbsp;2fr:分三列,将父组件允许的宽分为4等份,第一列占1份,第二列占一份,第三列占2份;<br/>-&nbsp;30%&nbsp;20%&nbsp;50%:分三列,将父组件允许的宽为基准,第一列占30%,第二列占20%,第三列占50%;<br/>-&nbsp;repeat(2,100px):分两列,第一列100px,第二列100px;<br/>-&nbsp;repeat(auto-fill,100px)<sup>5+</sup>:按照每列100px的大小和交叉轴大小计算最大正整数重复次数,按照该重复次数布满交叉轴;<br/>-&nbsp;auto&nbsp;1fr&nbsp;1fr:分三列,第一列自适应内部子组件所需宽度,剩余空间分为两等份,第二列占一份,第三列占一份。 |
41| grid-[columns\|rows]-gap       | &lt;length&gt; | 0            | 否   | 用于设置行与行的间距或者列与列的间距,也可以支持通过grid-gap设置相同的行列间距,仅当display为grid时生效。 |
42| grid-row-[start\|end]          | number         | -            | 否   | 用于设置当前元素在网格布局中的起止行号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。 |
43| grid-column-[start\|end]       | number         | -            | 否   | 用于设置当前元素在网格布局中的起止列号,仅当父组件display样式为grid时生效(仅div支持display样式设置为grid)。 |
44| grid-auto-flow<sup>5+</sup>    | string         | -            | 否   | 使用框架自动布局算法进行网格的布局,可选值为:<br/>-&nbsp;row:逐行填充元素,如果行空间不够,则新增行;<br/>-&nbsp;column:逐列填充元素,如果列空间不够,则新增列。 |
45| overflow<sup>6+</sup>          | string         | visible      | 否   | 设置元素内容区超过元素本身大小时的表现形式。<br/>-&nbsp;visible:多个子元素内容超过元素大小时,显示在元素外面;<br/>-&nbsp;hidden:元素内容超过元素大小时,进行裁切显示;<br/>-&nbsp;scroll:元素内容超过元素大小时,进行滚动显示并展示滚动条(当前只支持纵向)。<br/>overflow:&nbsp;scroll样式需要元素设置固定的大小,默认滚动方向与容器方向一致。 |
46| align-items<sup>6+</sup>       | string         | -            | 否   | 设置容器中元素交叉轴上的对齐方式:<br/>-&nbsp;stretch:Flex容器内容在交叉轴方向被拉伸到与容器相同的高度或宽度;<br/>-&nbsp;flex-start:Flex布局容器内元素向交叉轴起点对齐;<br/>-&nbsp;flex-end:Flex布局容器内元素向交叉轴终点对齐;<br/>-&nbsp;center:Flex布局容器内元素在交叉轴居中对齐;<br/>-&nbsp;baseline:如Flex布局纵向排列,则该值与'flex-start'等效。横向布局时,内容元素存在文本时按照文本基线对齐,否则底部对齐。 |
47| scrollbar-color<sup>6+</sup>   | &lt;color&gt;  | -            | 否   | 设置滚动条的颜色。                                           |
48| scrollbar-width<sup>6+</sup>   | &lt;length&gt; | -            | 否   | 设置滚动条的宽度。                                           |
49| overscroll-effect<sup>6+</sup> | string         | -            | 否   | 设置滚动边缘效果,可选值为:<br/>-&nbsp;spring:弹性物理动效,滑动到边缘后可以根据初始速度或通过触摸事件继续滑动一段距离,松手后回弹;<br/>-&nbsp;fade:渐隐物理动效,滑动到边缘后展示一个波浪形的渐隐,根据速度和滑动距离的变化渐隐也会发送一定的变化;<br/>-&nbsp;none:滑动到边缘后无效果 |
50
51
52## 事件
53
54
55
56除支持[通用事件](js-components-common-events.md)外,还支持如下事件:
57
58| 名称                       | 参数   | 描述                                       |
59| ------------------------ | ---- | ---------------------------------------- |
60| reachstart<sup>6+</sup>  | -    | 当页面滑动到最开始的点时触发的事件回调,当flex-direction:&nbsp;row时才会触发。 |
61| reachend<sup>6+</sup>    | -    | 当页面滑动到最末尾的点时触发的事件回调,当flex-direction:&nbsp;row时才会触发。 |
62| reachtop<sup>6+</sup>    | -    | 当页面滑动到最上部的点时触发的事件回调,当flex-direction:&nbsp;column时才会触发。 |
63| reachbottom<sup>6+</sup> | -    | 当页面滑动到最下部的点时触发的事件回调,当flex-direction:&nbsp;column时才会触发。 |
64
65## 方法
66
67除支持[通用方法](js-components-common-methods.md)外,还支持如下方法:
68
69| 名称                           | 参数          | 返回值          | 描述                                      |
70| ---------------------------- | ----------- | ------------ | --------------------------------------- |
71| getScrollOffset<sup>6+</sup> | -           | ScrollOffset | 获取元素内容的滚动偏移。<br/>需要设置overflow样式为scroll。 |
72| scrollBy<sup>6+</sup>        | ScrollParam | -            | 指定元素内容的滚动偏移。<br/>需要设置overflow样式为scroll。 |
73
74**表1** ScrollOffset<sup>6+</sup>
75
76| 名称   | 类型     | 描述              |
77| ---- | ------ | --------------- |
78| x    | number | 在x轴方向的偏移,单位为px。 |
79| y    | number | 在y轴方向的偏移,单位为px。 |
80
81**表2** ScrollParam<sup>6+</sup>
82
83| 名称     | 类型      | 描述               |
84| ------ | ------- | ---------------- |
85| dx     | number  | 水平方向滑动的偏移量,单位px。 |
86| dy     | number  | 垂直方向滑动的偏移量,单位px。 |
87| smooth | boolean | 是否平滑处理。设置为true时表示平滑处理,设置为false时表示不平滑处理。         |
88
89
90## 示例
91
921. Flex样式
93   ```html
94   <!-- xxx.hml -->
95   <div class="container">
96     <div class="flex-box">
97       <div class="flex-item color-primary"></div>
98       <div class="flex-item color-warning"></div>
99       <div class="flex-item color-success"></div>
100     </div>
101   </div>
102   ```
103
104   ```css
105   /* xxx.css */
106   .container {
107     flex-direction: column;
108     justify-content: center;
109     align-items: center;
110     width: 454px;
111     height: 454px;
112   }
113   .flex-box {
114     justify-content: space-around;
115     align-items: center;
116     width: 400px;
117     height: 140px;
118     background-color: #ffffff;
119   }
120   .flex-item {
121     width: 120px;
122     height: 120px;
123     border-radius: 16px;
124   }
125   .color-primary {
126     background-color: #007dff;
127   }
128   .color-warning {
129     background-color: #ff7500;
130   }
131   .color-success {
132     background-color: #41ba41;
133   }
134   ```
135
136   ![zh-cn_image_0000001127285076](figures/zh-cn_image_0000001127285076.png)
137
1382. Flex Wrap样式
139   ```html
140   <!-- xxx.hml -->
141   <div class="container">
142     <div class="flex-box">
143       <div class="flex-item color-primary"></div>
144       <div class="flex-item color-warning"></div>
145       <div class="flex-item color-success"></div>
146     </div>
147   </div>
148   ```
149
150   ```css
151   /* xxx.css */
152   .container {
153     flex-direction: column;
154     justify-content: center;
155     align-items: center;
156     width: 454px;
157     height: 454px;
158   }
159   .flex-box {
160     justify-content: space-around;
161     align-items: center;
162     flex-wrap: wrap;
163     width: 300px;
164     height: 250px;
165     background-color: #ffffff;
166   }
167   .flex-item {
168     width: 120px;
169     height: 120px;
170     border-radius: 16px;
171   }
172   .color-primary {
173     background-color: #007dff;
174   }
175   .color-warning {
176     background-color: #ff7500;
177   }
178   .color-success {
179     background-color: #41ba41;
180   }
181   ```
182
183   ![zh-cn_image_0000001213396721](figures/zh-cn_image_0000001213396721.png)
184
1853. Grid样式
186
187   ```html
188   <!-- xxx.hml -->
189   <div class="common grid-parent">
190     <div class="grid-child grid-left-top"></div>
191     <div class="grid-child grid-left-bottom"></div>
192     <div class="grid-child grid-right-top"></div>
193     <div class="grid-child grid-right-bottom"></div>
194   </div>
195   ```
196
197   ```css
198   /* xxx.css */
199   .common {
200     width: 400px;
201     height: 400px;
202     background-color: #ffffff;
203     align-items: center;
204     justify-content: center;
205     margin: 24px;
206   }
207   .grid-parent {
208     display: grid;
209     grid-template-columns: 35% 35%;
210     grid-columns-gap: 24px;
211     grid-rows-gap: 24px;
212     grid-template-rows: 35% 35%;
213   }
214   .grid-child {
215     width: 100%;
216     height: 100%;
217     border-radius: 8px;
218   }
219   .grid-left-top {
220     grid-row-start: 0;
221     grid-column-start: 0;
222     grid-row-end: 0;
223     grid-column-end: 0;
224     background-color: #3f56ea;
225   }
226   .grid-left-bottom {
227     grid-row-start: 1;
228     grid-column-start: 0;
229     grid-row-end: 1;
230     grid-column-end: 0;
231     background-color: #00aaee;
232   }
233   .grid-right-top {
234     grid-row-start: 0;
235     grid-column-start: 1;
236     grid-row-end: 0;
237     grid-column-end: 1;
238     background-color: #00bfc9;
239   }
240   .grid-right-bottom {
241     grid-row-start: 1;
242     grid-column-start: 1;
243     grid-row-end: 1;
244     grid-column-end: 1;
245     background-color: #47cc47;
246   }
247   ```
248
249   ![zh-cn_image_0000001213276619](figures/zh-cn_image_0000001213276619.png)
250
2514. 拖拽<sup>7+</sup>
252   ```html
253   <!-- xxx.hml -->
254   <div class="container">
255     <div class="content" ondragstart="dragstart" ondrag="drag" ondragend="dragend" style="position: absolute;left: {{left}};top: {{top}};">
256     </div>
257   </div>
258   ```
259
260   ```css
261    /* xxx.css */
262    .container {
263    flex-direction: column;
264    width: 100%;
265    height: 100%;
266    }
267    .content {
268    width: 200px;
269    height: 200px;
270    background-color: red;
271    }
272   ```
273
274   ```js
275   // xxx.js
276   import promptAction from '@ohos.promptAction';
277   export default {
278     data:{
279       left:0,
280       top:0,
281     },
282     dragstart(e){
283       promptAction.showToast({
284         message: 'Start to be dragged'
285       })
286     },
287     drag(e){
288       this.left = e.globalX;
289       this.top = e.globalY;
290     },
291     dragend(e){
292       promptAction.showToast({
293         message: 'End Drag'
294       })
295     }
296   }
297   ```
298
299   ![zh-cn_image_0000001213284927](figures/zh-cn_image_0000001213284927.gif)
300
301   ```html
302   <!-- xxx.hml -->
303   <div class="container">
304     <div class="content" ondrag="drag" style="position: absolute;left: {{left}};top: {{top}};"></div>
305     <div style="width: 500px; height: 500px; background-color: yellow; position: fixed; left: 15%; top: 30%; opacity:0.3"
306       ondragenter="dragenter" ondragover="dragover" ondragleave="dragleave" ondrop="drop">
307     </div>
308   </div>
309   ```
310
311   ```css
312   /* xxx.css */
313   .container {
314     flex-direction: column;
315     width: 100%;
316     position: relative;
317     max-width: 100%;
318   }
319   .content{
320     width: 200px;
321     height: 200px;
322     background-color: red;
323     position: absolute;
324   }
325   ```
326
327   ```js
328   // xxx.js
329   import promptAction from '@ohos.promptAction';
330   export default {
331     data:{
332       left:0,
333       top:0,
334     },
335     drag(e){
336       this.left = e.globalX;
337       this.top = e.globalY;
338     },
339     dragenter(e){
340       promptAction.showToast({
341         message: 'enter'
342       })
343     },
344     dragover(e){
345       promptAction.showToast({
346         message: 'over'
347       })
348     },
349     dragleave(e){
350       promptAction.showToast({
351         message: 'leave'
352       })
353     },
354     drop(e){
355       promptAction.showToast({
356         message: 'drop'
357       })
358     }
359   }
360   ```
361
362   ![zh-cn_image_0000001168005276](figures/zh-cn_image_0000001168005276.gif)
363
3645. 手指捏合<sup>7+</sup>
365   ```html
366   <!-- xxx.hml -->
367   <div class="container">
368     <div class="content" onpinchstart="pinchstart" onpinchend="pinchend" onpinchupdate="pinchupdate"
369       onpinchcancel="pinchcancel">
370     </div>
371   </div>
372   ```
373
374   ```css
375   /* xxx.css */
376   .container {
377     flex-direction: column;
378     justify-content: center;
379     align-items: center;
380     width: 454px;
381     height: 454px;
382   }
383   .content {
384     width: 400px;
385     height: 400px;
386     background-color: aqua;
387     margin: 30px;
388   }
389   ```
390
391   ```js
392   // xxx.js
393   import promptAction from '@ohos.promptAction';
394   export default {
395     pinchstart(e){
396       promptAction.showToast({
397         message: 'pinchstart!!!'
398       })
399     },
400     pinchupdate(e){
401       promptAction.showToast({
402         message: 'Two-finger pinch update'
403       })
404     },
405     pinchend(e){
406       promptAction.showToast({
407         message: 'Finished with two fingers pinching'
408       })
409     },
410     pinchcancel(e){
411       promptAction.showToast({
412         message: 'Finger pinching is interrupted'
413       })
414     }
415   }
416   ```
417
418   ![zh-cn_image_0000001168440692](figures/zh-cn_image_0000001168440692.gif)
419