본문 바로가기

프론트엔드/CSS

CSS 컴포넌트 - 로딩

반응형

CSS 애니메이션을 사용해서 로딩 효과를 만들어보겠습니다.

구현

로딩효과를 추가할 요소를 아래와 같이 추가합니다.

<!-- index.html -->

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Document</title>

  <!-- custom style -->
  <link rel="stylesheet" href="main.css" />
  <script defer src="index.js"></script>
</head>

<body>
  <div class="loading"></div>
</body>

</html>

해당 컴포넌트는 애니메이션의 딜레이 효과와 before 및 after Selector를 사용하고 시간차로 효과를 주어 하나의 요소만 사용하여 로딩효과를 완성하였습니다.

/* main.css */

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

.loading {    
  border: 30px solid transparent;
  border-radius: 50%;
  position: relative;
  border-bottom-color: lightcoral;
  animation: rotate 2s cubic-bezier(0.075, 0.82, 0.165, 1) infinite;  
}

.loading::before {
  content: '';  
  border-radius: 50%;
  position: absolute;
  top: -22.5px;
  left: -22.5px;
  border: 22.5px solid transparent;
  border-bottom-color: lightskyblue;  
  animation: rotate 2s .5s cubic-bezier(0.075, 0.82, 0.165, 1) infinite;
}

.loading::after {
  content: '';
  border-radius: 50%;
  position: absolute;
  top: -15px;
  left: -15px;
  border: 15px solid transparent;
  border-bottom-color: lightgreen;  
  animation: rotate 2s 1s cubic-bezier(0.075, 0.82, 0.165, 1) infinite;
}

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }

  20% {
    transform: rotate(90deg);
  }

  40% {
    transform: rotate(180deg);
  }
  
  60% {
    transform: rotate(270deg);
  }    
  
  100% {
    transform: rotate(360deg);
  }
}

이상으로 CSS 애니메이션을 사용하여 로딩효과를 만들어 보았습니다.

728x90
반응형

'프론트엔드 > CSS' 카테고리의 다른 글

기본 스타일 - 리셋  (0) 2023.01.28
단위  (0) 2023.01.03
Inline VS Block and Inline-block  (0) 2022.12.30
Absolute  (0) 2022.12.29
Fixed  (0) 2022.12.29