box-shadow 는 border-box 를 기준으로 그림자를 그립니다. 별·도넛처럼 투명한 부분이 있는 모양이어도 상관없이, 박스는 그냥 사각형(또는 border-radius 만큼 둥근 사각형)이라서 그림자도 사각형으로 나옵니다.
filter: drop-shadow() 는 반대로 요소의 알파 채널을 읽어서, 실제로 불투명한 픽셀의 윤곽 그대로 그림자를 만듭니다. 오목한 부분·구멍이 있어도 정확히 따라가고, 요소가 rotate·scale 되면 그림자도 그 변환을 그대로 반영합니다(필터이기 때문입니다).
데모의 별 두 개를 비교하세요 — box-shadow 쪽은 별의 오목한 틈 사이로 사각형 그림자의 흔적이 비치고, drop-shadow 쪽은 별 모양 그대로 그림자가 집니다. 대신 drop-shadow 는 알파 마스크에서 다시 계산해야 해서 box-shadow 보다 무겁고, inset 이나 spread 값이 없습니다 — 사각형 카드처럼 실루엣이 곧 박스인 경우에는 box-shadow 가 더 싸고 충분합니다.
언제 쓰나
아이콘·로고·투명 배경 이미지처럼 실루엣이 박스와 다른 요소는 drop-shadow, 카드·버튼처럼 실루엣이 곧 박스인 요소는 box-shadow 를 쓰세요.