srcset 관련

스펙
https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-srcset
mdn
https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/srcset
https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/img#srcset

----------=--------------

샘플

from: 이케아 홈페이지에서


<img alt="강동점 베스트 어워즈" 
  src="https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=s" 
  srcset="https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=sg 1600w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xxxl 1400w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xxl 1100w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xl 900w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=l 750w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=m 700w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=s 600w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xs 500w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xxs 400w,
  https://www.ikea.com/images/-b8287ca620a9c84a5247b73cc586955c.jpg?f=xxxs 300w" 
  sizes="(min-width: 56.25em) 78vw, 100vw" loading="lazy">

srcset 설명 

1600w : 이 이미지는 너비가 1600px 기준이라는 표시. 브라우저는 sizes 를  참고하여 알맞는 너비의 이미지인지 판단 때 사용함.

sizes="(min-width: 56.25em) 78vw, 100vw"
=> 화면 너비가 56.25em 이하일 때 이미지는 화면 너비의 78% 가정, 미만이면 100% 가진다고 가정
=> 작은 화면인 경우 이미지는 화면의 100% 너비로 보이게, 큰 화면인 경우 78%의 너비로 보이게
=> 브라우저에서는 지정된 sizes 에서의 너비를 보고 1600w 등을 참고해서 보여질 이미지를 srcset 에서 선택함.

브라우저의 동작

1. 화면 너비에 따라서 sizes 의 너비 기준을 가지고 이미지를 선택해서 가져온다.
2. PC의 FHD 모니터에서 화면 너비가 1920이면 75vw로 1440px가 기준 너비가 된다. 1600w 를 선택해서 리사이즈 해서 사용한다.
3. 큰 사이즈은 이미지를 이미 가져왔을 경우, 화면이 작아져도 작은 사이즈 이미지를 안가져오고 이미 가지고있는 이미지를 리사이즈 해서 사용하는 경우가 많다.
4. 작은 사이즈의 이미지를 이미 가져왔어도 화면이 넓어지면 큰 사이즈로 가져와서 사용하는 경우가 많다.
5. 이미지 선택에 대해서는 브라우저가 자체적으로 판단하는 부분이라서 원하는 데로 정확히 동작 안할 수 있다.
6. 브라우저는 디바이스 픽셀 비율(DPR)도 계산에 포함한다.
6.1. DPR이 3이고 화면 너비가 400인 경우 너비 1200px 를 기준으로 가져오려고 할 것이다. srcset에서1400w를 가져와서 사용한다.
7. sizes 설정이 없으면 100vw를 기준으로 사용한다.

작은 이미지일 경우 sizes 설정은?

<img 
  width="32"
  src="icon.png"
  srcset="icon-32.png 32w, icon-64.png 64w"  sizes="32px"
>
sizes에 보여질 너비를 지정함.

작은 이미지일 경우 차라리

<img 
  width="32"
  src="icon.png"
  srcset="icon.png 1x, icon@2x.png 2x"
>
2x, 3x 같은 배율 방식이 더 편함. DPR에 맞춰서 최선의 이미지를 선택하려고 할 것임.


추천 활용 방법

1.  큰 상단 이미지 같은 경우 경우 999w로 처리.
2. 작은 아이콘류 2x 로 처리.


참고

1. img.currentSrc로 현재 선택된 이미지의 url을 알 수 있다.
1.1. srcset의 영향으로 img.src와 값이 다를 수 있다.
2. 휴대폰이나 고급 노트북의 경우 DPR이 3이 나오는 경우가 있다. 이 경우를 대비해서 최소 2x의 아이콘은 준비하자.
3. svg의 경우 렌더링 될 때 다시 백터에서 그려지므로 srcset 처리가 필요 없다. (안에 비트맵이 있는 경우는 희리게 보일 수 있다)


댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
제목 작성자 날짜
공대여자
공대여자
mins01
공대여자