Menu

CSS 흐림 효과와 filter: blur(), grayscale, brightness

filter: blur(5px)는 요소를 흐리게 하고, backdrop-filter: blur()는 요소 뒤에 있는 것을 흐리게 해요. 모든 filter 함수(brightness, contrast, grayscale, sepia, saturate, hue-rotate, invert, drop-shadow)를 실시간 슬라이더로 보고, 조합하는 법과 흐림 가장자리 문제를 알아봐요.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

요소 흐리게 하기

filter: blur()는 흐림 반지름인 길이를 받아요. 클수록 요소가 더 흐려져요.

filter는 이미지뿐 아니라 모든 요소에서 동작해요. 흐리게 한 div는 텍스트, 테두리, 자식도 흐려져요. 흐리게 한 이미지의 부드러운 가장자리를 보세요. 흐림이 그림을 바깥으로 퍼뜨리고 둘레의 투명한 영역과 섞어요. 해결 방법은 아래 "흐림 가장자리 문제"에 있어요.

배경 흐리게 하기: backdrop-filter

요소 뒤에 있는 것(사진이나 페이지 위의 반투명 유리 패널)을 흐리게 하려면 backdrop-filter를 쓰세요. 요소 자신의 콘텐츠는 선명하게 남아요. 흐림을 보여 주려면 비쳐 보이는 배경이 필요해요.

줄무늬와 원은 패널 둘레에서는 선명하고 패널 뒤에서는 흐려지고, 패널의 텍스트는 그대로예요. 텍스트를 읽기 좋게 유지하세요. 복잡한 이미지 위에서는 배경색에 더 밝거나 어두운 색조를 주면 도움이 돼요.

모든 filter 함수, 실시간으로

아무 슬라이더나 움직여 보세요. 이미지 아래 줄이 복사해서 쓸 수 있는 정확한 filter 값이에요.

중립값에서 움직인 함수만 적혀서 값이 짧게 유지돼요. brightness(1)이나 blur(0px)는 아무것도 바꾸지 않으니 나열할 이유가 없어요.

filter 함수

함수중립값하는 일예시
blur(r)0반지름 r의 가우시안 흐림blur(4px)
brightness(n)11보다 작으면 어둡게, 크면 밝게brightness(0.7)
contrast(n)11보다 작으면 밋밋하게, 크면 선명하게contrast(1.3)
grayscale(n)01(또는 100%)이면 완전한 회색grayscale(100%)
sepia(n)0따뜻한 갈색 톤sepia(0.6)
saturate(n)10이면 회색, 1보다 크면 더 선명하게saturate(1.5)
hue-rotate(a)0deg모든 색상을 색상환에서 옮겨요hue-rotate(90deg)
invert(n)01이면 완전한 색 반전invert(1)
opacity(n)1opacity 속성과 같아요opacity(0.5)
drop-shadow(x y blur color)모양을 따라가는 그림자drop-shadow(2px 4px 6px rgb(0 0 0 / 0.3))

숫자는 퍼센트로도 쓸 수 있어요(grayscale(100%)는 grayscale(1)과 같아요). 여러 함수를 공백으로 구분해서 한 값에 넣고, 순서대로 적용돼요. filter: grayscale(1) sepia(1)는 갈색 톤이 되지만, sepia(1) grayscale(1)은 그냥 회색이 돼요.

drop-shadow는 모양을 따라가요

box-shadow는 항상 직사각형이에요(기껏해야 둥근 모서리). drop-shadow()는 보이는 픽셀에서 그려져서, 투명한 아이콘은 아이콘 윤곽의 그림자를 가져요.

첫 번째 별은 보이지 않는 경계 상자에서 네모난 그림자를 드리워요. 두 번째 별은 별 모양 그림자를 드리워요. box-shadow와 달리 drop-shadow()에는 spread 값도 inset도 없어요. 이는 box-shadow 페이지에서 다뤄요.

흐림 가장자리 문제

흐리게 한 이미지는 둘레의 투명한 픽셀을 끌어들여서 가장자리가 흐려져요. 딱 떨어지는 가장자리를 유지하려면(예를 들어 흐린 히어로 배경에서) 이미지를 overflow: hidden인 컨테이너에 넣고, 이미지를 살짝 키워서 부드러운 가장자리가 잘려 나가게 하세요.

.hero { overflow: hidden; }
.hero img { filter: blur(8px); transform: scale(1.1); }

filter로 만드는 hover 효과

filter는 트랜지션할 수 있어서, 회색에서 컬러로 바뀌는 로고 모음이나 hover하기 전까지 어두운 카드가 규칙 두 개면 돼요.

타일에 마우스를 올리거나 Tab으로 이동하면 색이 서서히 나타나요.

알아 두면 좋은 것

  • 성능. 넓은 영역의 큰 흐림 반지름이 가장 비싸요. 특히 움직이거나 스크롤되는 요소의 backdrop-filter가 그래요. 휴대폰에서 테스트하세요.
  • 가독성. 사람들이 읽어야 하는 텍스트는 절대 흐리게 하지 말고, 반투명 유리 패널 위 텍스트의 명도 대비를 확인하세요.
  • 쌓임. none이 아닌 모든 filter는 transform처럼 새 쌓임 맥락을 만들고 position: fixed 자손의 포함 블록이 돼요.

자주 하는 실수

  • filter: blur(5). 반지름에는 단위가 필요해요. blur(5px)로 쓰세요.
  • 반투명 유리 패널에 filter: blur() 쓰기. 패널 자신의 텍스트가 흐려져요. 투명한 배경과 함께 backdrop-filter를 쓰세요.
  • 아무것도 보이지 않는 backdrop-filter. 요소의 배경이 적어도 부분적으로 투명해야 하고, 뒤에 무언가가 있어야 해요.
  • filter 선언 두 개. 두 번째가 첫 번째를 대체해요. 모든 함수를 한 값에 넣으세요.
  • 투명한 아이콘에 네모난 그림자. box-shadow 대신 filter: drop-shadow()를 쓰세요.

자주 묻는 질문

CSS로 요소를 흐리게 하려면 어떻게 하나요?

filter: blur(5px);를 쓰세요. 길이는 흐림 반지름이에요. 0은 선명하고 값이 클수록 더 흐려져요. 요소와 그 안의 텍스트와 이미지를 포함한 모든 것을 흐리게 해요.

요소 뒤의 배경을 흐리게 하려면 어떻게 하나요?

요소에 rgb(255 255 255 / 0.5) 같은 부분 투명 배경과 함께 backdrop-filter: blur(10px);를 쓰세요. 요소 자신의 콘텐츠는 선명하게 남고 뒤에 있는 것이 흐려져요. 반투명 유리 효과예요.

drop-shadow()와 box-shadow는 무엇이 다른가요?

box-shadow는 항상 요소의 직사각형 상자를 따라가요. filter: drop-shadow()는 PNG나 SVG의 투명한 영역을 포함해서 보이는 모양을 따라가서, 아이콘의 그림자가 아이콘의 윤곽을 가져요.

CSS로 이미지를 흑백으로 만들려면 어떻게 하나요?

filter: grayscale(100%);(또는 grayscale(1))를 쓰세요. 트랜지션과 hover 때의 filter: grayscale(0)을 추가하면 색이 돌아와요.

filter를 여러 개 동시에 쓸 수 있나요?

네, 공백으로 구분해서 나열하세요. filter: grayscale(1) brightness(1.2) blur(1px); 순서대로 적용돼서 순서가 결과를 바꿀 수 있어요. 두 번째 filter 선언은 첫 번째를 대체해요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기