Contents
see List개요
웹 플랫폼은 매년 강력한 네이티브 API를 추가하며 빠르게 발전하고 있습니다. 2024-2025년에는 View Transitions API, Popover API, Container Queries 등 기존에 JavaScript 라이브러리로만 가능했던 기능들이 브라우저 네이티브로 구현되었습니다. 이러한 최신 Web API들의 사용법과 실전 적용 방안을 정리합니다.
핵심 개념
1. View Transitions API: 페이지 간 또는 상태 변경 시 부드러운 전환 애니메이션을 구현할 수 있는 API입니다. SPA에서는 document.startViewTransition()으로, MPA에서는 @view-transition CSS 규칙으로 사용합니다. 기존에 복잡한 JavaScript와 FLIP 애니메이션으로 구현하던 것을 간단하게 처리할 수 있습니다.
2. Popover API: 팝오버, 툴팁, 드롭다운 메뉴 등 오버레이 UI를 네이티브로 구현하는 API입니다. popover 속성을 추가하면 자동으로 최상위 레이어에 표시되며, 접근성과 키보드 제어가 기본 제공됩니다.
3. Container Queries: 뷰포트가 아닌 부모 컨테이너의 크기에 따라 스타일을 적용하는 CSS 기능입니다. 진정한 컴포넌트 기반 반응형 디자인을 가능하게 하며, 재사용 가능한 UI 컴포넌트 개발에 핵심적입니다.
4. 기타 주목할 API: CSS Anchor Positioning(요소 상대 위치 지정), Scroll-driven Animations(스크롤 기반 애니메이션), Speculation Rules(사전 렌더링)도 브라우저 지원이 확대되고 있습니다.
실전 예제
View Transitions API로 페이지 전환 애니메이션을 구현합니다.
// SPA에서 View Transitions 사용
async function navigateTo(url) {
// 페이지 콘텐츠 가져오기
const newContent = await fetch(url).then(r => r.text());
// View Transition으로 감싸기
if (document.startViewTransition) {
const transition = document.startViewTransition(() => {
document.getElementById('content').innerHTML = newContent;
});
// 전환 완료 대기 (필요한 경우)
await transition.finished;
} else {
// 폴백: 즉시 교체
document.getElementById('content').innerHTML = newContent;
}
}
// CSS에서 전환 애니메이션 커스터마이징
/*
::view-transition-old(root) {
animation: fade-out 0.3s ease-out;
}
::view-transition-new(root) {
animation: fade-in 0.3s ease-in;
}
*/
Popover API와 Container Queries 활용 예시입니다.
// Popover API - JavaScript 없이 동작하는 팝오버
const template = `
<button popovertarget="menu-popup">메뉴 열기</button>
<div id="menu-popup" popover>
<nav>
<a href="/home">홈</a>
<a href="/about">소개</a>
<a href="/blog">블로그</a>
</nav>
</div>
`;
// Popover 이벤트 핸들링 (선택적)
const popup = document.getElementById('menu-popup');
popup.addEventListener('toggle', (event) => {
if (event.newState === 'open') {
console.log('팝오버 열림');
} else {
console.log('팝오버 닫힘');
}
});
/* Container Queries - 컴포넌트 기반 반응형 */
.card-container {
container-type: inline-size;
container-name: card;
}
.card {
display: grid;
gap: 1rem;
padding: 1rem;
}
/* 컨테이너 너비가 400px 이상이면 가로 배치 */
@container card (min-width: 400px) {
.card {
grid-template-columns: 200px 1fr;
}
}
/* 컨테이너 너비가 700px 이상이면 더 넓은 레이아웃 */
@container card (min-width: 700px) {
.card {
grid-template-columns: 300px 1fr auto;
padding: 2rem;
}
}
활용 팁
- 점진적 향상: 이러한 API들은 대부분 점진적 향상 방식으로 적용할 수 있습니다. 지원하지 않는 브라우저에서도 기본 기능은 동작합니다.
- view-transition-name: 개별 요소에 view-transition-name을 지정하면 해당 요소만의 전환 애니메이션을 커스터마이징할 수 있습니다.
- Popover 접근성: Popover API는 기본적으로 ESC 키 닫기, 외부 클릭 닫기, 포커스 트랩을 지원합니다. 별도의 접근성 처리가 불필요합니다.
- Container Query Units: cqw, cqh 단위를 사용하면 컨테이너 크기에 비례하는 값을 지정할 수 있습니다.
- Speculation Rules: JSON 기반의 speculation rules로 링크 사전 렌더링을 선언적으로 설정할 수 있어 탐색 속도가 크게 향상됩니다.
마무리
웹 플랫폼의 네이티브 API가 빠르게 발전하면서, 기존에 서드파티 라이브러리에 의존하던 많은 기능들이 브라우저에 내장되고 있습니다. View Transitions, Popover, Container Queries는 웹 개발의 새로운 기본기가 될 것이며, 이를 적극 활용하면 더 가볍고, 빠르고, 접근성 높은 웹 애플리케이션을 구현할 수 있습니다.