1e41f4b71Sopenharmony_ci# \<button> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ciThe **\<button>** component can be used to set a capsule, circle, text, arc, or download button. For details, see [button](../reference/apis-arkui/arkui-js/js-components-basic-button.md).
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci## Creating a \<button> Component
7e41f4b71Sopenharmony_ci
8e41f4b71Sopenharmony_ciCreate a **\<button>** component in the .hml file under **pages/index**.
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci```html
11e41f4b71Sopenharmony_ci<!-- xxx.hml -->
12e41f4b71Sopenharmony_ci<div class="container">       
13e41f4b71Sopenharmony_ci  <button  type="capsule" value="Capsule button"></button>
14e41f4b71Sopenharmony_ci</div>
15e41f4b71Sopenharmony_ci```
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci```css
18e41f4b71Sopenharmony_ci/* xxx.css */
19e41f4b71Sopenharmony_ci.container {
20e41f4b71Sopenharmony_ci  width: 100%;
21e41f4b71Sopenharmony_ci  height: 100%;
22e41f4b71Sopenharmony_ci  flex-direction: column;
23e41f4b71Sopenharmony_ci  justify-content: center;
24e41f4b71Sopenharmony_ci  align-items: center;
25e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
26e41f4b71Sopenharmony_ci}
27e41f4b71Sopenharmony_ci```
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci![en-us_image_0000001267887821](figures/en-us_image_0000001267887821.png)
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci## Setting the Button Type
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ciSet the **type** attribute of the **\<button>** component to **circle**, **text**, or any other supported value.
35e41f4b71Sopenharmony_ci
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci```html
38e41f4b71Sopenharmony_ci<!-- xxx.hml -->
39e41f4b71Sopenharmony_ci<div class="container">    
40e41f4b71Sopenharmony_ci  <button class="circle" type="circle" >+</button>
41e41f4b71Sopenharmony_ci  <button class="text" type="text"> button</button>
42e41f4b71Sopenharmony_ci</div>
43e41f4b71Sopenharmony_ci```
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci```css
47e41f4b71Sopenharmony_ci/* xxx.css */
48e41f4b71Sopenharmony_ci.container {  
49e41f4b71Sopenharmony_ci  width: 100%;
50e41f4b71Sopenharmony_ci  height: 100%;
51e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
52e41f4b71Sopenharmony_ci  flex-direction: column;
53e41f4b71Sopenharmony_ci  align-items: center;
54e41f4b71Sopenharmony_ci  justify-content: center;
55e41f4b71Sopenharmony_ci}
56e41f4b71Sopenharmony_ci.circle {
57e41f4b71Sopenharmony_ci  font-size: 120px;
58e41f4b71Sopenharmony_ci  background-color: blue;
59e41f4b71Sopenharmony_ci  radius: 72px;
60e41f4b71Sopenharmony_ci}
61e41f4b71Sopenharmony_ci.text {
62e41f4b71Sopenharmony_ci  margin-top: 30px;
63e41f4b71Sopenharmony_ci  text-color: white;
64e41f4b71Sopenharmony_ci  font-size: 30px;
65e41f4b71Sopenharmony_ci  font-style: normal;
66e41f4b71Sopenharmony_ci  background-color: blue;
67e41f4b71Sopenharmony_ci  width: 50%;
68e41f4b71Sopenharmony_ci  height: 100px;
69e41f4b71Sopenharmony_ci}
70e41f4b71Sopenharmony_ci```
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci![en-us_image_0000001222967744](figures/en-us_image_0000001222967744.png)
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci> **NOTE**
77e41f4b71Sopenharmony_ci> 
78e41f4b71Sopenharmony_ci>If the icon used by the **\<button>** component is from the cloud, you must declare the **ohos.permission.INTERNET** permission in the **config.json** file under the **resources** folder.
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ciSample code for declaring the **ohos.permission.INTERNET** permission in the **config.json** file under the **resources** folder:
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci```
85e41f4b71Sopenharmony_ci<!-- config.json -->
86e41f4b71Sopenharmony_ci"module": {
87e41f4b71Sopenharmony_ci  "reqPermissions": [{
88e41f4b71Sopenharmony_ci    "name": "ohos.permission.INTERNET"
89e41f4b71Sopenharmony_ci  }],
90e41f4b71Sopenharmony_ci}
91e41f4b71Sopenharmony_ci```
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci
94e41f4b71Sopenharmony_ci## Showing the Download Progress
95e41f4b71Sopenharmony_ci
96e41f4b71Sopenharmony_ciAdd the **progress** method to the **\<button>** component to display the download progress in real time.
97e41f4b71Sopenharmony_ci
98e41f4b71Sopenharmony_ci```html
99e41f4b71Sopenharmony_ci<!-- xxx.hml -->
100e41f4b71Sopenharmony_ci<div class="container">
101e41f4b71Sopenharmony_ci  <button class="button download" type="download" id="download-btn" onclick="setProgress">{{downloadText}}</button>
102e41f4b71Sopenharmony_ci</div>
103e41f4b71Sopenharmony_ci```
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci```css
106e41f4b71Sopenharmony_ci/* xxx.css */
107e41f4b71Sopenharmony_ci.container { 
108e41f4b71Sopenharmony_ci  width: 100%;
109e41f4b71Sopenharmony_ci  height: 100%;
110e41f4b71Sopenharmony_ci  background-color: #F1F3F5;  
111e41f4b71Sopenharmony_ci  flex-direction: column;
112e41f4b71Sopenharmony_ci  align-items: center;
113e41f4b71Sopenharmony_ci  justify-content: center;
114e41f4b71Sopenharmony_ci}
115e41f4b71Sopenharmony_ci.download {    
116e41f4b71Sopenharmony_ci  width: 280px;
117e41f4b71Sopenharmony_ci  text-color: white;
118e41f4b71Sopenharmony_ci  background-color: #007dff;
119e41f4b71Sopenharmony_ci}
120e41f4b71Sopenharmony_ci```
121e41f4b71Sopenharmony_ci
122e41f4b71Sopenharmony_ci```js
123e41f4b71Sopenharmony_ci// xxx.js
124e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
125e41f4b71Sopenharmony_ciexport default {
126e41f4b71Sopenharmony_ci  data: {
127e41f4b71Sopenharmony_ci    percent: 0,
128e41f4b71Sopenharmony_ci    downloadText: "Download",
129e41f4b71Sopenharmony_ci    isPaused: true,
130e41f4b71Sopenharmony_ci    intervalId : null,
131e41f4b71Sopenharmony_ci  },
132e41f4b71Sopenharmony_ci  start(){
133e41f4b71Sopenharmony_ci    this.intervalId = setInterval(()=>{
134e41f4b71Sopenharmony_ci      if(this.percent <100){
135e41f4b71Sopenharmony_ci        this.percent += 1;
136e41f4b71Sopenharmony_ci        this.downloadText = this.percent+ "%";
137e41f4b71Sopenharmony_ci       } else{
138e41f4b71Sopenharmony_ci         promptAction.showToast({
139e41f4b71Sopenharmony_ci            message: "Download succeeded."
140e41f4b71Sopenharmony_ci         })
141e41f4b71Sopenharmony_ci         this.paused()
142e41f4b71Sopenharmony_ci         this.downloadText = "Download";
143e41f4b71Sopenharmony_ci         this.percent = 0;
144e41f4b71Sopenharmony_ci         this.isPaused = true;
145e41f4b71Sopenharmony_ci       }
146e41f4b71Sopenharmony_ci    },100)
147e41f4b71Sopenharmony_ci  },
148e41f4b71Sopenharmony_ci  paused(){
149e41f4b71Sopenharmony_ci    clearInterval(this.intervalId);
150e41f4b71Sopenharmony_ci    this.intervalId = null;
151e41f4b71Sopenharmony_ci  },
152e41f4b71Sopenharmony_ci setProgress(e) {
153e41f4b71Sopenharmony_ci    if(this.isPaused){
154e41f4b71Sopenharmony_ci      promptAction.showToast({
155e41f4b71Sopenharmony_ci        message: "Started Downloading"
156e41f4b71Sopenharmony_ci      })
157e41f4b71Sopenharmony_ci      this.start();
158e41f4b71Sopenharmony_ci      this.isPaused = false;
159e41f4b71Sopenharmony_ci    }else{
160e41f4b71Sopenharmony_ci      promptAction.showToast({
161e41f4b71Sopenharmony_ci        message: "Paused."
162e41f4b71Sopenharmony_ci      })
163e41f4b71Sopenharmony_ci      this.paused();
164e41f4b71Sopenharmony_ci      this.isPaused = true;
165e41f4b71Sopenharmony_ci    }
166e41f4b71Sopenharmony_ci  }
167e41f4b71Sopenharmony_ci}
168e41f4b71Sopenharmony_ci```
169e41f4b71Sopenharmony_ci
170e41f4b71Sopenharmony_ci![en-us_image_0000001223287652](figures/en-us_image_0000001223287652.gif)
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci> **NOTE**
173e41f4b71Sopenharmony_ci>
174e41f4b71Sopenharmony_ci> The **setProgress** method supports only buttons of the download type.
175e41f4b71Sopenharmony_ci
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ci## Example Scenario
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ciSwitch between the button types for different types of text.
180e41f4b71Sopenharmony_ci
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_ci```html
183e41f4b71Sopenharmony_ci<!-- xxx.hml -->
184e41f4b71Sopenharmony_ci<div class="container">
185e41f4b71Sopenharmony_ci  <div class="input-item">
186e41f4b71Sopenharmony_ci    <input class="input-text" id="change" type="{{mytype}}"  placeholder="{{myholder}}" 
187e41f4b71Sopenharmony_ci      style="background-color:{{mystyle1}};
188e41f4b71Sopenharmony_ci      placeholder-color:{{mystyle2}};flex-grow:{{myflex}};"name="{{myname}}" value="{{myvalue}}"></input>
189e41f4b71Sopenharmony_ci  </div>
190e41f4b71Sopenharmony_ci  <div class="input-item">
191e41f4b71Sopenharmony_ci    <div class="doc-row">
192e41f4b71Sopenharmony_ci      <input type="button" class="select-button color-3" value="text" onclick="changetype3"></input>
193e41f4b71Sopenharmony_ci      <input type="button" class="select-button color-3" value="data" onclick="changetype4"></input>
194e41f4b71Sopenharmony_ci    </div>
195e41f4b71Sopenharmony_ci  </div>
196e41f4b71Sopenharmony_ci</div>
197e41f4b71Sopenharmony_ci```
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ci```css
201e41f4b71Sopenharmony_ci/* xxx.css */
202e41f4b71Sopenharmony_ci.container {
203e41f4b71Sopenharmony_ci  flex-direction: column;
204e41f4b71Sopenharmony_ci  align-items: center;
205e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
206e41f4b71Sopenharmony_ci}
207e41f4b71Sopenharmony_ci.input-item {
208e41f4b71Sopenharmony_ci  margin-bottom: 80px;
209e41f4b71Sopenharmony_ci  flex-direction: column;
210e41f4b71Sopenharmony_ci}
211e41f4b71Sopenharmony_ci.doc-row {
212e41f4b71Sopenharmony_ci  justify-content: center;
213e41f4b71Sopenharmony_ci  margin-left: 30px;
214e41f4b71Sopenharmony_ci  margin-right: 30px;
215e41f4b71Sopenharmony_ci  justify-content: space-around;
216e41f4b71Sopenharmony_ci}
217e41f4b71Sopenharmony_ci.input-text {
218e41f4b71Sopenharmony_ci  height: 80px;
219e41f4b71Sopenharmony_ci  line-height: 80px;
220e41f4b71Sopenharmony_ci  padding-left: 30px;
221e41f4b71Sopenharmony_ci  padding-right: 30px;
222e41f4b71Sopenharmony_ci  margin-left: 30px;
223e41f4b71Sopenharmony_ci  margin-right: 30px;
224e41f4b71Sopenharmony_ci  margin-top:100px;
225e41f4b71Sopenharmony_ci  border: 3px solid;
226e41f4b71Sopenharmony_ci  border-color: #999999;
227e41f4b71Sopenharmony_ci  font-size: 30px;
228e41f4b71Sopenharmony_ci  background-color: #ffffff;
229e41f4b71Sopenharmony_ci  font-weight: 400;
230e41f4b71Sopenharmony_ci}
231e41f4b71Sopenharmony_ci.select-button {
232e41f4b71Sopenharmony_ci  width: 35%;
233e41f4b71Sopenharmony_ci  text-align: center;
234e41f4b71Sopenharmony_ci  height: 70px;
235e41f4b71Sopenharmony_ci  padding-top: 10px;
236e41f4b71Sopenharmony_ci  padding-bottom: 10px;
237e41f4b71Sopenharmony_ci  margin-top: 30px;
238e41f4b71Sopenharmony_ci  font-size: 30px;
239e41f4b71Sopenharmony_ci  color: #ffffff;
240e41f4b71Sopenharmony_ci}
241e41f4b71Sopenharmony_ci.color-3 {
242e41f4b71Sopenharmony_ci  background-color: #0598db;;
243e41f4b71Sopenharmony_ci}
244e41f4b71Sopenharmony_ci```
245e41f4b71Sopenharmony_ci
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_ci```js
248e41f4b71Sopenharmony_ci// xxx.js
249e41f4b71Sopenharmony_ciexport default {
250e41f4b71Sopenharmony_ci  data: {
251e41f4b71Sopenharmony_ci    myflex: '',
252e41f4b71Sopenharmony_ci    myholder: 'Enter text.',
253e41f4b71Sopenharmony_ci    myname: '',
254e41f4b71Sopenharmony_ci    mystyle1: "#ffffff",
255e41f4b71Sopenharmony_ci    mystyle2: "#ff0000",
256e41f4b71Sopenharmony_ci    mytype: 'text',
257e41f4b71Sopenharmony_ci    myvalue: '',
258e41f4b71Sopenharmony_ci  },
259e41f4b71Sopenharmony_ci  onInit() {
260e41f4b71Sopenharmony_ci  },
261e41f4b71Sopenharmony_ci  changetype3() {
262e41f4b71Sopenharmony_ci    this.myflex = '';
263e41f4b71Sopenharmony_ci    this.myholder = 'Enter text.';
264e41f4b71Sopenharmony_ci    this.myname = '';
265e41f4b71Sopenharmony_ci    this.mystyle1 = "#ffffff";
266e41f4b71Sopenharmony_ci    this.mystyle2 = "#FF0000";
267e41f4b71Sopenharmony_ci    this.mytype = 'text';
268e41f4b71Sopenharmony_ci    this.myvalue = '';
269e41f4b71Sopenharmony_ci  },
270e41f4b71Sopenharmony_ci  changetype4() {
271e41f4b71Sopenharmony_ci    this.myflex = '';
272e41f4b71Sopenharmony_ci    this.myholder = 'Enter a date.';
273e41f4b71Sopenharmony_ci    this.myname = '';
274e41f4b71Sopenharmony_ci    this.mystyle1 = "#ffffff";
275e41f4b71Sopenharmony_ci    this.mystyle2 = "#FF0000";
276e41f4b71Sopenharmony_ci    this.mytype = 'date';
277e41f4b71Sopenharmony_ci    this.myvalue = '';
278e41f4b71Sopenharmony_ci  },
279e41f4b71Sopenharmony_ci}
280e41f4b71Sopenharmony_ci```
281e41f4b71Sopenharmony_ci
282e41f4b71Sopenharmony_ci
283e41f4b71Sopenharmony_ci![en-us_image_0000001222967740](figures/en-us_image_0000001222967740.gif)
284