클릭 좌표를 기준으로, 버튼을 모두 덮을 만큼 큰 지름(`Math.max(width,height) * 2`)의 원을 만들어 클릭 지점에 중심을 맞춰 배치한다. 버튼에는 `overflow: hidden`을 걸어 원이 버튼 밖으로 삐져나가지 않게 자른다.
`transform: scale(0)`에서 `scale(1)`로 커지면서 동시에 `opacity`가 줄어드는 애니메이션을 `@keyframes`로 걸고, `animationend`에서 요소를 제거한다 — DOM에 계속 쌓이지 않도록 정리하는 것이 중요하다.
버튼 배경이 진하면 흰색 반투명(`rgba(255,255,255,.5)`) 원이, 배경이 밝으면 어두운 반투명 원이 더 잘 보인다. 클릭할 때마다 새 원을 추가해서 겹쳐 눌러도 자연스럽게 겹쳐 보이게 한다.
언제 쓰나
주요 버튼, 리스트 항목 탭처럼 "눌렸다"는 즉각적 확인이 필요한 곳에 씁니다. 이미 hover 상태 변화가 뚜렷한 버튼에는 과할 수 있습니다.