Frontend/CSS

[ styled-components ] styled-components๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  viewport ๊ธฐ์ค€์œผ๋กœ img ๋ณ€๊ฒฝํ•˜๊ธฐ

YWTechIT 2022. 5. 13. 15:16
728x90

๐Ÿ“ styled-components๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  viewport ๊ธฐ์ค€์œผ๋กœ img ๋ณ€๊ฒฝํ•˜๊ธฐ

๊ตฌ๋…์‹ ์ฒญ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉฐ viewport๋ฅผ ๊ธฐ์ค€์œผ๋กœ 768px ์ดํ•˜๋Š” ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ, 768px ์ด์ƒ์€ ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์ œ์ž‘ํ•˜๋˜ ์ค‘ viewport์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ, styled-components๋กœ viewport์— ๋”ฐ๋ผ์„œ src๋ฅผ ๋ฐ”๊ฟ” ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HTMLํƒœ๊ทธ์ธ <picture>ํƒœ๊ทธ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ <picture>ํƒœ๊ทธ์™€ <source>ํƒœ๊ทธ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ๊ตณ์ด styled-components๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์šฐ์„  <picture> ํƒœ๊ทธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž๋ฉด, 0๊ฐœ ์ด์ƒ์˜ <source> ์š”์†Œ์™€ ํ•˜๋‚˜์˜ <img> ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋””์Šคํ”Œ๋ ˆ์ด/์žฅ์น˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ๋Œ€์ฒด ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €๋Š” <picture>์˜ ์ž์‹ํƒœ๊ทธ์ธ <source> ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜๊ณ , ๊ทธ์ค‘ ๊ฐ€์žฅ ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์„ ํƒํ•œ๋‹ค. ๋งŒ์•ฝ, ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ <picture> ์š”์†Œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ <img> src ์†์„ฑ์„ ์„ ํƒํ•œ๋‹ค. ํ•œ๋งˆ๋””๋กœ <picture>์˜ ํ•˜์œ„ํƒœ๊ทธ์—์„œ <source>์˜ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๋ฉด <source>๋ฅผ ํ‘œ์‹œํ•˜๊ณ , <source>์˜ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด <img> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค.

728x90

๊ฒฐ๋ก ์ ์œผ๋กœ ํ•˜๋‹จ ์ฝ”๋“œ ๋ธ”๋ก์—์„œ๋Š” viewport๊ฐ€ min-width: 768px๋ณด๋‹ค ์ž‘๋‹ค๋ฉด <source>ํƒœ๊ทธ์˜ srcset๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , viewport๊ฐ€ min-width: 768px๋ณด๋‹ค ํฌ๋‹ค๋ฉด <source>ํƒœ๊ทธ ๊ธฐ์ค€์— ์ถฉ์กฑ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— <img>ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ž์„ธํ•œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ํ•˜๋‹จ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž!

 

์—ฌ๋‹ด์œผ๋กœ <source>๋ฅผ ์–ธ์ œ์“ฐ๋Š”์ง€ ์ž˜ ๋ชฐ๋ž๋Š”๋ฐ, Media ํ˜น์€ img ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์“ด๋‹ค. ์—ฌ๊ธฐ์„œ Media๋Š” <video>, <audio> ๋“ฑ์„ ๋งํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  <source>์—๋Š” type property๋ฅผ ๋ช…์‹œํ•˜๋Š”๋ฐ ์ด๋•Œ, MIME resource๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋˜, <source>ํƒœ๊ทธ์—๋Š” src ํ˜น์€ srcset property๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”๋ฐ src property๋Š” ๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ <audio> ํ˜น์€ <video> ํƒœ๊ทธ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , ๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ <picture> ์ผ ๋•Œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ srcset property๋Š” ๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ <picture> ํƒœ๊ทธ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ <audio> ํ˜น์€ <video> ํƒœ๊ทธ์ผ ๋•Œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

<picture>
  <source width="100%" type="image/jpeg" media="(min-width: 768px)"
    srcSet={`${NEWSLETTER_IMG.deskTop}`} />
  <img width="100%" alt="subscribe-img"
    src={`${NEWSLETTER_IMG.mobile}`} />
</picture>

ํ•˜๋‹จ CodePen ํ™˜๊ฒฝ์—์„œ๋Š” viewport๋ฅผ ๋”ฐ๋กœ ์กฐ์ • ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ 0.5x์™€ 0.25x๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด์„œ ๋น„๊ตํ•ด๋ณด์ž! 0.5x๋Š” ๋ชจ๋ฐ”์ผ๋ฒ„์ „, 0.25x๋Š” PC๋ฒ„์ „์ด๋ผ๊ณ  ๋ณด๋ฉด๋œ๋‹ค!

See the Pen picture + source tag by an (@YWTechIT) on CodePen.

 

Reference

  1. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
  2. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source
  3. https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
  4. https://www.imdb.com/title/tt0816692/
  5. https://www.unrealengine.com/marketplace/ko/product/black-hole-creator
๋ฐ˜์‘ํ˜•