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 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci## Setting Styles 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ciSet the background color, border, and tab-content layout of the **<tabs>** 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 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci 108e41f4b71Sopenharmony_ci## Displaying the Tab Index 109e41f4b71Sopenharmony_ci 110e41f4b71Sopenharmony_ciAdd the **change** event for the **<tabs>** 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 145e41f4b71Sopenharmony_ci 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci> **NOTE** 148e41f4b71Sopenharmony_ci> 149e41f4b71Sopenharmony_ci> A **<tabs>** can wrap at most one [**<tab-bar>**](../reference/apis-arkui/arkui-js/js-components-container-tab-bar.md) and at most one [**<tab-content>**](../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 **<tabs>**, **<tab-bar>**, and **<tab-content>** 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