1e41f4b71Sopenharmony_ci# <list> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThe **<list>** component provides a list container that presents a series of list items arranged in a column with the same width. Lists can be used for presenting the same type of data in a multiple and coherent row style. For details, see [list](../reference/apis-arkui/arkui-js/js-components-container-list.md).
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Creating a <list> Component
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciCreate a **<list>** component in the .hml file under **pages/index**.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci```html
12e41f4b71Sopenharmony_ci<!-- xxx.hml -->
13e41f4b71Sopenharmony_ci<div class="container"> 
14e41f4b71Sopenharmony_ci <list>    
15e41f4b71Sopenharmony_ci   <list-item class="listItem"></list-item>
16e41f4b71Sopenharmony_ci   <list-item class="listItem"></list-item>
17e41f4b71Sopenharmony_ci   <list-item class="listItem"></list-item>
18e41f4b71Sopenharmony_ci   <list-item class="listItem"></list-item>
19e41f4b71Sopenharmony_ci </list>
20e41f4b71Sopenharmony_ci</div>
21e41f4b71Sopenharmony_ci```
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ci```css
24e41f4b71Sopenharmony_ci/* xxx.css */
25e41f4b71Sopenharmony_ci.container {
26e41f4b71Sopenharmony_ci  width:100%;
27e41f4b71Sopenharmony_ci  height:100%;
28e41f4b71Sopenharmony_ci  flex-direction: column;
29e41f4b71Sopenharmony_ci  align-items: center;
30e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
31e41f4b71Sopenharmony_ci}
32e41f4b71Sopenharmony_ci.listItem{
33e41f4b71Sopenharmony_ci  height: 20%;
34e41f4b71Sopenharmony_ci  background-color:#d2e0e0;
35e41f4b71Sopenharmony_ci  margin-top: 20px;
36e41f4b71Sopenharmony_ci}
37e41f4b71Sopenharmony_ci```
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci![en-us_image_0000001223287680](figures/en-us_image_0000001223287680.png)
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci> **NOTE**
42e41f4b71Sopenharmony_ci> - **&lt;list-item-group&gt;** is a child component of the **&lt;list&gt;** component and is used to group items in a list. It can have a **&lt;list-item&gt;** nested inside, but not **&lt;list&gt;**.
43e41f4b71Sopenharmony_ci> 
44e41f4b71Sopenharmony_ci> - **&lt;list-item&gt;** is a child component of the **&lt;list&gt;** component and is used to display items in a list.
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci## Adding a Scrollbar
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ciTo display a scrollbar on the right side of the screen, set **scrollbar** to **on**. The side scrollbar can be used to scroll a long list or the screen up or down.
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci```html
52e41f4b71Sopenharmony_ci<!-- xxx.hml -->
53e41f4b71Sopenharmony_ci<div class="container">
54e41f4b71Sopenharmony_ci  <list class="listCss" scrollbar="on" >
55e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
56e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
57e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
58e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
59e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
60e41f4b71Sopenharmony_ci    <list-item class="listItem"></list-item>
61e41f4b71Sopenharmony_ci </list>
62e41f4b71Sopenharmony_ci</div> 
63e41f4b71Sopenharmony_ci```
64e41f4b71Sopenharmony_ci
65e41f4b71Sopenharmony_ci```css
66e41f4b71Sopenharmony_ci/* xxx.css */
67e41f4b71Sopenharmony_ci.container {
68e41f4b71Sopenharmony_ci  flex-direction: column;
69e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
70e41f4b71Sopenharmony_ci}
71e41f4b71Sopenharmony_ci.listItem{
72e41f4b71Sopenharmony_ci  height: 20%;
73e41f4b71Sopenharmony_ci  background-color:#d2e0e0;
74e41f4b71Sopenharmony_ci  margin-top: 20px;
75e41f4b71Sopenharmony_ci}
76e41f4b71Sopenharmony_ci.listCss{
77e41f4b71Sopenharmony_ci  height: 100%;
78e41f4b71Sopenharmony_ci  scrollbar-color: #8e8b8b;
79e41f4b71Sopenharmony_ci  scrollbar-width: 50px;
80e41f4b71Sopenharmony_ci}
81e41f4b71Sopenharmony_ci```
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci![en-us_image_0000001223287684](figures/en-us_image_0000001223287684.gif)
84e41f4b71Sopenharmony_ci
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_ci## Adding a Side Index Bar
87e41f4b71Sopenharmony_ci
88e41f4b71Sopenharmony_ciSet a custom **indexer** component to add an index bar at the right boundary of a list. By default, an alphabetical indexer is used.
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci```html
91e41f4b71Sopenharmony_ci<!-- xxx.hml -->
92e41f4b71Sopenharmony_ci<div class="container">   
93e41f4b71Sopenharmony_ci  <list class="listCss"  indexer="{{['#','1','2','3','4','5','6','7','8']}}" >  
94e41f4b71Sopenharmony_ci    <list-item class="listItem"  section="#" ></list-item>   
95e41f4b71Sopenharmony_ci  </list>
96e41f4b71Sopenharmony_ci</div>
97e41f4b71Sopenharmony_ci```
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci```css
100e41f4b71Sopenharmony_ci/* xxx.css */
101e41f4b71Sopenharmony_ci.container{
102e41f4b71Sopenharmony_ci  flex-direction: column;
103e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
104e41f4b71Sopenharmony_ci } 
105e41f4b71Sopenharmony_ci.listCss{
106e41f4b71Sopenharmony_ci  height: 100%;    
107e41f4b71Sopenharmony_ci  flex-direction: column;
108e41f4b71Sopenharmony_ci  columns: 1
109e41f4b71Sopenharmony_ci}
110e41f4b71Sopenharmony_ci```
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci![en-us_image_0000001223127716](figures/en-us_image_0000001223127716.png)
113e41f4b71Sopenharmony_ci
114e41f4b71Sopenharmony_ci> **NOTE**
115e41f4b71Sopenharmony_ci> - This **indexer** attribute is valid only when **flex-direction** is set to **column** and **columns** is set to **1**.
116e41f4b71Sopenharmony_ci> 
117e41f4b71Sopenharmony_ci> - You must include **"\#"** when using a customized indexer.
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci## Collapsing or Expanding a List
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ciTo allow a **&lt;list&gt;** component to collapse and expand, add **groupcollapse** and **groupexpand** events.
123e41f4b71Sopenharmony_ci
124e41f4b71Sopenharmony_ci```html
125e41f4b71Sopenharmony_ci<!-- xxx.hml -->
126e41f4b71Sopenharmony_ci<div class="doc-page">
127e41f4b71Sopenharmony_ci  <list style="width: 100%;" id="mylist">
128e41f4b71Sopenharmony_ci    <list-item-group for="listgroup in list" id="{{listgroup.value}}" ongroupcollapse="collapse" ongroupexpand="expand">
129e41f4b71Sopenharmony_ci      <list-item type="item" style="background-color:#FFF0F5;height:95px;">
130e41f4b71Sopenharmony_ci        <div class="item-group-child">
131e41f4b71Sopenharmony_ci          <text>One---{{listgroup.value}}</text>
132e41f4b71Sopenharmony_ci        </div>
133e41f4b71Sopenharmony_ci      </list-item>
134e41f4b71Sopenharmony_ci      <list-item type="item" style="background-color: #87CEFA;height:145px;" primary="true">
135e41f4b71Sopenharmony_ci        <div class="item-group-child">
136e41f4b71Sopenharmony_ci          <text>Primary---{{listgroup.value}}</text>
137e41f4b71Sopenharmony_ci        </div>
138e41f4b71Sopenharmony_ci      </list-item>
139e41f4b71Sopenharmony_ci    </list-item-group>
140e41f4b71Sopenharmony_ci  </list>
141e41f4b71Sopenharmony_ci</div>
142e41f4b71Sopenharmony_ci```
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci```css
145e41f4b71Sopenharmony_ci/* xxx.css */
146e41f4b71Sopenharmony_ci.doc-page {
147e41f4b71Sopenharmony_ci  flex-direction: column;
148e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
149e41f4b71Sopenharmony_ci}
150e41f4b71Sopenharmony_cilist-item{
151e41f4b71Sopenharmony_cimargin-top:30px;
152e41f4b71Sopenharmony_ci}
153e41f4b71Sopenharmony_ci.top-list-item {
154e41f4b71Sopenharmony_ci  width:100%;
155e41f4b71Sopenharmony_ci  background-color:#D4F2E7;
156e41f4b71Sopenharmony_ci}
157e41f4b71Sopenharmony_ci.item-group-child {
158e41f4b71Sopenharmony_ci  justify-content: center;
159e41f4b71Sopenharmony_ci  align-items: center;
160e41f4b71Sopenharmony_ci  width:100%;
161e41f4b71Sopenharmony_ci}
162e41f4b71Sopenharmony_ci```
163e41f4b71Sopenharmony_ci
164e41f4b71Sopenharmony_ci```js
165e41f4b71Sopenharmony_ci// xxx.js
166e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
167e41f4b71Sopenharmony_ciexport default {
168e41f4b71Sopenharmony_ci  data: {
169e41f4b71Sopenharmony_ci    direction: 'column',
170e41f4b71Sopenharmony_ci    list: []
171e41f4b71Sopenharmony_ci  },
172e41f4b71Sopenharmony_ci  onInit() {
173e41f4b71Sopenharmony_ci    this.list = []
174e41f4b71Sopenharmony_ci    this.listAdd = []
175e41f4b71Sopenharmony_ci    for (var i = 1; i <= 2; i++) {
176e41f4b71Sopenharmony_ci      var dataItem = {
177e41f4b71Sopenharmony_ci        value: 'GROUP' + i,
178e41f4b71Sopenharmony_ci      };
179e41f4b71Sopenharmony_ci        this.list.push(dataItem);
180e41f4b71Sopenharmony_ci    }
181e41f4b71Sopenharmony_ci  },
182e41f4b71Sopenharmony_ci  collapse(e) {
183e41f4b71Sopenharmony_ci    promptAction.showToast({
184e41f4b71Sopenharmony_ci      message: 'Close ' + e.groupid
185e41f4b71Sopenharmony_ci    })
186e41f4b71Sopenharmony_ci  },
187e41f4b71Sopenharmony_ci  expand(e) {
188e41f4b71Sopenharmony_ci    promptAction.showToast({
189e41f4b71Sopenharmony_ci    message: 'Open ' + e.groupid
190e41f4b71Sopenharmony_ci    })
191e41f4b71Sopenharmony_ci  }
192e41f4b71Sopenharmony_ci}
193e41f4b71Sopenharmony_ci```
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci![en-us_image_0000001267887845](figures/en-us_image_0000001267887845.gif)
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci> **NOTE**
198e41f4b71Sopenharmony_ci>
199e41f4b71Sopenharmony_ci> The **groupcollapse** and **groupexpand** events can be used only by the **list-item-group** component.
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci
202e41f4b71Sopenharmony_ci## Example Scenario
203e41f4b71Sopenharmony_ci
204e41f4b71Sopenharmony_ciSearch for contacts by using an alphabetical indexer.
205e41f4b71Sopenharmony_ci
206e41f4b71Sopenharmony_ci
207e41f4b71Sopenharmony_ci```html
208e41f4b71Sopenharmony_ci<!-- xxx.hml -->
209e41f4b71Sopenharmony_ci<div class="doc-page"> 
210e41f4b71Sopenharmony_ci  <text style="font-size: 35px; font-weight: 500; text-align: center; margin-top: 20px; margin-bottom: 20px;"> 
211e41f4b71Sopenharmony_ci      <span>Contacts</span> 
212e41f4b71Sopenharmony_ci  </text> 
213e41f4b71Sopenharmony_ci  <list class="list" indexer="true"> 
214e41f4b71Sopenharmony_ci    <list-item class="item" for="{{namelist}}" type="{{$item.section}}" section="{{$item.section}}"> 
215e41f4b71Sopenharmony_ci      <div class="container"> 
216e41f4b71Sopenharmony_ci        <div class="in-container"> 
217e41f4b71Sopenharmony_ci          <text class="name">{{$item.name}}</text> 
218e41f4b71Sopenharmony_ci          <text class="number">18888888888</text> 
219e41f4b71Sopenharmony_ci        </div> 
220e41f4b71Sopenharmony_ci      </div> 
221e41f4b71Sopenharmony_ci    </list-item> 
222e41f4b71Sopenharmony_ci    <list-item type="end" class="item"> 
223e41f4b71Sopenharmony_ci      <div style="align-items:center;justify-content:center;width:750px;"> 
224e41f4b71Sopenharmony_ci        <text style="text-align: center;">Total: 10</text> 
225e41f4b71Sopenharmony_ci      </div> 
226e41f4b71Sopenharmony_ci    </list-item> 
227e41f4b71Sopenharmony_ci  </list> 
228e41f4b71Sopenharmony_ci</div>
229e41f4b71Sopenharmony_ci```
230e41f4b71Sopenharmony_ci
231e41f4b71Sopenharmony_ci
232e41f4b71Sopenharmony_ci```css
233e41f4b71Sopenharmony_ci/* xxx.css */
234e41f4b71Sopenharmony_ci.doc-page {
235e41f4b71Sopenharmony_ci  width: 100%;
236e41f4b71Sopenharmony_ci  height: 100%;
237e41f4b71Sopenharmony_ci  flex-direction: column;
238e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
239e41f4b71Sopenharmony_ci}
240e41f4b71Sopenharmony_ci.list {
241e41f4b71Sopenharmony_ci  width: 100%;
242e41f4b71Sopenharmony_ci  height: 90%;
243e41f4b71Sopenharmony_ci  flex-grow: 1;
244e41f4b71Sopenharmony_ci}
245e41f4b71Sopenharmony_ci.item {
246e41f4b71Sopenharmony_ci  height: 120px;
247e41f4b71Sopenharmony_ci  padding-left: 10%;
248e41f4b71Sopenharmony_ci  border-top: 1px solid #dcdcdc;
249e41f4b71Sopenharmony_ci}
250e41f4b71Sopenharmony_ci.name {
251e41f4b71Sopenharmony_ci  color: #000000;
252e41f4b71Sopenharmony_ci  font-size: 39px;
253e41f4b71Sopenharmony_ci}
254e41f4b71Sopenharmony_ci.number {
255e41f4b71Sopenharmony_ci  color: black;
256e41f4b71Sopenharmony_ci  font-size: 25px;
257e41f4b71Sopenharmony_ci}
258e41f4b71Sopenharmony_ci.container {
259e41f4b71Sopenharmony_ci  flex-direction: row;
260e41f4b71Sopenharmony_ci  align-items: center;
261e41f4b71Sopenharmony_ci}
262e41f4b71Sopenharmony_ci.in-container {
263e41f4b71Sopenharmony_ci  flex-direction: column;
264e41f4b71Sopenharmony_ci  justify-content: space-around;
265e41f4b71Sopenharmony_ci}
266e41f4b71Sopenharmony_ci```
267e41f4b71Sopenharmony_ci
268e41f4b71Sopenharmony_ci
269e41f4b71Sopenharmony_ci```js
270e41f4b71Sopenharmony_ci// xxx.js
271e41f4b71Sopenharmony_ciexport default { 
272e41f4b71Sopenharmony_ci   data: { 
273e41f4b71Sopenharmony_ci     namelist:[{ 
274e41f4b71Sopenharmony_ci       name: 'Zoey', 
275e41f4b71Sopenharmony_ci       section:'Z' 
276e41f4b71Sopenharmony_ci     },{ 
277e41f4b71Sopenharmony_ci       name: 'Quin', 
278e41f4b71Sopenharmony_ci       section:'Q' 
279e41f4b71Sopenharmony_ci     },{ 
280e41f4b71Sopenharmony_ci       name:'Sam', 
281e41f4b71Sopenharmony_ci       section:'S' 
282e41f4b71Sopenharmony_ci     },{ 
283e41f4b71Sopenharmony_ci       name:'Leo', 
284e41f4b71Sopenharmony_ci       section:'L' 
285e41f4b71Sopenharmony_ci     },{ 
286e41f4b71Sopenharmony_ci       name:'Zach', 
287e41f4b71Sopenharmony_ci       section:'Z' 
288e41f4b71Sopenharmony_ci     },{ 
289e41f4b71Sopenharmony_ci       name:'Wade', 
290e41f4b71Sopenharmony_ci       section:'W' 
291e41f4b71Sopenharmony_ci     },{ 
292e41f4b71Sopenharmony_ci       name:'Zoe', 
293e41f4b71Sopenharmony_ci       section:'Z' 
294e41f4b71Sopenharmony_ci     },{ 
295e41f4b71Sopenharmony_ci        name:'Warren', 
296e41f4b71Sopenharmony_ci        section:'W' 
297e41f4b71Sopenharmony_ci     },{ 
298e41f4b71Sopenharmony_ci        name:'Kyle', 
299e41f4b71Sopenharmony_ci        section:'K' 
300e41f4b71Sopenharmony_ci     },{ 
301e41f4b71Sopenharmony_ci       name:'Zaneta', 
302e41f4b71Sopenharmony_ci       section:'Z' 
303e41f4b71Sopenharmony_ci     }] 
304e41f4b71Sopenharmony_ci   }, 
305e41f4b71Sopenharmony_ci   onInit() { 
306e41f4b71Sopenharmony_ci   } 
307e41f4b71Sopenharmony_ci }
308e41f4b71Sopenharmony_ci```
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_ci
311e41f4b71Sopenharmony_ci![en-us_image_0000001267767861](figures/en-us_image_0000001267767861.gif)