Safari & Testing

2026년 정적 HTML을 위한 CSS linear() 이징: 키프레임·전환과 Safari 실기 리허설

MacHTML Lab2026.05.0828 분 읽기

오래된 블로그에서 복사한 cubic-bezier 네 값은 크롬에서는 그럭저럭 통과해도 Safari에서는 “끈적”하게 느껴질 때가 많습니다. linear()는 출력 진행률과 입력 퍼센트 쌍을 나열해 animation-timing-functiontransition-timing-function에 다단 감속을 직접 싣습니다. 2026년 정적 HTML 팀은 번들을 키우지 않으면서도 모션 품질을 올리고 싶지만, 스크롤 드리븐 타임라인, prefers-reduced-motion, WebKit 합성 스케줄러와 동시에 맞춰야 합니다. 이징은 접근성의 일부이며, 수식이 맞아도 멀미를 유발하면 실패입니다.

이미 게시된 스크롤 드리븐 애니메이션고정 헤더·scroll-padding 글을 함께 읽으면 스크롤 구간과 내비 높이 불일치를 줄일 수 있습니다.

문법과 스톱 간격

각 스톱은 출력 진행과 입력 퍼센트의 쌍입니다. 퍼센트가 겹치면 꺾이는 지점이 생기고, 부드러운 ease-out에는 최소 세 개의 내부 스톱이 필요합니다. 운영 관점에서는 총 다섯~아홉 개로 제한해 DevTools 그래프와 코드 리뷰가 가능하게 유지하세요.

.hero-card {
  transition: transform 420ms
    linear(0, 0.12 8%, 0.32 24%, 0.87 68%, 1);
}

마지막 스톱이 입력 100%에서 1에 도달하는지 확인하세요. 일찍 포화되면 마지막 몇 픽셀이 순간이동처럼 보입니다.

cubic-bezier 대비 선택 기준

요구cubic-bezierlinear()메모
단순 페이드매우 좋음과함전통 곡선 유지.
다단 마케팅 바운스어색함자연스러움스톱으로 바운스 명시.
스크롤 동기경직유연입력 축을 스크롤 진행률에 맞춤.

스크롤 타임라인 결합

animation-timeline이 명명된 스크롤을 참조하면 이징 입력은 시간이 아니라 스크롤 진행입니다. 중간 구간 기울기가 가파르면 “스크롤 속도 + 곡선”의 이중 가속처럼 느껴집니다. 스크롤 이동이 400px 미만이면 중간 기울기를 낮추세요.

모션 축소 전략

@media (prefers-reduced-motion: reduce)에서는 투명도 전환을 120ms 근처로, 변형은 linear(0,1)에 가깝게 즉시 완료하세요. OS 설정만으로는 부족합니다. Safari 저전력 모드에서 프레임이 묶이면 미세한 반짝임이 버그처럼 보일 수 있습니다.

@supports와 폴백

먼저 cubic-bezier를 두고 기능 탐지로 덮어씁니다.

@supports (animation-timing-function: linear(0, 1)) {
  .hero-card { animation-timing-function: linear(0, 0.2 15%, 1); }
}

미니파이어가 순서를 바꾸지 않도록 주의하세요.

Safari 체크리스트

  1. 가능하면 120fps로 녹화해 미세 끊김을 본다.
  2. macOS 손쉬운 사용에서 동작 줄이기를 켠 뒤 캐시 없이 새로고침.
  3. 노트북 배터리 저전력 모드에서 동일 페이지 재생.
  4. Technology Preview와 안정판의 합성 차이를 비교.

합성 레이어와 버벅임

transformopacity는 합성에 남기 쉽지만, filter 블러를 대량으로 쓰면 구형 GPU에서 메인 스레드로 떨어질 수 있습니다. 동시 블러는 두 요소까지, 시작 시각은 40ms 간격으로 어긋나게 두세요.

디자인 핸드오프

피그마의 베지에 핸들 대신 0~100% 시간을 가로축, 이징 출력을 세로축으로 한 정규화 그래프를 공유하세요. “브랜드 튕김”과 “착지”를 앵커로 중간 스톱을 채우고, 최악의 뷰포트 폭에서 오차가 1 CSS px 미만이 될 때까지 조정합니다. 승인된 문자열은 README에 날짜와 함께 고정합니다.

연 1회 모션 감사로 과거 녹화와 현재 사이트를 비교하면 폰트·행간 변화가 체감 속도에 미치는 영향도 잡을 수 있습니다.

브레이크포인트·컨테이너 쿼리

1440px에서 날카롭게 느껴지던 곡선이 390px에서는 무겁게 느껴지는 것은 같은 퍼센트라도 이동 픽셀이 적기 때문입니다. 컨테이너 쿼리로 --ease-hero-wide--ease-hero-narrow를 전환하고, 임계값은 대략 720px 근처가 다루기 쉽습니다.

will-change 절제

will-change: transform을 남발하면 타일 메모리가 고갈합니다. 뷰포트 동시에 세 개까지, animationend에서 제거하세요.

저데이터 모드

iOS 저데이터 모드에서는 가벼운 모션은 유지하되 큰 LCP 영상 크로스페이드는 피해야 합니다. 세 번째 토큰 세트로 거리·블러만 줄이고 linear() 형태는 유지하는 패턴이 운영에 유리합니다.

저데이터 전용 토큰을 쓸 때는 색 대비와 초점 순서도 다시 확인하세요. 애니메이션만 줄이고 텍스트 대비가 떨어지면 접근성 감사에서 되돌아옵니다.

FAQ

linear()가 cubic-bezier를 대체하나요?

아니요. 단순 케이스는 cubic-bezier가 주역입니다.

스크롤 드리븐과 함께 쓸 수 있나요?

가능하지만 구간을 제한하고 합성을 확인하세요.

prefers-reduced-motion은?

시간 단축 또는 공간 이동 제거가 기본입니다.

스톱 개수 가이드는?

다섯~아홉 개를 유지하세요.

이징의 성패는 디스플레이 파이프라인에 크게 좌우되며, 리눅스 헤드리스 스크린샷만으로는 Safari 체감과 어긋날 수 있습니다. Apple Silicon Mac mini를 클라우드로 빌려 약 일 16.9달러부터 실제 프레임 페이싱과 P3 감마를 재현하세요. 출시 주에만 상시 켜 두고 승인 후 종료하면 책상 아래 상설 장비보다 훨씬 유연합니다.

여러 고객사를 동시에 운영하는 에이전시는 프로필을 분리해 폰트 캐시와 프리뷰 포트 오염을 막을 수 있습니다.

Safari 실기에서 linear() 검증

클라우드 Mac mini로 linear(), 스크롤 타임라인, 모션 축소 폴백을 배포 전에 확인하세요.

Safari 모션 QA
$16.9/일부터