"캔버스(화면) 밖"에 요소를 미리 배치해두고, `transform: translateX()`로 안쪽으로 밀어 넣는 방식입니다. `display: none`을 쓰지 않는 이유는 transform이 GPU 가속되어 훨씬 부드럽고, 애니메이션이 가능하기 때문입니다.
배경을 어둡게 덮는 오버레이(scrim)를 함께 써서 사용자가 "지금은 패널에 집중해야 한다"는 걸 알게 하고, 오버레이를 클릭하면 패널이 닫히게 만듭니다. 패널이 열려 있는 동안 배경 스크롤은 막아야(`overflow: hidden` on body) 배경과 패널이 동시에 스크롤되는 혼란을 막습니다.
내비게이션 메뉴 외에도 장바구니, 필터 패널, 알림함처럼 "전체 화면을 다 차지할 정도는 아니지만 화면 대부분을 잠깐 써야 하는" 기능에 두루 쓰입니다.
언제 쓰나
화면이 좁은 모바일에서 2차 내비게이션이나 부가 기능을 감춰둘 때. 자주 쓰는 기능이라면 오프캔버스보다 하단 탭바처럼 항상 보이는 UI가 낫습니다.