๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ

[CSS] aspect-ratio ์—†์ด ์š”์†Œ ๋น„์œจ ์œ ์ง€ํ•˜๊ธฐ

by megan07 2024. 8. 11.

 

 

ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋กœ ํšŒ์‚ฌ์—์„œ caniuse์—์„œ 95%์ด์ƒ ์ง€์›๋˜๋Š” css์†์„ฑ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ

asepct-ratio๋Š” 95%๊ฐ€ ๋˜์ง€ ์•Š์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค๐Ÿฅน

 

 

aspect-ratio์—†์ด ์–ด๋–ป๊ฒŒ ์š”์†Œ์˜ ๋น„์œจ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ฐ”๋กœ padding-top(๋˜๋Š” padding-bottom)์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โญ๏ธ๊ธฐ๋ณธ์ ์œผ๋กœ padding๊ฐ’์˜ ๋ฐฑ๋ถ„์œจ์€ ๋ถ€๋ชจ ์š”์†Œ์˜ width๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ์ด ๋ฉ๋‹ˆ๋‹ค.โญ๏ธ

-> ์ปจํ…Œ์ด๋‹๋ธ”๋ก์œผ๋กœ๋ถ€ํ„ฐ_๋ฐฑ๋ถ„์œจ_๊ณ„์‚ฐํ•˜๊ธฐ(MDN๋ฌธ์„œ ์ฐธ๊ณ )

 

์ด๋Ÿฌํ•œ ์„ฑ์งˆ์„ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•œ css ํŠธ๋ฆญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

See the Pen without aspect-ratio by JM K (@JM-K-the-selector) on CodePen.

 

<ul class="list">
   <li class="card">
    <div class="aspect-ratio-box">
      <div class="aspect-ratio-box-inner">
        ์ด ์ƒ์ž๋Š” 16:9 ๋น„์œจ์ž…๋‹ˆ๋‹ค.
      </div>
    </div>
  </li>
  <li class="card">
    <div class="aspect-ratio-box">
      <div class="aspect-ratio-box-inner">
        ์ด ์ƒ์ž๋Š” 16:9 ๋น„์œจ์ž…๋‹ˆ๋‹ค.
      </div>
    </div>
  </li>
  <li class="card">
    <div class="aspect-ratio-box">
      <div class="aspect-ratio-box-inner">
        ์ด ์ƒ์ž๋Š” 16:9 ๋น„์œจ์ž…๋‹ˆ๋‹ค.
      </div>
    </div>
  </li>
  <li class="card">
    <div class="aspect-ratio-box">
      <div class="aspect-ratio-box-inner">
        ์ด ์ƒ์ž๋Š” 16:9 ๋น„์œจ์ž…๋‹ˆ๋‹ค.
      </div>
    </div>
  </li>
</ul>
ul {
  list-style: none;
}

.list {
  width: 1920px;
  height: 1000px;
  background-color: skyblue;
  display: flex;
  justify-content: center;
  gap: 10px;
  padding: 20px;
}

.card {
  flex: 1;
  max-width: 300px;
}

.aspect-ratio-box {
  /*  
  ๋น„์œจ์„ ๋งž์ถฐ์ฃผ๋Š” ์šฉ๋„์˜ ๋ฐ•์Šค
  padding์€ ๋ถ€๋ชจ ์š”์†Œ์˜ width๋ฅผ ๊ธฐ์ค€์œผ๋กœ %๊ฐ’์ด ๊ณ„์‚ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์—
  padding-top๋งŒ์„ ์ด์šฉํ•ด์„œ ๋„“์ด๋ฅผ ์žก์•„์คŒ 
  16:9 = ๋„ˆ๋น„:๋†’์ด -> ๋„ˆ๋น„๊ฐ€ 100%์ผ ๋•Œ, ๋†’์ด๋Š” 56.25%
  */
  position: relative;
  width: 100%;
  padding-top: 56.25%;
}

.aspect-ratio-box-inner {
  /*  ์‹ค์ œ๋กœ ์นด๋“œ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์š”์†Œ๋Š” ํ•ด๋‹น ๋ฐ•์Šค์—์„œ ์ž‘์„ฑ */
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: lightblue;
}