filter 는 요소 자체의 픽셀을 후처리하는 CSS 속성입니다. 함수를 콤마 없이 공백으로 이어 여러 개를 동시에 걸 수 있고(`filter: blur(2px) brightness(1.2)`), 순서대로 적용됩니다.
blur() 는 가우시안 흐림, brightness/contrast/saturate 는 픽셀값 스케일, grayscale/sepia/invert 는 색 변환, hue-rotate 는 색상환 회전입니다. 전부 SVG filter primitive 를 감싼 단축 함수라서, 더 정교한 조합이 필요하면 filter: url(#id) 로 직접 만든 SVG 필터를 쓸 수도 있습니다.
가장 흔한 함정은 성능입니다. blur 반경이 클수록, 요소가 클수록 GPU 비용이 커지고 — 매 프레임 값이 바뀌는 애니메이션에 큰 이미지를 물리면 눈에 띄게 버벅입니다. 또 filter 를 건 요소는 opacity·transform 처럼 새 스태킹 컨텍스트를 만들어서, 자식의 z-index 가 그 안에 갇힙니다.
로딩 스켈레톤(blur), 비활성 상태(grayscale), 다크모드 일러스트 톤 보정(hue-rotate) 처럼 실무에서 값 하나만 바꿔 쓰는 경우가 대부분입니다.
언제 쓰나
값 하나만 바꿔서 상태를 표현할 때(비활성=grayscale, 로딩=blur) 가장 안전합니다. 전체 배경 이미지에 큰 blur 를 매 프레임 바꾸는 애니메이션은 피하세요.