1e41f4b71Sopenharmony_ci# Defining Attribute Style Animations
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci**Keyframes** is used to scale a component by dynamically setting the width and height of its parent component. Set the scale attribute for child components to scale the child and parent components at the same time. Then, set the opacity attribute to display or hide the child and parent components.
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci```html
8e41f4b71Sopenharmony_ci<!-- xxx.hml -->
9e41f4b71Sopenharmony_ci<div class="container">
10e41f4b71Sopenharmony_ci  <div class="fade">
11e41f4b71Sopenharmony_ci    <text>fading away</text>
12e41f4b71Sopenharmony_ci  </div>
13e41f4b71Sopenharmony_ci  <div class="bigger">
14e41f4b71Sopenharmony_ci    <text>getting bigger</text>
15e41f4b71Sopenharmony_ci  </div>
16e41f4b71Sopenharmony_ci</div>
17e41f4b71Sopenharmony_ci```
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci```css
21e41f4b71Sopenharmony_ci/* xxx.css */
22e41f4b71Sopenharmony_ci.container {
23e41f4b71Sopenharmony_ci  background-color:#F1F3F5;
24e41f4b71Sopenharmony_ci  display: flex;
25e41f4b71Sopenharmony_ci  justify-content: center;
26e41f4b71Sopenharmony_ci  align-items: center;
27e41f4b71Sopenharmony_ci  flex-direction: column;
28e41f4b71Sopenharmony_ci  width: 100%;
29e41f4b71Sopenharmony_ci  height: 100%;
30e41f4b71Sopenharmony_ci}
31e41f4b71Sopenharmony_ci.fade {
32e41f4b71Sopenharmony_ci  width: 30%;
33e41f4b71Sopenharmony_ci  height: 200px;
34e41f4b71Sopenharmony_ci  left: 35%;
35e41f4b71Sopenharmony_ci  top: 25%;
36e41f4b71Sopenharmony_ci  position: absolute;
37e41f4b71Sopenharmony_ci  animation: 2s change infinite friction;
38e41f4b71Sopenharmony_ci}
39e41f4b71Sopenharmony_ci.bigger {
40e41f4b71Sopenharmony_ci  width: 20%;
41e41f4b71Sopenharmony_ci  height: 100px;
42e41f4b71Sopenharmony_ci  background-color: blue;
43e41f4b71Sopenharmony_ci  animation: 2s change1 infinite linear-out-slow-in;
44e41f4b71Sopenharmony_ci}
45e41f4b71Sopenharmony_citext {
46e41f4b71Sopenharmony_ci  width: 100%;
47e41f4b71Sopenharmony_ci  height: 100%;
48e41f4b71Sopenharmony_ci  text-align: center;
49e41f4b71Sopenharmony_ci  color: white;
50e41f4b71Sopenharmony_ci  font-size: 35px;
51e41f4b71Sopenharmony_ci  animation: 2s change2 infinite linear-out-slow-in;
52e41f4b71Sopenharmony_ci}
53e41f4b71Sopenharmony_ci/* Color change */
54e41f4b71Sopenharmony_ci@keyframes change{
55e41f4b71Sopenharmony_ci  from {
56e41f4b71Sopenharmony_ci    background-color: #f76160;
57e41f4b71Sopenharmony_ci    opacity: 1;
58e41f4b71Sopenharmony_ci  }
59e41f4b71Sopenharmony_ci  to {
60e41f4b71Sopenharmony_ci    background-color: #09ba07;
61e41f4b71Sopenharmony_ci    opacity: 0;
62e41f4b71Sopenharmony_ci  }
63e41f4b71Sopenharmony_ci}
64e41f4b71Sopenharmony_ci/* Scaling of the parent component */
65e41f4b71Sopenharmony_ci@keyframes change1 {
66e41f4b71Sopenharmony_ci  0% {
67e41f4b71Sopenharmony_ci    width: 20%;
68e41f4b71Sopenharmony_ci    height: 100px;
69e41f4b71Sopenharmony_ci  }
70e41f4b71Sopenharmony_ci  100% {
71e41f4b71Sopenharmony_ci    width: 80%;
72e41f4b71Sopenharmony_ci    height: 200px;
73e41f4b71Sopenharmony_ci  }
74e41f4b71Sopenharmony_ci}
75e41f4b71Sopenharmony_ci/* Text scaling of the child component */
76e41f4b71Sopenharmony_ci@keyframes change2 {
77e41f4b71Sopenharmony_ci  0% {
78e41f4b71Sopenharmony_ci    transform: scale(0);
79e41f4b71Sopenharmony_ci  }
80e41f4b71Sopenharmony_ci  100% {
81e41f4b71Sopenharmony_ci    transform: scale(1.5);
82e41f4b71Sopenharmony_ci  }
83e41f4b71Sopenharmony_ci}
84e41f4b71Sopenharmony_ci```
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci![en-us_image_0000001217168141](figures/en-us_image_0000001217168141.gif)
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci> **NOTE**
91e41f4b71Sopenharmony_ci> - The values of animation attributes are not sequenced. However, the values of duration and delay are parsed based on the sequence in which they are displayed.
92e41f4b71Sopenharmony_ci> 
93e41f4b71Sopenharmony_ci> - The **animation-duration** attribute must be set. Otherwise, the duration is 0, which means there is no animation effect. When **animation-fill-mode** is set to **forwards**, the component directly displays the style of the last frame.
94