본문 바로가기
HTML CSS

HTML CSS 만으로 로딩중 화면 꾸미기! (+코드예제)

by 규루리 2025. 4. 8.

웹사이트에 로딩 중 이미지를 만드는 이유

웹사이트나 애플리케이션을 사용할 때, 페이지가 로딩되는 동안 사용자가 아무것도 하지 않고 기다리게 되는 순간이 있습니다. 이때 사용자가 기다리고 있다는 사실을 시각적으로 알려주는 로딩 중 애니메이션을 사용하는 것은 매우 중요한 요소입니다. 특히 HTML과 CSS로 로딩 중 이미지를 만들면 사용자 경험을 크게 향상시킬 수 있습니다. 이제 그 이유를 하나씩 살펴보겠습니다.

인터넷 속도가 느린 경우, 웹사이트의 콘텐츠가 로드되는 데 시간이 걸릴 수 있습니다. 이때, 로딩 이미지를 제공하면 사용자는 페이지가 멈춘 것이 아니라 로드가 진행 중이라는 것을 알 수 있습니다. 로딩 애니메이션을 보여주는 것만으로도 사용자는 기다리며 불안감을 줄일 수 있습니다. 

 

 

샘플화면

 
LOADING

 

 

샘플소스

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로딩 중 애니메이션</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f0f0f0;
            font-family: Arial, sans-serif;
        }

        .loader-container {
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .loader-wrapper {
            position: relative;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .loader {
            border: 12px solid #f3f3f3; /* 배경 색 */
            border-top: 12px solid #ffb3b3; /* 시작 색 */
            border-radius: 50%;
            width: 80px; /* 원의 크기 */
            height: 80px; /* 원의 크기 */
            animation: spin 2s linear infinite, colorChange 10s linear infinite; /* 색상 변화 추가 */
            box-shadow: 0 0 20px rgba(0, 0, 0, 0.3); /* 그림자 정중앙으로 */
        }

        .loading-text {
            font-size: 12px; /* 텍스트 크기 */
            color: #333; /* 텍스트 색상 */
            width:100%;
            font-weight: bold;
            position: absolute;
            text-align: center;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%); /* 텍스트를 정확히 중앙에 배치 */
            z-index: 1; /* 텍스트가 원 위에 오도록 설정 */
            animation: blinkText 1s infinite alternate; /* 텍스트 깜빡임 애니메이션, 주기 1초 */
        }

        /* 애니메이션 설정 (원만 회전) */
        @keyframes spin {
            0% {
                transform: rotate(0deg);
            }
            100% {
                transform: rotate(360deg);
            }
        }

        /* 원의 색상이 파스텔 색상으로 변경되는 애니메이션 */
        @keyframes colorChange {
            0% {
                border-top-color: #ffb3b3; /* 연한 분홍색 */
            }
            10% {
                border-top-color: #b3ffb3; /* 연한 초록색 */
            }
            20% {
                border-top-color: #b3d9ff; /* 연한 파란색 */
            }
            30% {
                border-top-color: #fff0b3; /* 연한 노란색 */
            }
            40% {
                border-top-color: #ffc0cb; /* 연한 핑크색 */
            }
            50% {
                border-top-color: #f0e68c; /* 카키색 */
            }
            60% {
                border-top-color: #d3d3d3; /* 연한 회색 */
            }
            70% {
                border-top-color: #ffb6c1; /* 연한 분홍색 */
            }
            80% {
                border-top-color: #e0ffff; /* 연한 민트색 */
            }
            90% {
                border-top-color: #f5deb3; /* 밀크색 */
            }
            100% {
                border-top-color: #ffb3b3; /* 연한 분홍색 */
            }
        }

        /* 텍스트 깜빡임 애니메이션 */
        @keyframes blinkText {
            0% {
                opacity: 0.2; /* 투명도 0.2 */
            }
            100% {
                opacity: 1; /* 투명도 1 */
            }
        }
    </style>
</head>
<body>
    <div class="loader-container">
        <div class="loader-wrapper">
            <div class="loader"></div>
            <div class="loading-text">LOADING</div>
        </div>
    </div>
</body>
</html>
728x90
반응형
LIST