CSS Transition 한 줄로 사용하기
- Published on
CSS Transition은 HTML 요소의 상태 변화를 시간에 따라 부드럽게 만들어 줍니다. 예를 들어, 버튼 위에 마우스를 올렸을 때 색상이 서서히 변경되게 하는 효과 등이 여기에 해당합니다. Transition을 사용하면 이러한 변화가 순간적으로 일어나지 않고, 지정된 시간 동안 점진적으로 일어나게 할 수 있습니다.
1. Transition 속성 순서
transition: [transition-property] [transition-duration]
[transition-timing-function] [transition-delay];
-
transition-property
: 애니메이션을 적용할 속성의 이름입니다. 예를 들어 opacity, background-color 등이 있습니다. all을 사용하면 모든 속성에 대해 애니메이션을 적용합니다. -
transition-duration
: 애니메이션의 지속 시간을 설정합니다. 보통 초(s) 또는 밀리초(ms) 단위로 설정합니다. -
transition-timing-function
: 애니메이션의 타이밍 함수를 설정합니다. 애니메이션의 중간 속도를 결정합니다. 예를 들어 linear, ease, ease-in, ease-out, ease-in-out 등이 있습니다. -
transition-delay
: 애니메이션 시작 전의 지연 시간을 설정합니다. 이 역시 초(s) 또는 밀리초(ms) 단위로 설정합니다
2. Transition 작성 예시
단일 속성
.box {
transition: background-color 0.5s ease-in 0.2s;
}
이 코드는 .box
클래스를 가진 요소의 background-color
속성에 0.5초 동안 ease-in
타이밍으로 0.2초 후에 시작하는 애니메이션을 적용합니다.
2개 속성
.box {
transition:
background-color 0.5s ease-in 0.2s,
width 0.3s linear 0s;
}
여기서, background-color
는 0.5초 동안 ease-in
타이밍으로 0.2초 지연 후 시작하고, width
는 0.3초 동안 linear
타이밍으로 즉시 시작하는 애니메이션을 적용합니다.
모든 속성
.box {
transition: all 0.4s ease-out 0.1s;
}
.box
클래스를 가진 요소의 모든 애니메이션 가능한 속성에 대해 0.4초 동안 ease-out
타이밍으로 0.1초 후에 시작하는 애니메이션을 적용합니다.
여러개의 속성
.box {
transition:
background-color 0.5s,
width 0.3s linear 0.2s,
height 0.2s ease-in-out;
}
이 예시에서는 background-color
에 대해 0.5초 동안 기본 타이밍(ease
)으로 즉시 시작, width
는 0.3초 동안 linear
타이밍으로 0.2초 후 시작, 그리고 height
는 0.2초 동안 ease-in-out
타이밍으로 즉시 시작하는 애니메이션을 설정합니다.
transition-timing-function의 속성 중 steps
.element {
transition: background-color 1s steps(4, end);
}
.element
클래스를 가진 요소의 background-color
속성에 대해 1초 동안 4단계의 애니메이션을 적용합니다. 여기서 steps(4, end)
는 애니메이션이 4개의 동일한 시간 간격으로 분할되어 각 단계가 진행됨을 의미합니다. end
는 각 단계가 해당 간격의 끝에서 발생한다는 것을 나타냅니다.
.sprite-animation {
transition: background-position 0.8s steps(10, start);
}
.sprite-animation
클래스를 가진 요소에 스프라이트 애니메이션을 적용합니다.
background-position
속성은 0.8초 동안 10개의 단계로 나뉘어 애니메이션되며, start
는 각 단계가 해당 간격의 시작에서 발생한다는 것을 나타냅니다. 이러한 설정은 특히 스프라이트 시트를 사용하는 애니메이션에서 유용하게 쓰입니다.
3. Transition 상세 설명
3-1. transition-property
애니메이션을 적용할 속성의 이름입니다. 예를 들어 transform
, top
, padding
, margin
, opacity
, background-color
등이 있습니다. all
을 사용하면 모든 속성에 대해 애니메이션을 적용합니다.
기본값은 all
- 개별 속성 이름: 예를 들어,
opacity
,width
,height
,background-color
,transform
등과 같이 개별 CSS 속성의 이름을 직접 지정할 수 있습니다. all
: 모든 속성에 대해transition
효과를 적용합니다. 이는 특정 속성을 지정하지 않고 모든 애니메이션 가능한 속성에 대해transition
효과를 적용하고 싶을 때 사용됩니다.none
: 애니메이션 효과를 적용하지 않을 때 사용합니다.- 여기서 중요한 것은
transition-property
에 지정할 수 있는 값은 오직 애니메이션 가능한 CSS 속성들만 해당한다는 점입니다. 예를 들어,color
,background-color
,margin
,padding
,left
,top
,opacity
,width
,height
,transform
등이 이에 해당합니다. 반면에,font-family
나display
같은 애니메이션 불가능한 속성들은transition-property
로 지정할 수 없습니다.
여러 속성을 적용하고 싶을 때
transition-property: opacity, background-color;
3-2. transition-duration
애니메이션의 지속 시간을 설정합니다. 보통 초(s) 또는 밀리초(ms) 단위로 설정합니다.
0.5s
, 1s
, 2.5s
기본값은 0s
transition-duration: 0s;
transition-duration: 0.5s;
transition-duration: 1s;
transition-duration: 2.5s;
3-3. transition-timing-function
애니메이션의 타이밍 함수를 설정합니다. 이는 애니메이션의 중간 속도를 결정합니다.
linear
: 애니메이션의 속도가 처음부터 끝까지 일정합니다. 이는 애니메이션이 균등한 속도로 진행됨을 의미합니다.ease
: 애니메이션은 천천히 시작하여, 그 후 빨라지다가 다시 천천히 끝납니다. 이는 대부분의 자연스러운 움직임에 적합한 기본적인 타이밍 함수입니다.ease-in
: 애니메이션은 천천히 시작합니다. 처음에는 느리게 움직이다가 점점 속도가 붙습니다. 대상이 점진적으로 가속되는 모습을 표현할 때 유용합니다.ease-out
: 애니메이션은 빠르게 시작하여 천천히 끝납니다. 대상이 빠르게 움직이다가 점차 느려지는 모습을 표현할 때 적합합니다.ease-in-out
: 애니메이션은 천천히 시작하여 천천히 끝납니다. 이는ease-in
과ease-out
의 조합으로, 대상이 천천히 시작하여 가속된 후 다시 천천히 멈추는 모습을 보여줍니다.cubic-bezier(n,n,n,n)
: 사용자 정의 타이밍 함수를 생성할 수 있습니다. 여기서n
은 베지어 곡선의 제어점을 나타내는 네 개의 값입니다. 이를 통해 매우 구체적인 애니메이션 속도 곡선을 만들 수 있습니다.steps(n)
:n
단계로 나누어진 애니메이션을 만듭니다. 이는 특정 횟수의 단계로 애니메이션을 분할하여 각 단계가 동일한 시간 동안 유지되도록 합니다.step-start
:steps(1, start)
와 동일합니다. 애니메이션은 즉시 첫 번째 상태로 이동합니다.step-end
:steps(1, end)
와 동일합니다. 애니메이션은 마지막 단계에서 종료됩니다.
transition-timing-function: linear;
transition-timing-function: ease;
transition-timing-function: ease-in;
transition-timing-function: ease-out;
transition-timing-function: ease-in-out;
transition-timing-function: cubic-bezier;
transition-timing-function: step-start;
transition-timing-function: step-end;
transition-timing-function: steps(10, end);
단계를 쪼개고 싶을 때는 steps 사용
// 애니메이션이 4개의 동일한 시간 간격으로 분할되어 각 단계가 진행됨을 의미합니다.
// `end`는 각 단계가 해당 간격의 끝에서 발생한다는 것을 나타냅니다.
transition-timing-function: steps(4, end);
transition-timing-function: steps(4, end);
3-4. transition-delay
애니메이션 시작 전의 지연 시간을 설정합니다. 이 역시 초(s) 또는 밀리초(ms) 단위로 설정합니다.
transition-delay: 0s;
transition-delay: 0.5s;
transition-delay: 1s;
transition-delay: 2.5s;