๐ŸŽจ[css] ์œ ์šฉํ•œ CSS ๋ชจ์Œ

๊น€๋ฏผ์ค€ยท2024๋…„ 11์›” 26์ผ

CSS

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

์ด๋ฏธ์ง€ ํฌ๊ธฐ ๋ฐ˜์‘ํ˜• ๊ตฌํ˜„ํ•˜๊ธฐ

ํ…Œ์ผ์œˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ์ด๋ฏธ์ง€ํฌ๊ธฐ๊ฐ€ ๋ฐ˜์‘ํ˜•์— ๋งž๊ฒŒ ์ปค์กŒ๋‹ค ์ž‘์•„์ง€๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค

๐Ÿ“Œ ์ค‘์š”ํ•œ point

  • next์˜ Image ํƒœ๊ทธ๋Š” width ๋‚˜ layout ์†์„ฑ ์ค‘ ํ•˜๋‚˜๋Š” ํ•„์ˆ˜์ด๊ณ , ํ•˜๋‚˜๋ฅผ ์“ฐ๋ฉด ๋‚˜๋จธ์ง€๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค
  • ๋ฐ˜์‘ํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด width๋ฅผ ๊ณ ์ •๊ฐ’์œผ๋กœ ์ฃผ๋Š”๊ฒŒ ์•„๋‹Œ, layout ์†์„ฑ ์ค‘ fill์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค
  • fill์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€์— position:absolute ๊ฐ€ ์ž๋™ ์ ์šฉ๋œ๋‹ค
  • ๊ทธ๋ž˜์„œ ๋ถ€๋ชจ์— position: "relative", position: "fixed", ๋˜๋Š” position: "absolute" ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค
  • ์ด๋ฏธ์ง€ ๊นจ์ง€๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด objectfit: cover๋ฅผ ์ ์šฉํ•ด์ค€๋‹ค
  • ์ •์‚ฌ๊ฐํ˜• ์„ ์œ ์ง€ํ•ด์ฃผ๋Š” css ๋Š”
    aspect-square ์ด๋‹ค
<div className="relative aspect-square w-1/4">
  <Image src="/images/0.jpg" fill objectFit="cover" alt="์ฒดํ—˜์ด๋ฏธ์ง€" />
</div>

Image ํƒœ๊ทธ objectFit

Next.js 13์—์„œ objectFit prop์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ง์ ‘์ ์œผ๋กœ ์†์„ฑ์„ ์ฃผ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค
๋Œ€์‹  ์Šคํƒ€์ผ ๊ด€๋ จ ์†์„ฑ์„ CSS๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์œ ๋„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

<Image
  src={activity.activity.bannerImageUrl}
  fill
  className="rounded-xl"
  alt="์ฒดํ—˜์ด๋ฏธ์ง€"
  //  objectFit="cover" ์‚ญ์ œ
  style={{ objectFit: "cover" }}
/>;

์ž์‹์ด ๋ถ€๋ชจํฌ๊ธฐ๋ฅผ ์ „๋ถ€ ์•ˆ์“ฐ๋Š” ๊ฒฝ์šฐ


์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ์˜ค๋ฅธ์ชฝ div๊ฐ€ ๋ถ€๋ชจํฌ๊ธฐ๋ฅผ ์ „๋ถ€ ์•ˆ์“ฐ๊ณ  ์žˆ๋‹ค
์ด๋•Œ๋Š” ๊ฐ„๋‹จํžˆ
flex-1 ์†์„ฑ์„ ์ฃผ๋ฉด
์ž์‹ ์š”์†Œ๊ฐ€ ๋ถ€๋ชจ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚จ์€ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๋„๋ก ์„ค์ •ํ•œ๋‹ค

๋ชจ๋‹ฌ ์ค‘์•™์— ๋„์šฐ๊ธฐ

๋ชจ๋‹ฌ์—์„œ ์ค‘์•™์— ๋„์šฐ๋ ค๋ฉด
๋ถ€๋ชจ์—
fixed : ๋ทฐํฌํŠธ ๊ธฐ์ค€ ๊ณ ์ •
inset-0 : ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ๋ชจ๋‘ 0์œผ๋กœ ์„ค์ •ํ•ด ํ™”๋ฉด ์ „์ฒด๋ฅผ ๋ฎ๋Š” ์š”์†Œ ์ƒ์„ฑ
์„ ์ค˜์•ผํ•œ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€