통합검색

HTML / CSS

[CSS] ::after 가상요소를 통해 원 그리기 애니메이션 구현

  • 2025.08.13 14:32:39




swiper 구현 도중 dot에 원이 그려지면 다음 슬라이드로 넘어가는 효과가 필요했다.
위 화면과 같이 1px border 의 원이 그려지는 애니메이션을 ::after 가상요소를 통해 구현했다.


[!]css[/!]
코드는 아래와 같다.
 
@property --angle {
  syntax: '<angle>';
  inherits: false;
  initial-value: 0deg;
}
.dots span.swiper-pagination-bullet-active::after{
    content:"";
    position:absolute; inset:0;
    transition: all 0.1s;
    border-radius:50%;
    --thickness:1px;
    --angle:0deg;
    background: conic-gradient(rgba(255,255,255,0.8) var(--angle), transparent 0);
    -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness)), #000 0);
    mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness)), #000 0);
    animation: draw 4s linear forwards;
}
@keyframes draw{
  from{ --angle: 0deg; }
  to  { --angle: 360deg; }
}

conic-gradient() 는 원형에 색상을 채워주는 그라이언트.
그라디언트 위에 mask로 구멍을 뚫어줘서 호 처럼 보이게 하고 그라디언트를 4초 동안 천천히 채워가는 방식이다.