CSS filter: 그래픽 필터 적용

CSS filter: 그래픽 필터 적용

CSS filter 속성은 흐림 효과(블러), 색상 변경 등 그래픽 필터를 요소에 적용합니다. 필터를 사용하면 이미지, 배경, 테두리의 렌더링 결과를 바꿀 수 있습니다.

blur()contrast()처럼 사전에 정의된 효과들을 사용할 수도 있고, SVG <filter> 요소를 가리키는 URL을 사용할 수도 있습니다.

img {
  filter: blur(5px);
  /* filter: contrast(200%); */
  /* filter: grayscale(80%); */
  /* filter: hue-rotate(90deg); */
  /* filter: url(#custom-filter); */
}
<img height="160" src="/assets/infrared-jeju.jpg">

<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
  <filter id="custom-filter">
    <feDropShadow dx="4" dy="8" stdDeviation="4"></feDropShadow>
  </filter>
</svg>

불러오는 중...

구문

/* <filter-function> 값 */
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);

/* URL */
filter: url("filters.svg#filter-id");

/* 다중 필터 */
filter: contrast(175%) brightness(3%);
filter: drop-shadow(3px 3px red) sepia(100%) drop-shadow(-3px -3px blue);

/* 필터 제거 */
filter: none;

/* 전역 값 */
filter: inherit;
filter: initial;
filter: revert;
filter: revert-layer;
filter: unset;

filter 속성에는 키워드 none을 사용하거나, 아래 나열된 필터 함수 또는 SVG <filter>를 가리키는 url() 함수를 혼합하여 한 개 이상 사용합니다. filter에 지정한 필터 함수 중 하나라도 매개변수가 유효하지 않으면 키워드 none을 지정한 것과 같습니다.

필터 함수 또는 url()을 여러 개 사용한 경우 순서대로 적용합니다.

필터 함수

별도의 설명이 없다면, 매개변수로 백분율을 받는 함수는 0 이상 1 이하의 정수 값도 받을 수 있습니다. 예컨대 brightness(0.4)brightness(40%)와 같습니다.

blur()

가우시안 블러를 적용합니다.

brightness()

선형 곱셈을 적용하여 더 밝게, 또는 더 어둡게 만듭니다. 0%는 완전한 검은색이고 100%는 원본 그대로며 100%를 초과할수록 결과가 더 밝아집니다.

contrast()

대비를 조절합니다. 0%는 완전한 회색이고 100%는 원본 그대로며 100%를 초과할수록 대비가 높아집니다.

drop-shadow()

윤곽을 따라 그림자를 그립니다. 매개변수 구문은 box-shadow와 거의 같지만, inset 키워드와 spread 값은 사용할 수 없습니다. drop-shadow() 이후의 필터는 그림자에도 적용됩니다.

grayscale()

흑백으로 만듭니다. 0%는 원본 그대로고 100%에서 완전한 흑백 이미지가 됩니다.

hue-rotate()

색조를 바꿉니다. 매개변수 <angle>로 색상환의 회전 각도를 지정합니다. 0deg는 원본 그대로입니다.

invert()

색을 반전합니다. 0%는 원본 그대로고 50%는 완전환 회색, 100%는 완전한 반전입니다.

opacity()

불투명도를 바꿉니다. 0%는 완전히 투명하고 100%는 원본 그대로입니다.

saturate()

채도를 바꿉니다. 0%는 완전한 무채색이고 100%는 원본 그대로며 100%를 초과할수록 채도가 높아집니다.

sepia()

세피아 톤을 적용합니다. 0%는 원본 그대로고 100%에서 완전한 세피아 이미지가 됩니다.

필터 조합

아래 예제처럼 필터를 원하는 만큼 여러 개 지정할 수 있으며, 적용 순서는 선언한 순서와 같습니다.

/* 대비와 밝기 함께 조절 */
filter: contrast(175%) brightness(103%);

보간

보간 시작 필터 리스트와 종료 필터 리스트 중 어느 쪽에라도 url()이 있다면 이산 보간을 사용합니다.

시작과 종료 필터 리스트의 길이가 같고, 한 쪽의 필터 함수가 다른 쪽에도 존재할 경우 각각의 필터를 필터 함수가 정의하는 보간법에 따라 보간합니다.

시작과 종료 필터 리스트의 길이가 다르고, 짧은 리스트의 필터 함수가 긴 리스트에도 존재할 경우, 긴 리스트에만 존재하는 필터 함수를 짧은 리스트의 뒤에 추가해 길이를 맞춥니다. 추가된 필터들의 매개변수는 초기 값, 즉 필터를 적용하지 않은 것과 같은 상태로 설정합니다. 예컨대 blur()라면 0px, brightness()라면 100%가 됩니다. 이후에 각각의 필터를 필터 함수가 정의하는 보간법에 따라 보간합니다.

한 쪽이 none이라면, none을 길이 0의 짧은 리스트로 취급해서 위의 규칙과 동일하게 보간합니다.

기타 다른 경우에는 이산 보간을 사용합니다.

명세

브라우저 호환성

MDN browser-compat-data
데스크톱모바일
iOSAndroid
SafariChromeFirefoxSafariChromeFirefoxSamsung Internet
filter
On SVG elements

마지막 수정:

CC BY-SA 4.0 unless otherwise noted. See LICENSE.