CSS transition 실전 —
색상 전환 + border 둥글게 변신
두 박스가 나란히 있다. 왼쪽은 1초 동안 색이 바뀌고, 오른쪽은 1.5초 동안 사각형 → 원형으로 변신한다. 각자 다른 timing-function·duration으로 transition을 설정한 실전형 예제.
왼쪽: 1초간 ease로 하늘색 → 파랑 / 오른쪽: 1.5초간 linear로 검정테 사각형 → 빨간테 원
.bg-tr는 평소 하늘색(skyblue), 마우스를 올리면 1초에 걸쳐 진한 파랑(blue)으로 변한다. UI 버튼, 카드 등에서 가장 자주 쓰는 패턴.
.border-tr은 호버 시 두 가지가 동시에 변한다.
| 속성 | 평소 | 호버 | 변화 |
|---|---|---|---|
| border 색 | black (#000) | red (#f00) | RGB 보간 (검정 → 빨강) |
| border-radius | 0 (사각형) | 50% (원) | 0% → 50% 보간 |
두 속성 모두 all의 대상이라 함께 보간된다. 1.5초간 linear 곡선이라 일정한 속도로 사각형이 점점 모서리가 둥글어지면서 색도 변한다.
- 0% → 50% 사이에 25%가 있을 때 적당히 둥근 사각형(squircle)이 나타남
- 이 중간 단계가 시각적으로 가장 매력적이라 의도적으로 쓰는 디자인도 있음
- 버튼이 호버 시 부드럽게 알약 모양 → 캡슐 모양으로 변하는 효과
박스1과 박스2는 같은 호버 동작이지만 곡선이 다르다.
- 0~0.2초: 천천히 시작
- 0.2~0.7초: 빠르게 변화
- 0.7~1초: 부드럽게 도착
- 가장 자연스러운 색상 변환
- 매 0.1초마다 동일한 양 변화
- 색·모양 변화가 기계적
- 로딩바·진행 표시에 적합
- 호버 효과로는 약간 부자연스러움
이번 코드를 자세히 보면 박스1은 all ease 1s, 박스2는 all linear 1.5s이다. 사실 표준 권장 순서는 property → duration → timing → delay지만, CSS 파서가 시간(s/ms 단위)과 키워드를 알아서 구분해주기 때문에 순서를 바꿔도 동작한다.
- 호버에서 변하는 모든 속성 자동 처리
- 코드가 간결
- 속성 추가 시 별도 수정 불필요
- 의도치 않은 속성까지 transition
- 레이아웃 속성(width 등)에 부담
- 큰 페이지에서 성능 저하
- 실무 권장: 명시적 속성
border는 border-width, border-style, border-color를 한 줄에 묶는 단축 속성이다.
| 부품 | 이번 코드 | 의미 |
|---|---|---|
| 두께 | 3px | 테두리 굵기 |
| 종류 | solid | 실선 (다른 옵션: dashed, dotted, double) |
| 색 | black / red | 색 (호버에서 빨강으로 변함) |
호버에서 border: 3px solid red로 통째로 다시 적었지만, 결과적으로는 색만 검정 → 빨강으로 보간된다 (두께·종류는 같으니 변화 없음).
| 실수 | 증상 | 해결 |
|---|---|---|
| 호버에 transition 작성 | 마우스 뗄 때 점프 | 기본 셀렉터에 작성 |
| border 두께 자체를 바꿈 | 레이아웃이 1~2px 흔들림 | 두께는 그대로, 색만 바꾸기 |
| border-radius % 단위 빠뜨림 | 정확한 원이 안 됨 | 50% 또는 50px 등 정확히 |
| linear를 쓰며 호버에 자연스러움 기대 | 딱딱한 느낌 | 호버는 ease/ease-out 권장 |
| all에 의존해 무거운 속성 보간 | 크롬 DevTools 성능 경고 | transform/opacity 위주로 |
이 코드는 두 박스를 가로로 배치하기 위해 float: left를 썼다. 옛 방식이고, 현대에는 display: flex가 표준이다.
핵심 한 줄 요약
Tags
'php' 카테고리의 다른 글
| CSS transform-origin — 같은 회전, 다른 모서리 기준 4가지 (0) | 2026.06.09 |
|---|---|
| CSS transform-style — flat vs preserve-3d, 자식의 3D를 살릴 것인가 (0) | 2026.06.09 |
| CSS transition-timing-function — ease · linear · ease-in/out 비교 (0) | 2026.06.09 |
| CSS transform 함수 합성 — scale · perspective · rotateX 한 줄에 (0) | 2026.06.08 |
| CSS transition 단축형 — transition: 2s ease-in 한 줄로 끝내기 (0) | 2026.06.08 |
왕진 블로그

댓글