[๐Ÿค–] CSS Container Queries: ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์˜ ์ƒˆ๋กœ์šด ์ง€ํ‰

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด, ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ์กฐ์ ˆํ•˜๋Š” CSS Container Queries๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ณด๊ณ  ์‹ค๋ฌด ์ ์šฉ ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ด ๋“œ๋ ค์š”.

16๋ถ„
๋‹จ์–ด: 1,297๊ฐœ
๊ฒŒ์‹œ๊ธ€ ์ธ๋„ค์ผ
์ •๋ณด

๐Ÿค– ์ด ํฌ์ŠคํŒ…์€ Gemini 2.5 Flash AI๊ฐ€ ์ž‘์„ฑํ–ˆ์–ด์š”.
๋‚ด์šฉ์˜ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๊ฒ€ํ† ๋ฅผ ๊ฑฐ์ณค์ง€๋งŒ, ์‹ค๋ฌด ์ ์šฉ ์ „ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ํ•จ๊ป˜ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

์œ ์šฉํ•œ ํŒ

์ด ๊ธ€์—์„œ๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” CSS Container Queries์˜ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค๋ฌด ์ ์šฉ ์˜ˆ์‹œ๊นŒ์ง€ ์ž์„ธํžˆ ์‚ดํŽด๋ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”! 10๋…„ ์ด์ƒ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž์ด์ž ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ SEO ์ „๋ฌธ๊ฐ€, ๋ธ”๋ฃจ์ž…๋‹ˆ๋‹ค.
์ €๋Š” ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์—ฌ์ •์— ์‹ค์งˆ์ ์ธ ๋„์›€์„ ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ด ์ž๋ฆฌ์— ์žˆ์–ด์š”.

์˜ค๋Š˜์€ ์˜ค๋žซ๋™์•ˆ ์›น ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ˆ™์› ์‚ฌ์—…์ด์—ˆ๋˜ '์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ'์„ ํ˜„์‹ค๋กœ ๋งŒ๋“ค์–ด์ค€ CSS Container Queries์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•ด์š”. ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ๋Š” ์ด ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ณ , ๋” ์œ ์—ฐํ•œ UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”์ง€ ํ•จ๊ป˜ ์•Œ์•„๋ด์š”.

๐Ÿค” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„, ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ

0๏ธโƒฃ ์™œ Container Queries๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?

๊ธฐ์กด ์›น ๊ฐœ๋ฐœ์—์„œ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฐ”๋กœ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ(Media Queries)์˜€์–ด์š”. min-width๋‚˜ max-width ๊ฐ™์€ ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋ทฐํฌํŠธ(viewport)์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ „์ฒด ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์š”์†Œ๋“ค์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ–ˆ์ฃ .
ํ•˜์ง€๋งŒ ํ˜„๋Œ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ ์  ๋” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์–ด์š”. ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๋ฐฐ์น˜๋  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋•Œ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋ฐ˜์‘ํ˜• ๋™์ž‘์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์กŒ์–ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋‰ด์Šค ๊ธฐ์‚ฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์นด๋“œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด์š”.
์ด ์นด๋“œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฉ”์ธ ํŽ˜์ด์ง€์˜ ๋„“์€ ์„น์…˜์— ์žˆ์„ ๋•Œ๋Š” ์ด๋ฏธ์ง€์™€ ๊ธด ์š”์•ฝ ํ…์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์–ด์š”.
ํ•˜์ง€๋งŒ ์‚ฌ์ด๋“œ๋ฐ”์ฒ˜๋Ÿผ ์ข์€ ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐˆ ๋•Œ๋Š” ์ด๋ฏธ์ง€ ์—†์ด ์ œ๋ชฉ๊ณผ ์งง์€ ํ…์ŠคํŠธ๋งŒ ๋ณด์—ฌ์ค˜์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ฃ .
์ด๋•Œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋Š” ๋ทฐํฌํŠธ ์ „์ฒด์˜ ํฌ๊ธฐ๋งŒ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋†“์ธ '๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ'์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋Š” ๋งค์šฐ ์–ด๋ ค์› ์–ด์š”.

์‹คํŒจ

๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ํ•œ๊ณ„
๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋Š” ๋ทฐํฌํŠธ(๋ธŒ๋ผ์šฐ์ € ์ฐฝ)์˜ ํฌ๊ธฐ์—๋งŒ ๋ฐ˜์‘ํ•ด์š”. ํŠน์ • ์ปดํฌ๋„ŒํŠธ๋‚˜ ์œ„์ ฏ์ด ์†ํ•œ ๋ถ€๋ชจ ์š”์†Œ์˜ ํฌ๊ธฐ์—๋Š” ๋ฐ˜์‘ํ•  ์ˆ˜ ์—†์–ด์„œ, ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์–ด์š”.

1๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๋””์ž์ธ์˜ ์ˆ™์› ์‚ฌ์—…

์ด๋Ÿฌํ•œ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์˜ค๋žซ๋™์•ˆ ์›น ๊ฐœ๋ฐœ์ž๋“ค์€ '์—˜๋ฆฌ๋จผํŠธ ์ฟผ๋ฆฌ(Element Queries)' ๋˜๋Š” '์ปจํ…Œ์ด๋„ˆ ์ฟผ๋ฆฌ(Container Queries)'์™€ ๊ฐ™์€ ๊ฐœ๋…์„ ์š”๊ตฌํ•ด ์™”์–ด์š”. ์ปดํฌ๋„ŒํŠธ ์Šค์Šค๋กœ๊ฐ€ ์ž์‹ ์˜ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ ํฌ๊ธฐ์— ๋งž์ถฐ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ํ›จ์”ฌ ๋” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์—ฐํ•œ UI ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ํ…Œ๋‹ˆ๊นŒ์š”.
๊ทธ๋ฆฌ๊ณ  ๋งˆ์นจ๋‚ด, ์ด ์ˆ™์› ์‚ฌ์—…์ด ํ˜„์‹ค์ด ๋˜์—ˆ๋‹ต๋‹ˆ๋‹ค! ๋ฐ”๋กœ CSS Container Queries ๋•๋ถ„์ด์—์š”.

โš™๏ธ CSS Container Queries์˜ ์ž‘๋™ ์›๋ฆฌ

0๏ธโƒฃ ํ•ต์‹ฌ ์•„์ด๋””์–ด: ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฟผ๋ฆฌํ•ด์š”

CSS Container Queries๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ '์ปจํ…Œ์ด๋„ˆ(Container)'์˜ ํฌ๊ธฐ๋ฅผ ์ฟผ๋ฆฌ(query)ํ•ด์„œ ์ž์‹ ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
์—ฌ๊ธฐ์„œ ์ปจํ…Œ์ด๋„ˆ๋Š” ํŠน์ • CSS ์†์„ฑ์„ ํ†ตํ•ด '์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ(Query Container)'๋กœ ์ง€์ •๋œ ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•ด์š”.
์ž์‹ ์š”์†Œ๋Š” ์ด ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฑฐ์ฃ .

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ด์š”.

  1. ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ ์ง€์ •: ๋ถ€๋ชจ ์š”์†Œ๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์„ค์ •ํ•ด์š”.
  2. ์ปจํ…Œ์ด๋„ˆ ์ฟผ๋ฆฌ ์ž‘์„ฑ: @container ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ž์‹ ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ์ •์˜ํ•ด์š”.

1๏ธโƒฃ container-type๊ณผ container-name์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•ด์š”

์–ด๋–ค ์š”์†Œ๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋งŒ๋“ค๋ ค๋ฉด, ํ•ด๋‹น ์š”์†Œ์— container-type ์†์„ฑ์„ ์ง€์ •ํ•ด์•ผ ํ•ด์š”. ํ•„์š”ํ•˜๋‹ค๋ฉด container-name๋„ ํ•จ๊ป˜ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • container-type: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ์ถ•์œผ๋กœ ์ฟผ๋ฆฌ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •์˜ํ•ด์š”.
    • size: ์ธ๋ผ์ธ(๋„ˆ๋น„) ๋ฐ ๋ธ”๋ก(๋†’์ด) ์ถ• ๋ชจ๋‘ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. (๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด์—์š”)
    • inline-size: ์ธ๋ผ์ธ(๋„ˆ๋น„) ์ถ•๋งŒ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋  ๊ฑฐ์˜ˆ์š”)
    • normal: ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ, ์ปจํ…Œ์ด๋„ˆ ์ฟผ๋ฆฌ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์š”.
  • container-name: ์ปจํ…Œ์ด๋„ˆ์— ์ด๋ฆ„์„ ๋ถ€์—ฌํ•ด์„œ, ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ์žˆ์„ ๋•Œ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”. (์„ ํƒ ์‚ฌํ•ญ์ด์—์š”)
์œ ์šฉํ•œ ํŒ

inline-size๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
๋Œ€๋ถ€๋ถ„์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ€๋กœ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์š”. inline-size๋Š” ์ด๋Ÿฌํ•œ ๊ฐ€๋กœ ํฌ๊ธฐ(๋„ˆ๋น„) ๋ณ€ํ™”์—๋งŒ ๋ฐ˜์‘ํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด๋‚˜ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์„ ๋ง‰๊ณ  ์„ฑ๋Šฅ์—๋„ ์œ ๋ฆฌํ•ด์š”.

2๏ธโƒฃ @container ๊ทœ์น™์œผ๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ด์š”

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ–ˆ๋‹ค๋ฉด, ์ด์ œ ์ž์‹ ์š”์†Œ์—์„œ @container ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.
๋ฌธ๋ฒ•์€ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ด์š”.

/* ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„ ์—†์ด ์ฟผ๋ฆฌ (๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ปจํ…Œ์ด๋„ˆ์— ์ ์šฉ) */ @container (min-width: 400px) { .child-element { /* ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„๊ฐ€ 400px ์ด์ƒ์ผ ๋•Œ ์ ์šฉ๋  ์Šคํƒ€์ผ */ font-size: 1.2rem; padding: 1rem; } } /* ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ์ฟผ๋ฆฌ */ @container card-container (max-width: 300px) { .card-image { display: none; /* 'card-container'์˜ ๋„ˆ๋น„๊ฐ€ 300px ์ดํ•˜์ผ ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์ˆจ๊ฒจ์š” */ } .card-title { font-size: 0.9rem; } }

๐Ÿงช ์‹ค๋ฌด ์ ์šฉ ์˜ˆ์‹œ: ๋ฐ˜์‘ํ˜• ์นด๋“œ ์ปดํฌ๋„ŒํŠธ

์ด์ œ ์‹ค์ œ๋กœ Container Queries๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ ์—ฐํ•œ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”? ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ๋‰ด์Šค ์นด๋“œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณผ๊ฒŒ์š”.

0๏ธโƒฃ HTML ๊ตฌ์กฐ

<div class="container-wrapper"> <div class="card-container"> <img src="https://via.placeholder.com/150" alt="Placeholder Image" class="card-image" /> <div class="card-content"> <h3 class="card-title">์ปจํ…Œ์ด๋„ˆ ์ฟผ๋ฆฌ๋กœ ์œ ์—ฐํ•ด์ง„ ์นด๋“œ ์ œ๋ชฉ</h3> <p class="card-description">์ด๊ฒƒ์€ ์นด๋“œ ์„ค๋ช… ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋  ๊ฑฐ์˜ˆ์š”.</p> <button class="card-button">๋” ๋ณด๊ธฐ</button> </div> </div> </div> <div class="sidebar-wrapper"> <div class="card-container"> <img src="https://via.placeholder.com/150" alt="Placeholder Image" class="card-image" /> <div class="card-content"> <h3 class="card-title">์‚ฌ์ด๋“œ๋ฐ”์— ๋“ค์–ด๊ฐ„ ์นด๋“œ</h3> <p class="card-description">์‚ฌ์ด๋“œ๋ฐ”์—์„œ๋Š” ๋‚ด์šฉ์ด ๋” ์งง์•„์ ธ์š”.</p> <button class="card-button">๋” ๋ณด๊ธฐ</button> </div> </div> </div>

์œ„ HTML์—์„œ card-container๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์ฟผ๋ฆฌํ•  ๋Œ€์ƒ์ด ๋  ๊ฑฐ์˜ˆ์š”. ๊ทธ๋ฆฌ๊ณ  ์ด card-container๋Š” container-wrapper์™€ sidebar-wrapper๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋„ˆ๋น„์˜ ๋ถ€๋ชจ ์•ˆ์— ๋ฐฐ์น˜๋˜์–ด ์žˆ์ฃ .

1๏ธโƒฃ CSS ์ •์˜ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์ง€์ •

๋จผ์ €, card-container๋ฅผ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง€์ •ํ•˜๊ณ  ๊ธฐ๋ณธ ์Šคํƒ€์ผ์„ ์ •์˜ํ• ๊ฒŒ์š”.

.container-wrapper, .sidebar-wrapper { padding: 1rem; } .container-wrapper { width: 70%; background-color: #f0f0f0; margin-bottom: 2rem; } .sidebar-wrapper { width: 25%; background-color: #e0e0e0; } .card-container { container-type: inline-size; /* ์ด ์š”์†Œ์˜ ์ธ๋ผ์ธ(๊ฐ€๋กœ) ํฌ๊ธฐ๋ฅผ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์š” */ container-name: article-card; /* 'article-card'๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ€์—ฌํ•ด์š” */ display: flex; gap: 1rem; border: 1px solid #ccc; padding: 1rem; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .card-image { width: 150px; height: 100px; object-fit: cover; border-radius: 4px; } .card-content { flex-grow: 1; } .card-title { font-size: 1.2rem; margin-top: 0; } .card-description { font-size: 0.9rem; color: #555; } .card-button { background-color: #007bff; color: white; border: none; padding: 0.5rem 1rem; border-radius: 5px; cursor: pointer; margin-top: 0.5rem; }

card-container์— container-type: inline-size;์™€ container-name: article-card;๋ฅผ ์ ์šฉํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ์ด์ œ ์ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ ์ž์‹ ์š”์†Œ๋“ค์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”.
container-wrapper๋Š” ๋„“์€ ์˜์—ญ์„, sidebar-wrapper๋Š” ์ข์€ ์˜์—ญ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•ด ๋„ˆ๋น„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฃผ์—ˆ์–ด์š”.

2๏ธโƒฃ @container ๊ทœ์น™์œผ๋กœ ๋ฐ˜์‘ํ˜• ์Šคํƒ€์ผ์„ ์ ์šฉํ•ด์š”

์ด์ œ article-card ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„์— ๋”ฐ๋ผ ์นด๋“œ ๋‚ด๋ถ€ ์š”์†Œ๋“ค์˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•ด๋ณผ๊ฒŒ์š”.

/* ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„๊ฐ€ 450px ์ดํ•˜์ผ ๋•Œ */ @container article-card (max-width: 450px) { .card-container { flex-direction: column; /* ์ด๋ฏธ์ง€๋ฅผ ์œ„๋กœ, ๋‚ด์šฉ์„ ์•„๋ž˜๋กœ ๋ฐฐ์น˜ */ align-items: flex-start; } .card-image { width: 100%; /* ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๋„ˆ๋น„์— ๊ฝ‰ ์ฑ„์šฐ๊ณ  */ height: 180px; /* ๋†’์ด๋Š” ๊ณ ์ • */ } } /* ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„๊ฐ€ 300px ์ดํ•˜์ผ ๋•Œ (์‚ฌ์ด๋“œ๋ฐ”์ฒ˜๋Ÿผ ๋งค์šฐ ์ข์„ ๋•Œ) */ @container article-card (max-width: 300px) { .card-image { display: none; /* ์ด๋ฏธ์ง€๋ฅผ ์™„์ „ํžˆ ์ˆจ๊ฒจ์š” */ } .card-description { display: -webkit-box; /* ํ…์ŠคํŠธ๋ฅผ ๋‘ ์ค„๋กœ ์ œํ•œ */ -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } .card-title { font-size: 1rem; } }

์œ„ CSS ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•˜๋ฉด, card-container์˜ ๋„ˆ๋น„๊ฐ€ 450px ์ดํ•˜๋กœ ์ค„์–ด๋“ค๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ์ƒ๋‹จ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๋‚ด์šฉ์ด ์•„๋ž˜๋กœ ๋ฐฐ์น˜๋˜๋Š” ์„ธ๋กœํ˜• ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋ณ€๊ฒฝ๋ผ์š”.
๊ทธ๋ฆฌ๊ณ  300px ์ดํ•˜๋กœ ๋” ์ค„์–ด๋“ค๋ฉด, ์ด๋ฏธ์ง€๊ฐ€ ์•„์˜ˆ ์‚ฌ๋ผ์ง€๊ณ  ์„ค๋ช… ํ…์ŠคํŠธ๋„ ๋‘ ์ค„๋กœ ์ œํ•œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์ด๋Š” container-wrapper ์•ˆ์˜ ์นด๋“œ์™€ sidebar-wrapper ์•ˆ์˜ ์นด๋“œ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฐ˜์‘ํ˜• ๋™์ž‘์„ ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ด์š”. ๋ทฐํฌํŠธ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ์˜ค์ง ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์—๋งŒ ๋ฐ˜์‘ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

๐Ÿ“ ์ •๋ฆฌ

0๏ธโƒฃ ํ•ต์‹ฌ ์š”์•ฝ

CSS Container Queries๋Š” ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์˜ ๋ทฐํฌํŠธ ๊ธฐ๋ฐ˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„์˜ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ˜์‹ ์ ์ธ CSS ๊ธฐ๋Šฅ์ด์—์š”.
container-type ๋ฐ container-name ์†์„ฑ์œผ๋กœ ์ฟผ๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ , @container ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ž์‹ ์š”์†Œ์˜ ์Šคํƒ€์ผ์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.

  • container-type: inline-size;: ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ์˜ ๋„ˆ๋น„(์ธ๋ผ์ธ ์ถ•)์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ•ด์š”.
  • @container (query): ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ด์š”.
  • container-name: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ค‘์ฒฉ๋  ๋•Œ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.

์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ , ํ›จ์”ฌ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ๋ฐ˜์‘ํ˜• UI๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

1๏ธโƒฃ ๋‹ค์Œ ์•ก์…˜

Container Queries๋Š” ์ด๋ฏธ ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด์š”. ์•„์ง ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด, ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ ์ง„์ ์œผ๋กœ ๋„์ž…ํ•ด๋ณด์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ด ๋“œ๋ ค์š”.
ํŠนํžˆ, ์—ฌ๋Ÿฌ ๋ ˆ์ด์•„์›ƒ์— ์žฌ์‚ฌ์šฉ๋˜๋Š” ์นด๋“œ๋‚˜ ์œ„์ ฏ ์ปดํฌ๋„ŒํŠธ ๋“ฑ์— ์ ์šฉํ•˜๋ฉด ๊ทธ ํšจ๊ณผ๋ฅผ ํฌ๊ฒŒ ์ฒด๊ฐํ•˜์‹ค ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.
๋” ์ด์ƒ ๋ถ€๋ชจ ์š”์†Œ์˜ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ์„ ๋ณต์žกํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ ธ์š”! ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ํ•œ ๋‹จ๊ณ„ ๋” ์˜ฌ๋ผ๊ฐˆ ๊ฑฐ์˜ˆ์š”.

๐Ÿ“ฎ ์ฐธ๊ณ 

์—ฐ๊ด€๋œ ํฌ์ŠคํŠธ