transform 속성으로 요소를 이동, 회전, 크기 변경, 기울이기 등 2D/3D 변형을 수행하고,
transition과 animation 속성으로 CSS 속성 변화와 복잡한 애니메이션 효과를 구현합니다.
Flexbox는 1차원 레이아웃 시스템으로, 컨테이너와 요소 속성을 활용하여
유연하고 반응형인 레이아웃을 구현합니다.
CSS Grid는 2차원 레이아웃 시스템으로 행과 열을 동시에 제어하며,
multi-column 속성으로 신문과 같은 다단 레이아웃을 구현합니다.
Animation- by. UXKM
Publishing
CSS
CSS 고급
Animation
요약 설명
CSS3에서는 animation 속성을 사용하여 요소의 현재 스타일을 다른 스타일로 천천히 변화시킬 수 있습니다. CSS2에서는 이러한 효과를 표현하기 위해서는 자바스크립트나 플래시 등의 외부 플러그인을 사용해야만 했지만, CSS3에서는 이러한 애니메이션 효과를 손쉽게 적용할 수 있게 되었습니다.
애니메이션을 만들기 위해서는 가장 먼저 키 프레임을 설정(@keyframes)해야 합니다.
키 프레임(@keyframes)은 전환(화면 이동) 효과가 발생하는 시작점과 종료점입니다.
가장 간단한 형태의 애니메이션은 시작 프레임과 종료 프레임이라는 2개의 키 프레임으로 만들어지지만, 더 복잡한 애니메이션을 만들 경우에는 그 사이에 몇 개의 키 프레임을 더 추가하여 사용할 수 있습니다.
CSS 전환(화면 이동) 효과인 transition은 사실상 2개의 키 프레임만을 사용한다고 할 수 있고, 이 점이 애니메이션과 구분되는 점입니다.
animation 속성 요약
animation의 모든 속성에 대한 요약입니다. 아래 속성 설명에 각 속성에 대한 자세한 설명이 있습니다.
animation-name : 선언된 애니메이션(@keyframes) 이름 선언합니다.
animation-duration : ms 단위로 실행되는 시간을 지정합니다.
animation-timing-function : linear, ease 등의 시간에 따른 변화 가감속 속도를 지정합니다.
animation-iteration-count : 애니메이션의 반복 효과 횟수 지정합니다. (기본값은 1)
animation-direction : 애니메이션이 반복되는 동안 실행되는 순서를 지정합니다. (기본은 normal, 반대라면 alternate, 무한반복 infinite)
animation-delay : 애니메이션 실행 시작 전에 실행 지연(유예) 시간을 지정합니다.
animation-fill-mode : 애니메이션의 적용 후에 대상의 상태를 지정합니다. (backward, forward, both, none)
animation-play-state : 실행중인 애니메이션을 멈추거나 다시 재생할 수 있습니다.
animation 속성 상세
animation CSS 속성은 다수의 스타일을 전환하는 애니메이션을 적용합니다.
animation-name 속성 (필수 선언)
애니메이션 효과의 이름을 설정합니다. @keyframes 규칙에서 정의된 이름을 사용하며, 여러 개의 애니메이션 이름을 콤마(,)로 구분하여 사용할 수 있습니다.
애니메이션을 막으려면 none을 사용합니다.
animation-duration 속성 (필수 선언)
애니메이션 효과를 재생할 시간을 설정합니다. @keyframes에서 선언한 0%부터 100%까지의 움직임을 몇 초에 걸쳐 구현할지를 정합니다. ms 또는 s 단위를 사용하며, 음수 값은 0으로 간주됩니다.
animation-delay 속성
애니메이션 효과가 나타나기까지의 지연 시간을 설정하며,
ms 또는 s 단위를 사용합니다.
양수 값은 그만큼 지연 시간을 의미하며, 음수 값을 사용하면 애니메이션이 즉시 시작되며 애니메이션의 중간 지점부터 재생됩니다. 예를 들어, animation-duration: 5s이고 animation-delay: -2s인 경우, 애니메이션은 즉시 시작되지만 2초 지점(40%)부터 재생됩니다. ※ 기본값은 0이며, 지연시간이 필요 없으면 생략 가능합니다.
animation-iteration-count 속성
애니메이션 효과가 몇 번 반복될지를 설정합니다.
숫자(양의 정수)와 infinite(무한 반복)만 선언 가능하며, 0이나 음수는 재생되지 않습니다. ※ 기본값은 1이며, 기본값으로 사용할 경우 생략 가능합니다.
animation-direction 속성
애니메이션의 진행 방향을 설정합니다.
한 사이클(0%부터 100%)이 종료된 후 다음 반복 때 어떤 방향으로 움직임을 이어 나갈지 정의합니다. ※ 기본값은 normal이며, 기본값으로 사용할 경우 생략 가능합니다.
normal : 기본값으로 한 사이클이 끝나도 같은 방향으로 움직입니다.
alternate : 한 사이클이 끝나면 역방향으로 움직입니다.
reverse : 처음부터 역방향으로 움직입니다.
alternate-reverse : 처음부터 역방향으로 움직이고, 한 사이클이 끝나면 정상 방향으로 움직입니다.(alternate의 반대)
animation-fill-mode 속성
애니메이션이 재생되기 전과 종료된 후의 요소 상태를 정의합니다.
기본적으로 애니메이션이 시작되기 전에는 요소의 원래 CSS 위치에 있고, 종료 후에는 다시 원래 위치로 돌아갑니다. 하지만 애니메이션이 끝난 후 최종 상태를 유지하거나, 시작 전에 첫 번째 키프레임 상태로 미리 설정하고 싶을 때 이 속성을 사용합니다.
요소의 CSS 위치와 @keyframes 위치 중 어느 것을 기준으로 할지 결정합니다. ※ 기본값은 none이며, 기본값으로 사용할 경우 생략 가능합니다.
normal : 대기(CSS 위치) > 시작(@keyframes 위치) > 종료(CSS 위치)
both : 대기(@keyframes 위치) > 시작(@keyframes 위치) > 종료(그대로 유지)
animation-play-state 속성
애니메이션 효과의 재생 상태를 설정합니다. 정지(paused)와 재생(running)을 제어할 수 있으며, 마우스 오버(hover) 또는 JavaScript 이벤트와 함께 사용합니다. 이 속성은 축약형 문법에 포함될 수 없습니다.
paused : 애니메이션의 움직임을 정지시킵니다.
running : 정지된 애니메이션을 재생시킵니다.
@keyframes 규칙
@keyframes 규칙 요약 설명
CSS3에서 애니메이션 효과를 사용하기 위해서는 우선 키 프레임(@keyframes)을 정의해야 합니다.
키 프레임에는 특정한 시간에 요소가 가져야 할 CSS 스타일을 명시하며, 중간 프레임의 움직임은 자동으로 처리됩니다.
애니메이션 효과가 동작하기 위해서는 animation-name 속성을 이용하여 요소와 키 프레임을 연결해야 합니다.
키 프레임 단계를 세분화할 수 있으며, CSS 속성이 동일한 키 프레임은 콤마(,)로 그룹화할 수 있습니다.
시점은 % 또는 from, to로 선언할 수 있으며,
% 사용을 권장합니다.
각 프레임마다 CSS 지정
CSS의 속성이 겹치는 경우 콤마로 구분하여 그룹화
animation 작성 방법
모든 animation 속성을 한 줄로 축약하거나 각 속성별로 따로 선언할 수 있습니다.
축약형 선언에서 animation-delay를 선언하려면 반드시 animation-duration 뒤에 선언해야 합니다.
속성별 선언
속성별로 선언할 경우 선언 순서는 중요하지 않습니다.
다만, 공동작업이나 추후 관리를 위해 축약형 선언의 순서에 맞춰 선언하는 것을 추천합니다.
축약형 선언
주로 쓰이는 방법입니다.
대부분 하나의 객체당 하나의 @keyframes에 대한 animation을 적용하므로 이 경우 코드절약을 위해 한줄로 사용하는 것이 좋습니다.
복수 선언
콤마(,)로 구분하여 두 개 이상의 @keyframes 규칙으로 정의된 애니메이션을 한 번에 선언할 수 있습니다.
Steps 선언
애니메이션의 흐름을 Step(단계)화해서 제어할 수 있습니다. duration 값과 연계해서 선언하여 일종의 Frame Rate(초당 프레임 수)를 설정하거나, 셀 애니메이션처럼 연계된 동작을 표현할 수도 있습니다. steps(스텝 수)로 선언합니다.
animation 작성 예제
접근성: prefers-reduced-motion
일부 사용자는 움직임이나 애니메이션으로 인해 어지러움, 메스꺼움, 집중력 저하 등의 문제를 경험할 수 있습니다. prefers-reduced-motion 미디어 쿼리를 사용하면 사용자의 시스템 설정을 확인하여 애니메이션을 줄이거나 비활성화할 수 있습니다.
사용자가 시스템 설정에서 "움직임 줄이기" 옵션을 활성화하면, prefers-reduced-motion: reduce가 적용됩니다.
권장사항: 모든 animation에 대해 prefers-reduced-motion을 고려하여 접근성을 향상시키세요.