Support absolute length units in IntersectionObserver margins
MERGED2026blinkintersection-observerweb-platform-tests
2026. 9. 4.
injunchoi98
IntersectionObserver의 rootMargin과 scrollMargin에서 CSS 절대 길이 단위를
지원하도록 수정했습니다.
문제 설명
Intersection Observer 표준은 margin 구성 요소에 절대 길이와 백분율을
허용합니다. Blink는 길이 단위 중 px만 받아들여 cm, mm, q, in, pt,pc를 사용하면 생성 시 오류가 발생했습니다.
이 때문에 절대 길이 단위를 검사하는 WPT가 Chromium에서 실패 기대값으로
관리되고 있었습니다.
해결 내용
CSSPrimitiveValue::IsAbsoluteLengthUnit()을 추가해 CSS 절대 길이 단위를
명시적으로 판별하도록 했습니다. IntersectionObserver의 margin 파서는 허용된
단위를 canonical CSS px로 변환한 다음 기존 정수 변환을 적용합니다.
각도를 포함한 다른 상대 단위가 잘못 허용되지 않도록 절대 길이 단위 목록을
직접 검사했습니다. 수정 후 통과하는 WPT의 실패 기대 파일도 삭제했습니다.
테스트 방법
IntersectionObserverTest.AbsoluteLengthMargins 단위 테스트를 추가해 px,cm, mm, q, in, pt, pc가 예상한 px 값으로 변환되는지 확인했습니다.
관련 IntersectionObserver WPT와 로컬 presubmit, diff 검사를 통과했고 Chromium
Commit Queue를 거쳐 병합됐습니다.
배운 점
- CSS 단위 분류는 상대 단위의 반대값으로 계산하면 안 됩니다. 각도와 시간처럼
길이가 아닌 단위도 있기 때문에 허용할 절대 길이를 직접 판별해야 합니다. - 단위 변환은 기존 정수 변환보다 먼저 적용해야
0.5in같은 값을 올바르게
CSS px로 처리할 수 있습니다. - WPT 수정은 실패 기대 파일을 제거한 상태에서 실제 테스트 통과를 확인해야 합니다.