원하는 영역에 배너나 이미지 썸네일을 넣게 될 경우에 정확한 사이즈의 이미지를 받아서 넣거나 2배, 3배와 같은 배수의 이미지를 받아서 넣는 경우 이미지가 흐려보이는 경우는 없겠지만 작업을 하다보면 내가 원하는 사이즈의 이미지를 넣을 수 없는 경우도 있다.
이미지를 원래의 사이즈 혹은 원본 사이즈의 배수에 해당하는 사이즈로 넣지 않을 경우 이미지가 흐려(blur) 보이는 경우가 많이 있는데 특히 크롬에서 이 현상이 더 심하게 보인다.
좌측은 이미지의 원본 사이즈를 그대로 놓은 것이고 우측은 원본 이미지를 축소해서 노출을 시킨 것이다.
한 눈에 보더라도 우측 이미지가 흐릿하게 보인다는걸 알 수 있다. 일반적인 이미지일 경우에 눈감아줄 수 있을 정도의 흐림인 경우도 있지만 텍스트가 들어간 이미지인 경우 흐린 효과가 더 부각되어 보인다.
이러한 현상을 해결하기 위해 css 처리가 필요하다.
1. image-rendering(이미지 랜더링 방식 변경)
image-rendering은 확대, 축소 된 이미지에만 적용이 되는 css 이다.
원본 이미지를 그 사이즈 그대로 사용하게 될 경우엔 css가 따로 적용되는 내용이 없지만 특정 이미지를 확대하거나 축소를 할 경우에 해당 css를 사용하면 효과를 발현한다.
.banner{
image-rendering: -moz-crisp-edges; /* firefox */
image-rendering: -o-crisp-edges; /* opera */
image-rendering: -webkit-optimize-contrast; /* chrome(비표준) */
image-rendering: crisp-edges;
}
crisp-edges는 이미지의 색상대조를 최적화하여 랜더링하게 만들어 흐리거나 번져보이는 효과를 많이 잡아줄 수 있다.
위와 같이 image-rendering을 사용하는데 우린 유독 흐림 효과가 심한 크롬에 적용할 목적이므로 -webkit-optimize-contrast를 적용한다.
2. translateZ
transform을 사용하여 이미지의 Z축을 0으로 초기화 시켜 입체감을 없앤다.
.banner{
transform:translateZ(0);
}
3. backface-visibility
backface-visibility는 요소의 뒷면을 보여줄 것인지 보여주지 않을 것인지를 정하는 css이다.
.banner{
backface-visibility:hidden;
}
위와 같이 이미지의 뒷면을 hidden처리하여 보이지 않게, 입체감이 없게 처리할 수 있다.
4. 정리
.banner{
image-rendering:-webkit-optimize-contrast;
transform:translateZ(0);
backface-visibility:hidden;
}
해당 3가지 css를 사용하면 위 이미지 예시처럼 보다 뚜렷한 이미지를 얻을 수 있다.
물론 가능하다면 위 css를 사용하는 일 없이 영역에 맞는 사이즈의 이미지를 가져와서 사용한다면 더할나위 없이 좋을 것이다.
참조
https://intrepidgeeks.com/tutorial/chrome-image-blur
https://developer.mozilla.org/ko/docs/Web/CSS/backface-visibility
'Frontend > CSS' 카테고리의 다른 글
[css 단위] dvh, svh, lvh (모바일 주소 표시줄 영역 대응) (0) | 2023.07.14 |
---|---|
[css 속성] will-change (애니메이션 성능 향상) (0) | 2023.03.04 |
[css 응용] 스크립트 없이 드롭다운 메뉴 만들기 (drop down menu) (0) | 2022.01.11 |
[css 속성] env() (아이폰 노치 영역 대응) (0) | 2021.08.24 |
[css 응용] z-index 버그 (opacity, transform과 함께 사용시) (0) | 2021.04.08 |