1e41f4b71Sopenharmony_ci# <tabs> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThe **<tabs>** component is a common UI component for navigation. It allows quick access to different functions of an app. For details, see [tabs](../reference/apis-arkui/arkui-js/js-components-container-tabs.md).
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Creating Tabs
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciCreate a **<tabs>** component in the .hml file under **pages/index**.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci```html
12e41f4b71Sopenharmony_ci<!-- xxx.hml -->
13e41f4b71Sopenharmony_ci<div class="container">
14e41f4b71Sopenharmony_ci    <tabs>
15e41f4b71Sopenharmony_ci        <tab-bar>
16e41f4b71Sopenharmony_ci            <text>item1</text>
17e41f4b71Sopenharmony_ci            <text>item2</text>
18e41f4b71Sopenharmony_ci        </tab-bar>
19e41f4b71Sopenharmony_ci        <tab-content class="tabContent">
20e41f4b71Sopenharmony_ci            <div class="text">
21e41f4b71Sopenharmony_ci                <text>content1</text>
22e41f4b71Sopenharmony_ci            </div>
23e41f4b71Sopenharmony_ci            <div class="text">
24e41f4b71Sopenharmony_ci                <text>content2</text>
25e41f4b71Sopenharmony_ci            </div>
26e41f4b71Sopenharmony_ci        </tab-content>
27e41f4b71Sopenharmony_ci    </tabs>
28e41f4b71Sopenharmony_ci</div>
29e41f4b71Sopenharmony_ci```
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci```css
32e41f4b71Sopenharmony_ci/* xxx.css */
33e41f4b71Sopenharmony_ci.container {
34e41f4b71Sopenharmony_ci  flex-direction: column;
35e41f4b71Sopenharmony_ci  justify-content: center;
36e41f4b71Sopenharmony_ci  align-items: center;
37e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
38e41f4b71Sopenharmony_ci}
39e41f4b71Sopenharmony_ci.tabContent{
40e41f4b71Sopenharmony_ci  width: 100%;
41e41f4b71Sopenharmony_ci  height: 100%;
42e41f4b71Sopenharmony_ci}
43e41f4b71Sopenharmony_ci.text{
44e41f4b71Sopenharmony_ci  width: 100%;
45e41f4b71Sopenharmony_ci  height: 100%;
46e41f4b71Sopenharmony_ci  justify-content: center;
47e41f4b71Sopenharmony_ci  align-items: center;
48e41f4b71Sopenharmony_ci}
49e41f4b71Sopenharmony_ci```
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci![en-us_image_0000001223287676](figures/en-us_image_0000001223287676.gif)
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci## Setting Styles
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ciSet the background color, border, and tab-content layout of the **&lt;tabs&gt;** component.
57e41f4b71Sopenharmony_ci```html
58e41f4b71Sopenharmony_ci<!-- xxx.hml -->
59e41f4b71Sopenharmony_ci<div class="container">
60e41f4b71Sopenharmony_ci  <tabs class="tabs">
61e41f4b71Sopenharmony_ci    <tab-bar class="tabBar">
62e41f4b71Sopenharmony_ci      <text class="tabBarItem">item1</text>
63e41f4b71Sopenharmony_ci      <text class="tabBarItem">item2</text>
64e41f4b71Sopenharmony_ci    </tab-bar>
65e41f4b71Sopenharmony_ci    <tab-content class="tabContent">
66e41f4b71Sopenharmony_ci      <div class="tabContent">
67e41f4b71Sopenharmony_ci        <text>content1</text>
68e41f4b71Sopenharmony_ci      </div>
69e41f4b71Sopenharmony_ci      <div class="tabContent" >
70e41f4b71Sopenharmony_ci        <text>content2</text>
71e41f4b71Sopenharmony_ci      </div>
72e41f4b71Sopenharmony_ci    </tab-content>
73e41f4b71Sopenharmony_ci  </tabs>
74e41f4b71Sopenharmony_ci</div>
75e41f4b71Sopenharmony_ci```
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci```css
78e41f4b71Sopenharmony_ci/* xxx.css */
79e41f4b71Sopenharmony_ci.container {
80e41f4b71Sopenharmony_ci  flex-direction: column;
81e41f4b71Sopenharmony_ci  justify-content: flex-start;
82e41f4b71Sopenharmony_ci  align-items: center;
83e41f4b71Sopenharmony_ci background-color:#F1F3F5;
84e41f4b71Sopenharmony_ci}
85e41f4b71Sopenharmony_ci.tabs{
86e41f4b71Sopenharmony_ci  margin-top: 20px;
87e41f4b71Sopenharmony_ci border: 1px solid #2262ef;
88e41f4b71Sopenharmony_ci  width: 99%;
89e41f4b71Sopenharmony_ci  padding: 10px;
90e41f4b71Sopenharmony_ci}
91e41f4b71Sopenharmony_ci.tabBar{
92e41f4b71Sopenharmony_ci  width: 100%;
93e41f4b71Sopenharmony_ci  border: 1px solid #78abec;
94e41f4b71Sopenharmony_ci}
95e41f4b71Sopenharmony_ci.tabContent{
96e41f4b71Sopenharmony_ci  width: 100%;
97e41f4b71Sopenharmony_ci  margin-top: 10px;
98e41f4b71Sopenharmony_ci  height: 300px;
99e41f4b71Sopenharmony_ci  color: blue;   
100e41f4b71Sopenharmony_ci  justify-content: center;  
101e41f4b71Sopenharmony_ci  align-items: center;
102e41f4b71Sopenharmony_ci}
103e41f4b71Sopenharmony_ci```
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci![en-us_image_0000001267767857](figures/en-us_image_0000001267767857.gif)
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci## Displaying the Tab Index
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ciAdd the **change** event for the **&lt;tabs&gt;** component to display the index of the current tab after tab switching.
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci```html
113e41f4b71Sopenharmony_ci<!-- xxx.hml -->
114e41f4b71Sopenharmony_ci<div class="container" style="background-color:#F1F3F5;">
115e41f4b71Sopenharmony_ci  <tabs class="tabs" onchange="tabChange">
116e41f4b71Sopenharmony_ci    <tab-bar class="tabBar">
117e41f4b71Sopenharmony_ci      <text class="tabBarItem">item1</text>
118e41f4b71Sopenharmony_ci      <text class="tabBarItem">item2</text>
119e41f4b71Sopenharmony_ci    </tab-bar>
120e41f4b71Sopenharmony_ci    <tab-content class="tabContent">
121e41f4b71Sopenharmony_ci      <div>
122e41f4b71Sopenharmony_ci        <image src="common/images/bg-tv.jpg" style="object-fit: contain;"> </image>
123e41f4b71Sopenharmony_ci      </div>
124e41f4b71Sopenharmony_ci      <div>
125e41f4b71Sopenharmony_ci        <image src="common/images/img1.jpg" style="object-fit: contain;"> </image>
126e41f4b71Sopenharmony_ci      </div>
127e41f4b71Sopenharmony_ci    </tab-content>
128e41f4b71Sopenharmony_ci  </tabs>
129e41f4b71Sopenharmony_ci</div>
130e41f4b71Sopenharmony_ci```
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ci```js
133e41f4b71Sopenharmony_ci// xxx.js
134e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
135e41f4b71Sopenharmony_ciexport default {
136e41f4b71Sopenharmony_ci  tabChange(e){
137e41f4b71Sopenharmony_ci    promptAction.showToast({
138e41f4b71Sopenharmony_ci      message: "Tab index: " + e.index
139e41f4b71Sopenharmony_ci    })
140e41f4b71Sopenharmony_ci  }
141e41f4b71Sopenharmony_ci}
142e41f4b71Sopenharmony_ci```
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci![en-us_image_0000001222807772](figures/en-us_image_0000001222807772.gif)
145e41f4b71Sopenharmony_ci
146e41f4b71Sopenharmony_ci
147e41f4b71Sopenharmony_ci> **NOTE**
148e41f4b71Sopenharmony_ci>
149e41f4b71Sopenharmony_ci> A **&lt;tabs&gt;** can wrap at most one [**&lt;tab-bar&gt;**](../reference/apis-arkui/arkui-js/js-components-container-tab-bar.md)  and at most one [**&lt;tab-content&gt;**](../reference/apis-arkui/arkui-js/js-components-container-tab-content.md).
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci## Example Scenario
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ciIn this example, you can switch between tabs and the active tab has the title text in red with an underline below.
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ciUse the **&lt;tabs&gt;**, **&lt;tab-bar&gt;**, and **&lt;tab-content&gt;** components to implement tab switching. Then define the arrays and attributes. Add the **change** event to change the attribute values in the arrays so that the active tab has a different font color and an underline.
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci```html
159e41f4b71Sopenharmony_ci<!-- xxx.hml -->
160e41f4b71Sopenharmony_ci<div class="container">
161e41f4b71Sopenharmony_ci  <tabs onchange="changeTabactive">
162e41f4b71Sopenharmony_ci    <tab-content>
163e41f4b71Sopenharmony_ci      <div class="item-container" for="datas.list">
164e41f4b71Sopenharmony_ci        <div if="{{$item.title=='List1'?true:false}}">
165e41f4b71Sopenharmony_ci          <image src="common/images/bg-tv.jpg" style="object-fit: contain;"> </image>
166e41f4b71Sopenharmony_ci        </div>
167e41f4b71Sopenharmony_ci        <div if="{{$item.title=='List2'?true:false}}">
168e41f4b71Sopenharmony_ci          <image src="common/images/img1.jpg" style="object-fit: none;"> </image>
169e41f4b71Sopenharmony_ci        </div>
170e41f4b71Sopenharmony_ci        <div if="{{$item.title=='List3'?true:false}}">
171e41f4b71Sopenharmony_ci          <image src="common/images/img2.jpg" style="object-fit: contain;"> </image>
172e41f4b71Sopenharmony_ci        </div>
173e41f4b71Sopenharmony_ci      </div>
174e41f4b71Sopenharmony_ci    </tab-content>
175e41f4b71Sopenharmony_ci    <tab-bar class="tab_bar mytabs" mode="scrollable">
176e41f4b71Sopenharmony_ci      <div class="tab_item" for="datas.list">
177e41f4b71Sopenharmony_ci        <text style="color: {{$item.color}};">{{$item.title}}</text>
178e41f4b71Sopenharmony_ci        <div class="underline-show" if="{{$item.show}}"></div>
179e41f4b71Sopenharmony_ci        <div class="underline-hide" if="{{!$item.show}}"></div>
180e41f4b71Sopenharmony_ci      </div>
181e41f4b71Sopenharmony_ci    </tab-bar>
182e41f4b71Sopenharmony_ci  </tabs>
183e41f4b71Sopenharmony_ci</div>
184e41f4b71Sopenharmony_ci```
185e41f4b71Sopenharmony_ci
186e41f4b71Sopenharmony_ci```css
187e41f4b71Sopenharmony_ci/* xxx.css */
188e41f4b71Sopenharmony_ci.container{
189e41f4b71Sopenharmony_ciwidth: 100%;
190e41f4b71Sopenharmony_ciheight: 100%;
191e41f4b71Sopenharmony_cibackground-color:#F1F3F5;
192e41f4b71Sopenharmony_ci}
193e41f4b71Sopenharmony_ci.tab_bar {
194e41f4b71Sopenharmony_ci  width: 100%;
195e41f4b71Sopenharmony_ci  height: 150px;
196e41f4b71Sopenharmony_ci}
197e41f4b71Sopenharmony_ci.tab_item {
198e41f4b71Sopenharmony_ci  height: 30%;
199e41f4b71Sopenharmony_ci  flex-direction: column;
200e41f4b71Sopenharmony_ci  align-items: center;
201e41f4b71Sopenharmony_ci}
202e41f4b71Sopenharmony_ci.tab_item text {
203e41f4b71Sopenharmony_ci  font-size: 32px;
204e41f4b71Sopenharmony_ci}
205e41f4b71Sopenharmony_ci.item-container {
206e41f4b71Sopenharmony_ci  justify-content: center;
207e41f4b71Sopenharmony_ci  flex-direction: column;
208e41f4b71Sopenharmony_ci}
209e41f4b71Sopenharmony_ci.underline-show {
210e41f4b71Sopenharmony_ci  height: 2px;
211e41f4b71Sopenharmony_ci  width: 160px;
212e41f4b71Sopenharmony_ci  background-color: #FF4500;
213e41f4b71Sopenharmony_ci  margin-top: 7.5px;
214e41f4b71Sopenharmony_ci}
215e41f4b71Sopenharmony_ci.underline-hide {
216e41f4b71Sopenharmony_ci  height: 2px;
217e41f4b71Sopenharmony_ci  margin-top: 7.5px;
218e41f4b71Sopenharmony_ci  width: 160px;
219e41f4b71Sopenharmony_ci}
220e41f4b71Sopenharmony_ci```
221e41f4b71Sopenharmony_ci
222e41f4b71Sopenharmony_ci```js
223e41f4b71Sopenharmony_ci// xxx.js
224e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
225e41f4b71Sopenharmony_ciexport default {
226e41f4b71Sopenharmony_ci  data() {
227e41f4b71Sopenharmony_ci    return {
228e41f4b71Sopenharmony_ci      datas: {
229e41f4b71Sopenharmony_ci        color_normal: '#878787',
230e41f4b71Sopenharmony_ci        color_active: '#ff4500',
231e41f4b71Sopenharmony_ci        show: true,
232e41f4b71Sopenharmony_ci        list: [{
233e41f4b71Sopenharmony_ci          i: 0,
234e41f4b71Sopenharmony_ci          color: '#ff4500',
235e41f4b71Sopenharmony_ci          show: true,
236e41f4b71Sopenharmony_ci          title: 'List1'
237e41f4b71Sopenharmony_ci        }, {
238e41f4b71Sopenharmony_ci          i: 1,
239e41f4b71Sopenharmony_ci          color: '#878787',
240e41f4b71Sopenharmony_ci          show: false,
241e41f4b71Sopenharmony_ci          title: 'List2'
242e41f4b71Sopenharmony_ci        }, {
243e41f4b71Sopenharmony_ci           i: 2,
244e41f4b71Sopenharmony_ci           color: '#878787',
245e41f4b71Sopenharmony_ci           show: false,
246e41f4b71Sopenharmony_ci           title: 'List3'
247e41f4b71Sopenharmony_ci        }]
248e41f4b71Sopenharmony_ci      }
249e41f4b71Sopenharmony_ci    }
250e41f4b71Sopenharmony_ci  },
251e41f4b71Sopenharmony_ci  changeTabactive (e) {
252e41f4b71Sopenharmony_ci    for (let i = 0; i < this.datas.list.length; i++) {
253e41f4b71Sopenharmony_ci      let element = this.datas.list[i];
254e41f4b71Sopenharmony_ci      element.show = false;
255e41f4b71Sopenharmony_ci      element.color = this.datas.color_normal;
256e41f4b71Sopenharmony_ci      if (i === e.index) {
257e41f4b71Sopenharmony_ci        element.show = true;
258e41f4b71Sopenharmony_ci        element.color = this.datas.color_active;
259e41f4b71Sopenharmony_ci      }
260e41f4b71Sopenharmony_ci    }
261e41f4b71Sopenharmony_ci  }
262e41f4b71Sopenharmony_ci}
263e41f4b71Sopenharmony_ci```
264e41f4b71Sopenharmony_ci
265e41f4b71Sopenharmony_ci![en-us_image_tab.gif](figures/en-us_image_tab.gif)