프로젝트에서 Framer motion을 사용해 햄버거 메뉴바를 만드려고 한다.
Framer motion의 example안의 햄버거 바가 딱 좋을 것 같아서 이용 하기로 했다.
Framer Motion: Variant - CodeSandbox
A live, editable example of the Framer Motion API
codesandbox.io
바로 이 example 인데 이 예제에는 여기서는 알 수 없지만(혹은 컨텐츠가 없으니 일부러 안고친것 같지만) 한 가지 버그가 있다.
바로 햄버거 메뉴가 클릭될때 나오는 메뉴가 click 되지 않아 보이지 않아도 사실 살아 있다는 것이다. 즉 투명인 채로 컨텐츠들을 방해한다는 것이다.
Framer Motion: Side menu (forked) - CodeSandbox
A live, editable example of the Framer Motion API
codesandbox.io
위의 예제를 보면 햄버거 메뉴를 자식으로 하는 fixed인 header는 z-index를 검정색 버튼보다 높게 주었다. z-index를 높게 주지 않으면 검정색 버튼이 햄버거 메뉴를 클릭 했을때 나오는 메뉴 위에 나오기 때문이다.
이제 검정색 버튼을 누르려하면 눌리지 않는다. 오히려 햄버거 메뉴가 클릭되지 않았는데 햄버거 메뉴의 내용들이 클릭되는것을 볼 수 있다.
이유는 우리 눈에는 햄버거 메뉴가 꺼져 있지만 사실 요소로써 남아있는 것이다.
이를 해결하려면 animation을 적용할때 햄버거 메뉴가 클릭될때는 visiabe하고 꺼질때는 display none을 적용 시켜야한다.
그럼 적용 시켜보자
Framer Motion: Side menu (forked) - CodeSandbox
A live, editable example of the Framer Motion API
codesandbox.io
display 부분이 적용이 안된 모습을 볼 수 있다. 이럴때 바로 AnimatePresence가 필요하다.
'Frontend' 카테고리의 다른 글
[React] 재조정(Reconciliation)과 key값 (0) | 2024.03.21 |
---|---|
[React] 불필요한 리렌더링을 막아서 6배가 빨라졌다고? (0) | 2024.02.22 |
React-Query Query data cannot be undefined 해결 방법 및 Promise에 대해 (0) | 2023.07.04 |
Redux 와 RTK(Redux toolkit) (0) | 2023.06.26 |
redux error - A non-serializable value was detected in an action, in the path 해결 방법 (0) | 2023.06.09 |