반응형 이미지
해상도 전환(resolution switching)
- 크기만 다른 동일한 이미지를 보여주고 싶을 때 사용하는 방법
- 화면에 어울리지 않게 일부러 큰 이미지를 사용하여 낭비를 하거나, 작은 사이즈의 이미지를 확대하는 것은 좋지 않다.
- 해상도 전환은 다양한 스크린, 다바이스에서 보유주기 위한 방법
- 해결방법: 1. 벡터 그래픽 이미지 사용, 2.
<img>
요소에srcset
와 sizes 속성 이용
srcset
srcset = "./img/screen1.png 360w",
"./img/screen2.png 600w"
/* 이미지 경로 + 공백 + 고육 픽셀 너비 작성 */
/* 같은 비율의 다양한 이미지 크기를 가지는 동일 이미지들이 최소 2개 이상 명시하는 속성 */
/* pw 단위가 아닌 w,x를 사용 */
w
서술자
- 이미지의 원본 넓이를 브라우저에게 알려줌
w
서술자가 적용되면 이미지 크기는 뷰포트의 100%를 차지(width, sizes 등 속성으로 변경 가능)w
서술자를 사용한 경우src
속성을 무시(만약srcset
속성이 사용 불가능한 브라우저일 경우 대비해서src
를 작성)
x
서술자
- 화소의 밀도, 디바이스 화소 밀도에 따른 이미지를 로딩하도록 브라우저에게 알려줌
- 화소밀도(pixel density)
- 동일한 면적에 들어가는 화소의 수
- 화소의 갯수가 많을 수록 더 높은 해상동의 기기
- 서술자를 포함하지 않은 경우 기본값인
1x
로 간주 w
,x
는 동시에 사용이 불가능하다.
같은 크기, 다른 해상도: srcset
와 서술자 사용(크기와 해상도는 다르다.)
- 모두가 이미지를 실제 사이즈로 동일하게 봐야 할 때
x
서술자를 이용하여 브라우저에 적절한 이미지를 선택
info
srcset은 브라우저에게 이미지 선택권을 위임하는 속성
srcset 속성은 원하는 이미지를 선택 및 강제할 수 없다.
브라우저 자체가 상황에 맞게 이미지를 선택해준다.
만약 해상도에 맞게 출력할 결과를 정하고 싶다면 CSS에서 @media를 이용하면 된다.
sizes
- 미디어 조건문이 true일 경우, 이미지가 차지하게 될 사이즈를 브라우저에게 알려준다.(
px
,em
,vw
사용가능%
는 사용 불가능) - 미디어 조건문이 없는 마지막 줄은 앞의 조건문 값이 false일 경우에 동작한다.
srcset
이 비어있거나 너비 서술자를 사용하지 않으면 효과가 없다.size
와width
를 같이 작성할 경우width
를 우선
danger
CSS 충돌 주의 size 속성을 사용할 때, CSS를 통한 이미지의 사이즈를 컨트롤 하는 방법과 충돌할 수 있다.
아트 디렉션(art direction)
- 연출방향, 중요한 부분을 자른 이미지를 보여주는 것
- 반응형 이미지에서 이미지의 의도가 제대로 전달되도록 기기에 따라 사진의 핵심을 확대하는 방법
- 다른 비율, 다양한 크기의 이미지를 사용할 때 사용
<picture>
요소 사용하기
<picture>
<source media="(min-width: 1024px)" srcset="/img/lication-chilli.png" />
<source media="(max-width: 1023px)" srcset="/img/lication-chilli2.png" />
<img src="lication-chilli.png" alt="위니브 리케이션 속 칠리" />
</picture>
/* Viewport 혹은 width의 설정에 따라 1024이상이면 chilli 1023이하라면 chilli2가
적용 */
<source>
-
브라우저가 고려하여 가장 적합한 요소를 선택. 일치하지 않거나 브라우저가
<picture>
요소를 지원하지 않으면<img>
요소를 선택 -
type
<source>
요소의 srcset 속성에 있는 URL에 대한 MIME 유형을 지정
-
media
- 아트 디렉션에만 사용
- 미디어를 사용한다면
sizes
속성 내에 제공해서는 안된다.
<img>
- src, alt 속성 포함
<source>
요소 중 사용가능한 이미지가 없을 경우 해당 이미지로 적용
이미지 포맷 종류
- GIF(Graphics Interchange Format): 256색의 컬러만 표현 가능하기 때문에 선명하진 않지만 용량이 적다.
- 투명 표현, 애니메이션 처리 가능
- 투명 조절, 그림자 표현 불가능
- JPG/JPEG(Joint Photographic Expert Group image): 매우 화소가 높고, 용량도 적지만 투명처리가 불가능
- PNG(Portable Network Graphics): 컬러는 모두 표현 가능하며, 투명 영역을 처리 가능하지만 용량이 큼.
- SVG(Scalable Vector Graphics): 손실이나 품질 저하 없이 모든 크기에서 렌더링이 가능.
- WebP(Web Picture Format): JPEG보다 압축률이 더 좋고 뛰어난 색상을 지원.
- 투명도 표현 가능, 애니메이션 표현 가능.
- AVIF(AV1 Image File Format): 뛰어난 색상표현, 애니메이션 처리, 투명도 표현 가능 용량도 JPEG의 50% 수준. 현재 지원하지 않는 브라우저가 많다.
반응형 이미지 만드는 방법
width: 100%
max-width: 100%