• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (213)
      • react & next.js (13)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [ CSS loading icon ] Windows 로딩 아이콘
        2023년 09월 20일
        • 루루개발자
        • 작성자
        • 2023.09.20.:05
        반응형

        Windows 에서 종종 봐왔던 로딩 애니메이션을 css 로 한번 비슷하게 만들어보았습니다. 위 GIF 이미지는 속도가 좀 느려 보이는데, 실제 적용하면 저것 보단 빠르게 동작합니다. ㅎㅎ; 아래 html 과 css 코드를 공유합니다.

         

        html

        <div class="loading-icon">
          <div>
            <div>
              <div><div></div></div>
              <div><div></div></div>
              <div><div></div></div>
              <div><div></div></div>
              <div><div></div></div>
              <div><div></div></div>
            </div>
          </div>
        </div>

         

        css

        .loading-icon {
          /* variables */
          --main-size: 40px;
          --item-color: #000000;
        
          width: var(--main-size);
          height: var(--main-size);
          display: inline-block;
          position: relative;
        }
        .loading-icon > div {
          width: 100%;
          height: 100%;
          position: relative;
          display: flex;
          justify-content: center;
          align-items: center;
        }
        .loading-icon > div > div {
          width: 0;
          height: 0;
          top: 50%;
          left: 50%;
          position: absolute;
          --this-deg: 0deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-body-animation 5s linear 0ms infinite normal both;
        }
        .loading-icon > div > div > div {
          width: 0;
          height: 0;
          --circle-width: calc(var(--main-size) / 7);
          --circle-height: calc(var(--main-size) / 7);
        }
        .loading-icon > div > div > div > div {
          width: var(--circle-width);
          height: var(--circle-height);
          display: block;
          background-color: var(--item-color);
          border-radius: calc(var(--main-size) * 10);
          position: absolute;
          top: calc(var(--circle-height) / -2);
          left: calc(var(--circle-width) / -2);
          transform: translateY(calc((var(--main-size) / -2) + calc(var(--circle-width) / 2)))
        }
        
        .loading-icon > div > div > div:nth-child(1) {
          --this-deg: 0deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 500ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 700ms infinite normal both;
        }
        .loading-icon > div > div > div:nth-child(2) {
          --this-deg: 30deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 440ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 580ms infinite normal both;
        }
        .loading-icon > div > div > div:nth-child(3) {
          --this-deg: 60deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 360ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 450ms infinite normal both;
        }
        .loading-icon > div > div > div:nth-child(4) {
          --this-deg: 90deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 260ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 310ms infinite normal both;
        }
        .loading-icon > div > div > div:nth-child(5) {
          --this-deg: 120deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 140ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 160ms infinite normal both;
        }
        .loading-icon > div > div > div:nth-child(6) {
          --this-deg: 150deg;
          transform: rotate(var(--this-deg));
          animation: loading-icon-div-animation 3s cubic-bezier(.17,.67,.45,.99) 0ms infinite normal both, loading-icon-div-opacity-animation 6s cubic-bezier(.17,.67,.45,.99) 0ms infinite normal both;
        }
        
        @keyframes loading-icon-div-body-animation {
          0% {
            transform: rotate(var(--this-deg));
          } 
          100% {
            transform: rotate(calc(var(--this-deg) + 360deg));
          }
        }
        @keyframes loading-icon-div-animation {
          0% {
            transform: rotate(var(--this-deg));
          }
          50% {
            transform: rotate(calc(var(--this-deg) + 180deg));
          }
          100% {
            transform: rotate(calc(var(--this-deg) + 360deg));
          }
        }
        @keyframes loading-icon-div-opacity-animation {
          0% {
            opacity: 1;
          }
          53% {
            opacity: 1;
          }
          54% {
            opacity: 0; 
          }
          75% {
            opacity: 0;
          }
          76% {
            opacity: 1;
          }
          100% {
            opacity: 1;
          }
        }

        --main-size : 로딩 아이콘의 너비, 높이를 조정하실 수 있습니다.

        --item-color : 로딩 아이콘 요소들의 색상을 조정하실 수 있습니다.

         

        반응형
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바