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 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