부드럽게 hover 애니메이션 넣기
css의 :not() 선택자를 활용해보자
Table Of Contents
들어가기
- hover 상태가 될 때 / hover 상태에서 벗어날 때 양 쪽에 부드러운 애니메이션을 주기 위한 방법을 서술합니다.
- 저는
:not()
가상 선택자를 사용했지만, 더 좋은 방법이 있다면 알려주세요!
스르륵~ 움직이게 해주세요
디스콰이엇을 구경하다가 아이템에 마우스를 올리면 hover 애니메이션이 들어가는 걸 보고 내 블로그에도 애니메이션을 적용시키고 싶어졌다.
디스콰이엇에서는 아이템에 hover시 이렇게 애니메이션이 적용된다.
1차 시도 (실패)
"&:hover": { "boxShadow": "4px 4px 15px 5px rgba(78, 120, 97, 0.3)", "transform": "translateY(-0.25rem)", "transition": "transform 0.1s ease-in-out" }
나는 @emotion/react
를 써서 스타일링을 하고 있기 때문에 이런 식으로 스타일을 적용시켜 준다.
기본적으로 box-shadow가 들어가 있지만, hover시에 그림자가 더 진해지게 만들고 싶어서 box-shadow 설정을 추가로 넣어줬다.
실행 시에는 이렇게 보인다.
hover시에 부드럽게 올라가는 부분은 잘 되지만, 마우스가 나갈 때에는 &:hover
로 선택할 수 없기 때문에 translateY
속성이 -0.25rem에서 0으로 순식간에 변하게 된다.
반쯤은 성공했지만... 나머지 반이 너무 거슬린다!
2차 시도 (성공)
":not(:hover)": { "transform": "translateY(0)", "transition": "transform 0.1s ease-in-out" }
:hover
선택자 아래에 :not(:hover)
선택자를 추가했다.
:not()
선택자는 괄호 안의 매개변수 요소를 제외한 모든 요소의 스타일을 지정하기 때문에, hover중이 아닌 요소를 선택할 수 있다.
따라서 hover 상태가 아니게 되는 시점부터 transition을 적용할 수 있는 것이다!
내려가는 것도 끊기지 않고 자연스럽게 움직인다.