크게 두 가지를 중점으로 해야 할 것 같다.
요소의 주변에 그림자를 드리우는 속성이다. 눈알 주변으로 음영이 있기 때문에 해당 요소를 사용하여 이 스타일 처리를 해 줄 수 있을 거 같다.
inset 속성
이 속성을 적용하지 않는다면 그림자가 요소의 바깥으로 만들어지고, 적용한다면 요소의 안쪽에서 그림자가 생긴다. 눈알은 음영이 요소 안쪽에 있으므로 inset
속성을 사용한다.
눈동자를 표현하기 위해 검정색 원 안에 하얀색 원을 넣어야 한다. 검정색인 바깥 원의 경우에는 눈알 div의 자식 요소로 append를 하여 주었지만, 또 검정색 원 밑에 자식 요소를 심어주는 것 말고 다른 방식도 있다.
바로 의사 요소를 사용하는 방법이다. ::after나 ::before를 통해 가짜 HTML 요소를 만들어 줄 수 있고, 이를 통해서 하얀색 원을 만들 수 있다.
.animated-eyes__eye-ball {
margin: 15px;
width: 50px;
height: 50px;
border-radius: 50%;
background-color: black;
position: relative;
}
.animated-eyes__eye-ball::before {
content: "";
position: absolute;
top: 25%;
left: 25%;
width: 25px;
height: 25px;
border-radius: 50%;
background-color: white;
}
중요한 점은 의사 요소의 주인(?) 요소에게 position: relative
속성을 부여하여 의사 요소의 위치를 조절해야 한다는 것, 그리고 의사 요소의 자체 속성 중 content
속성은 무조건 존재하기는 해야 한다는 것이다(비어 있어도 된다. 없으면 아예 의사 요소가 나타나지를 않는다!).
https://codepen.io/dkkim0122/pen/gOKqROJ
위의 예제에서도 알 수 있듯이, 원하는 HTML 요소에 onmousemove 이벤트 핸들러를 부착시키면 된다.