CSS

transition

lshjju 2026. 2. 15. 17:20

transition은 스타일 속성이 변경될 때 그 변화를 일정 시간에 걸쳐 일어나게 하여 애니메이션 효과를 만들어냅니다.


1. CSS transition의 정의

transition은 CSS 속성값이 변경될 때(예: 마우스 호버 시 색상 변경), 그 변화가 즉시 일어나지 않고 일정한 시간 동안 부드럽게 전환되도록 제어하는 속성입니다.

상태의 변화(State A → State B)를 자연스러운 움직임으로 이어주는 가교 역할을 합니다.


2. transition의 4가지 핵심 속성

transition은 총 4가지 세부 속성으로 구성됩니다.

  • transition-property: 변화를 줄 대상 속성을 정합니다. (예: background-color, transform, all)
  • transition-duration: 변화가 일어날 지속 시간을 설정합니다. (단위: s 또는 ms) [필수]
  • transition-timing-function: 변화의 속도 곡선을 정합니다. (예: 서서히 시작하다 빨라짐)
  • transition-delay: 변화가 시작되기 전 대기 시간을 설정합니다.

3. 중요 타이밍 함수 (Timing Functions)

움직임의 '느낌'을 결정하는 가장 중요한 요소입니다.

  • ease: 기본값. 천천히 시작해서 빨라졌다가 다시 천천히 끝납니다.
  • linear: 처음부터 끝까지 일정한 속도로 움직입니다.
  • ease-in: 천천히 시작해서 속도가 붙으며 끝납니다.
  • ease-out: 빠르게 시작해서 끝날 때 천천히 멈춥니다.
  • cubic-bezier(n,n,n,n): 나만의 고유한 속도 곡선을 직접 수치로 정의합니다.

4. 실전 예제 코드: "종합 선물 세트"

한 줄로 줄여 쓰는 단축 속성(Shorthand) 방식을 실무에서는 가장 선호합니다.

구조: transition: 속성 시간 타이밍함수 대기시간;

CSS
 
.button {
  width: 150px;
  height: 50px;
  background-color: #3498db;
  color: white;
  border: none;
  cursor: pointer;

  /* 1. 모든 속성을(all) 2. 0.5초 동안(0.5s) 3. 부드럽게(ease-in-out) 변화시킴 */
  transition: all 0.5s ease-in-out;
}

/* 마우스를 올렸을 때의 변화 */
.button:hover {
  background-color: #2ecc71; /* 배경색 변경 */
  width: 200px;              /* 너비 변경 */
  border-radius: 25px;       /* 모양 변경 */
  transform: scale(1.1);      /* 크기 약간 확대 */
}

📋 속성별 상세 요약표

세부 속성 설명 예시
property 변화를 감시할 CSS 속성 opacity, width, all
duration 애니메이션 재생 시간 0.3s, 500ms
timing-function 속도의 흐름 (가속도) linear, ease-in
delay 실제 시작까지 기다리는 시간 1s (1초 후 시작)

학습 정리

  • **duration**이 설정되지 않으면 기본값이 0이므로 아무런 효과가 나타나지 않는다.
  • all 키워드를 쓰면 해당 요소의 모든 변경 가능한 속성에 자동으로 효과가 적용된다.
  • 마우스 호버(:hover)뿐만 아니라 자바스크립트로 클래스를 추가/제거할 때도 transition은 작동한다.

부드러운 웹 화면을 만드는 transition의 원리를 완벽히 이해하셨습니다!



transition의 각 세부 속성들이 실제 코드에서 어떤 역할을 하는지 개별 예제를 통해 자세히 살펴보겠습니다.

각 속성의 차이를 명확히 느낄 수 있도록 구성했습니다.


1. transition-property (대상 지정)

어떤 속성에만 부드러운 효과를 줄지 선택합니다.

CSS
 
.prop-box {
  width: 100px;
  height: 100px;
  background-color: #e74c3c;
  /* 배경색(background-color) 변화에만 1초간 효과를 줍니다. */
  /* 너비(width) 변화는 즉시 일어납니다. */
  transition-property: background-color;
  transition-duration: 1s;
}

.prop-box:hover {
  background-color: #8e44ad;
  width: 200px;
}

2. transition-duration (시간 설정)

애니메이션이 얼마나 오래 지속될지 결정합니다.

CSS
 
.dur-box {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  transition-property: transform;
}

.fast { transition-duration: 0.2s; } /* 아주 빠르게 */
.slow { transition-duration: 2s; }   /* 아주 느리게 */

.dur-box:hover {
  transform: rotate(180deg);
}

3. transition-timing-function (속도 조절)

변화의 리듬(가속도)을 결정합니다.

CSS
 
.time-box {
  width: 100px;
  height: 50px;
  margin-bottom: 10px;
  background-color: #2ecc71;
  transition: width 1s; /* 단축 속성 사용 */
}

.linear { transition-timing-function: linear; } /* 일정한 속도 */
.ease-in { transition-timing-function: ease-in; } /* 시작은 느리게, 끝은 빠르게 */
.out { transition-timing-function: cubic-bezier(0, 0.5, 0.5, 1); } /* 커스텀 곡선 */

.container:hover .time-box {
  width: 300px;
}

4. transition-delay (대기 시간)

마우스를 올린 후 '언제' 애니메이션을 시작할지 정합니다.

CSS
 
.delay-box {
  width: 100px;
  height: 100px;
  background-color: #f1c40f;
  /* 1초를 기다린 후에 0.5초 동안 변화가 일어납니다. */
  transition-duration: 0.5s;
  transition-delay: 1s;
}

.delay-box:hover {
  border-radius: 50%;
  background-color: #f39c12;
}

💡 실무 팁: 여러 속성에 각기 다른 시간 주기

쉼표(,)를 사용하여 속성마다 서로 다른 시간과 타이밍을 적용할 수 있습니다.

CSS
 
.complex-box {
  width: 100px;
  height: 100px;
  background-color: gray;
  /* 너비는 0.3초 만에, 배경색은 1초 뒤에 2초 동안 천천히 변경 */
  transition: width 0.3s ease, background-color 2s 1s linear;
}

.complex-box:hover {
  width: 200px;
  background-color: pink;
}

연습 포인트

  • all 키워드: transition-property: all;이라고 쓰면 모든 수치형 CSS 속성에 효과가 적용되어 편리합니다.
  • 반대 방향: 마우스를 뗐을 때도 부드럽게 돌아오는 이유는 transition이 :hover가 아닌 원래의 클래스 상태에 정의되어 있기 때문입니다.

각 속성의 개별적인 역할까지 완벽하게 파악하셨네요!


'CSS' 카테고리의 다른 글

CSS gradient generator  (0) 2026.02.16
CSS Animation and @keyframes  (0) 2026.02.15
transform  (0) 2026.02.15
translate() center center alignment  (0) 2026.02.12
CSS box model Position control steps  (0) 2026.01.26