2025년 11월 15일

CSS로 프론트 최적화하기 - Containment API

  • CSS
  • 최적화

contain 속성은 CSS Containment API의 일부로, 브라우저에게 특정 요소가 외부에 미치는 영향을 제한한다고 알려주어 렌더링 성능을 최적화하는 속성이다. contain: layout style paint;는 세 가지 containment 유형을 조합한 것이다.

각 값의 의미

layout - 레이아웃 격리

  • 해당 요소 내부의 레이아웃 변경이 외부 요소들에 영향을 주지 않음
  • 요소의 내부 콘텐츠가 변경되어도 부모나 형제 요소의 레이아웃 재계산이 발생하지 않음

style - 스타일 격리

  • CSS 카운터나 인용부호 등이 해당 요소 경계를 넘나들지 않음
  • 상속되는 스타일 변경의 영향 범위를 제한

paint - 페인트 격리

  • 요소의 자식들이 요소 경계 밖으로 렌더링되지 않음 (overflow: hidden과 유사)
  • 요소 내부의 페인트 변경이 외부 요소의 리페인트를 트리거하지 않음

성능상 이점

css
.card-container {
  contain: layout style paint;
  /* 또는 간단히 */
  contain: strict; /* layout + style + paint + size를 의미 */
}

이렇게 설정하면 브라우저가 더 효율적으로 렌더링 최적화를 수행할 수 있고, 동적 컨텐츠, 특히 스크롤 성능이나 대량의 DOM 조작 시 유용하다.

사용 예시

css
.dynamic-widget {
  contain: layout style paint;
  /* 이 위젯 내부의 변경사항이 페이지 전체에 영향을 주지 않음 */
}

.infinite-scroll-item {
  contain: layout paint;
  /* 스크롤 성능 최적화에 유용 */
}

주로 독립적인 컴포넌트나 위젯, 무한 스크롤 아이템 등에 사용하여 전체 페이지 성능을 향상시키는 데 활용된다.

참고 자료

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_containment