CSS 필터 생성기

다음

CSS filter는 흐림, 밝기, 대비, 채도 같은 이미지 처리 효과를 이미지뿐 아니라 모든 요소에 적용합니다. 여러 필터를 연결하고 단위를 정확히 맞추는 부분에서 실수가 잦습니다. 이 생성기는 가장 흔한 다섯 가지 함수, 흐림, 밝기, 대비, 그레이스케일, 채도에 대한 filter 선언을 만들어 줍니다. 값을 입력하고 생성된 CSS를 복사하세요.

필터 체인 만드는 방법

  1. 1

    값 입력

    흐림은 픽셀, 밝기, 대비, 그레이스케일, 채도는 백분율로 입력합니다.

  2. 2

    수치의 의미 이해

    밝기와 대비 100%는 변화 없음, 0%는 요소가 검은색이나 회색이 됨을 뜻합니다. 그레이스케일은 0%(풀컬러)부터 100%(완전 무채색)까지입니다. 채도 100%는 색을 그대로 유지합니다.

  3. 3

    CSS 생성

    버튼을 클릭하면 다섯 함수를 모두 포함한 `filter` 규칙이 출력됩니다.

  4. 4

    규칙 복사

    결과를 복사해 스타일시트에 붙여넣으세요.

  5. 5

    순서 확인

    함수는 왼쪽에서 오른쪽으로 적용됩니다. 기대한 효과가 아니라면 값을 조정하세요.

필터 함수

함수 단위 효과
blur() px 가우시안 흐림. 0 = 흐림 없음
brightness() % 또는 소수 100% = 변화 없음, 0% = 검정, 200% = 두 배
contrast() % 또는 소수 100% = 변화 없음, 0% = 회색, 200% = 두 배
saturate() % 또는 소수 100% = 변화 없음, 0% = 그레이스케일
grayscale() % 또는 소수 0% = 변화 없음, 100% = 완전히 채도 제거
sepia() % 또는 소수 0% = 변화 없음, 100% = 완전한 세피아
hue-rotate() deg 0deg = 변화 없음. 색상환을 회전시킵니다
invert() % 또는 소수 0% = 변화 없음, 100% = 완전히 반전
opacity() % 또는 소수 opacity 속성과 동일
drop-shadow() x y 흐림 색상 box-shadow와 비슷하지만 불투명도와 clip-path를 따릅니다

연결 순서가 중요합니다

filter: brightness(0.5) saturate(2)는 밝기를 먼저 적용한 다음 채도를 적용하며, 두 필터가 겹쳐서 작용합니다.

filter: saturate(2) brightness(0.5)는 채도를 먼저 적용합니다. 이미지가 어두워지기 전에 더 밝은 상태이므로 색의 채도가 더욱 뚜렷하게 나타납니다.

시각적 차이는 미묘하지만 분명히 존재합니다. 필터 체인이 기대한 대로 보이지 않을 때는 두 순서를 모두 시도해 보세요.

자주 쓰는 레시피

/* 빛바랜 사진 느낌 */
filter: contrast(0.9) saturate(0.85) brightness(1.05);

/* 빈티지 / 빛바램 */
filter: sepia(0.3) contrast(1.1) brightness(0.95);

/* 듀오톤 근사 */
filter: grayscale(1) sepia(1) hue-rotate(180deg) saturate(1.5);

/* 히어로 이미지 어둡게 */
filter: brightness(0.6);

/* 비활성 상태 */
filter: grayscale(1) opacity(0.6);

/* 글래스 / 서리 낀 오버레이 */
filter: blur(12px) saturate(1.3);

서리 유리 효과를 위한 backdrop-filter

filter는 요소 자체에 적용되고, backdrop-filter는 반투명 요소의 뒤에 있는 것에 적용되어 iOS가 대중화한 서리 유리 효과를 만들어냅니다.

.modal-backdrop {
  background: rgba(255, 255, 255, 0.5);
  backdrop-filter: blur(20px) saturate(1.2);
}

지원: 모든 최신 브라우저. Firefox는 103 버전부터 마침내 플래그 없이 지원합니다.

성능 참고 사항

  • blur()는 모든 픽셀을 커널로 합성해야 하므로 가장 비용이 큰 필터입니다. 4K 히어로 이미지에 30px 흐림을 적용하면 실제로 프레임 저하가 발생합니다.
  • grayscale, sepia, brightness 등은 픽셀 단위 색상 변환이라 가볍습니다.
  • 최신 브라우저에서 필터는 GPU 가속을 받지만, blur() 애니메이션은 저사양 기기에서 여전히 끊깁니다.
  • 애니메이션 전에 will-change: filter를 지정하는 것이 좋습니다.

filter: drop-shadow()box-shadow

  • box-shadow는 요소의 보더 박스를 따릅니다(border-radius를 준수합니다).
  • filter: drop-shadow()는 요소의 불투명한 픽셀을 따르므로 clip-path 모양, PNG 투명도, SVG 경로의 윤곽을 그대로 따라갑니다.

잘라낸 이미지나 투명한 이미지의 그림자에는 drop-shadow를 사용하고, 일반 카드와 박스에는 더 빠른 box-shadow를 사용하세요.

자주 묻는 질문

네. 필터는 해당 요소와 그 모든 하위 요소에 하나의 그룹으로 적용됩니다. 부모 요소에 필터를 걸면 자식 요소도 포함됩니다. 부모의 배경만 필터링하려면 콘텐츠를 별도의 쌓임 맥락(stacking context)에 두거나 backdrop-filter를 사용하세요.

흐림은 렌더링된 텍스트를 포함한 요소 전체에 적용되기 때문입니다. 일반 filter만으로는 배경을 흐리게 하면서 텍스트를 선명하게 유지할 수 없습니다. 반투명 오버레이에 backdrop-filter를 사용하고, 텍스트는 필터를 적용한 요소 밖에 두세요.

네, 모든 필터 함수는 애니메이션 처리됩니다. 모바일 환경에서의 흐림 효과 성능을 주의 깊게 확인해 주세요. 흐림 반경을 애니메이션으로 설정하면 처리 비용이 상당히 증가합니다. grayscale, sepiabrightness는 저비용으로 애니메이션 처리가 가능합니다.

네, CSS filter는 다른 모든 DOM 요소와 마찬가지로 SVG 요소에도 동일하게 적용됩니다. 또한 SVG에는 자체적으로 보다 풍부한 <filter> 요소 시스템이 있으며, 이는 기능은 강력하지만 코드 길이가 훨씬 더 길습니다.

관련 도구