๐จ Aspect Ratio - ์ด๋ฏธ์ง ํฌ๊ธฐ ๋น์จ ๊ฐ๋จ ์ ์ด
Aspect Ratio ์ข ํก๋น ์์ฑ
๊ณผ๊ฑฐ์๋ css์์ ๋น์จ๋ก ์์ญ์ ์กฐ์ ํ๊ฒ ํ ์ ์๋ css ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์๋ค. ๊ทธ๋์ ์๋ ์์ฑ์ผ๋ก ํธ๋ฒ์ผ๋ก ํ์ฌ ์คํฌ๋ฆฐ ๋น์จ์ ์ง์ ํ์ฌ ์ฌ์ฉํ์๋ค.
๊ทธ๋ ์ง๋ง ์ด์ css์์ ์ต์ ๊ธฐ๋ฅ์ผ๋ก ๋๋์ด aspect-ratio ๋ผ๋ ์ข ํก๋น ์ ์ฉ ์์ฑ์ ์ง์ํ๊ฒ ๋์๋ค.
aspect ratio ์์ฑ์ ์ด๋ฏธ์ง๋ ๋์์์ ๋น์จ๋๋ก ์ค์ด๊ฑฐ๋ ๋๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๋งค์ฐ ์ง๊ด์ ์ด๋ผ ๋ค๋ฃจ๊ธฐ๋ ํธํ๋ค.
๋ค๋ง ์ฐ๋ฆฌ์ ์ฃผ์ IE ๋ธ๋ผ์ฐ์ ์๋ ์ง์์ด ์๋๊ธฐ ๋๋ฌธ์, ๊ณผ๊ฑฐ์์ ์ฌ์ฉ๋์๋ ๊ฐ์ ์ ์ผ๋ก ๋น์จ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ๋๋ถ์ด, aspect ratio ์์ฑ ์ฌ์ฉ๋ฒ์ ์๊ฐํ ์์ ์ด๋ค.
๊ณผ๊ฑฐ ์ข ํก๋น ์กฐ์ ๋ฒ
1. ๋จ์ ์ง์
- ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ง์ width์ height๋ฅผ ์ง์ ํด์ ํ๋ ๋ฒ
- ํ์ง๋ง ์ด๋ ๊ฒ ํ ์ ๋ฐ์ํ์ ๊ตฌํํ๋๋ฐ ์ ๋ก์ฌํญ์ด ์๋ค.
/* ๋
ธ๋์ ๋ฐ์ค css ๊ฐ */
width: 200px;
height: 100px;
See the Pen aspect-ratio-1 by barzz12 (@inpaSkyrim) on CodePen.
2. padding์ ์ฌ์ฉํ์ฌ ๋น์จ ์กฐ์
- padding-top ๋๋ padding-bottom์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
- padding์ ๊ธฐ์ค์ ๋ถ๋ชจ์ width๋ก ๊ฐ์ง๊ธฐ ์ํด์ ๋ถ๋ชจ์ container ์๋ฆฌ๋จผํธ ์์๊ฐ ํ์
- ๊ทธ ์ธ์๋ 50%์ ๋น์จ์ ์ ์งํ๊ธฐ ์ํด padding ๊ฐ์ 50%๋ก ์ค์
<div class="container-padding">
<div class="inner"></div>
</div>
.container-padding {
width: 200px; /* ๊ฐ๋ก๊ธธ์ด๋ง ์ ์ธํ๋ค. ์ฆ height๋ 0์ธ ์
์ด๋ค */
}
.inner {
background-color: orange;
padding-top: 50%; /* ๋ถ๋ชจheight๊ฐ 0์ธ ์ํ์์ ์์์์ padding-top์ ์ ์ธํ๋ฉด, ๋ฐ๋ก ์ด๊ฐ์ด ๋์ด๊ฐ ๋๊ฒ ๋๋ค */
}
See the Pen aspect-ratio-2 by barzz12 (@inpaSkyrim) on CodePen.
3. calc()์ ์ฌ์ฉํ์ฌ ๋น์จ ์กฐ์
calc()ํจ์๋ฅผ ์ด์ฉํด์ ์ด์ธ์ ๋น์จ๋ก๋ ์ง์ ํ ์ ์๋ค.- ๋ฐ์ํ์ ์ํด์ calc ์ฒซ๋ฒ์งธ ์ธ์๋ฅผ 200px ๊ณ ์ ๊ฐ์ผ๋ก ์ฃผ๋๊ฒ์ด ์๋ 100%๋ก ์ค์ ํ๋ค. (width๋ ์์์ด ๋ถ๋ชจ๋ก๋ถํฐ ์์ ๋ฐ๊ธฐ ๋๋ฌธ)
.inner {
padding-top: calc(100% * 0.3); /* 30% ์ ์ฉํ๊ธฐ */
}
.inner {
padding-top: calc(100% / 16 * 9); /* 16:9 ์ ์ฉ */
}
See the Pen aspect-ratio-3 by barzz12 (@inpaSkyrim) on CodePen.
์ต์ ์ข ํก๋น ์กฐ์ ๋ฒ (aspect-ratio)
- ์์ ๊ฐ์ ์๋ ์์ ๋ฐฉ๋ฒ์, ์ง๊ด์ ์ด์ง๋ ์๊ณ ๋ณต์กํ๋ค.
- ๋ฐ๋ผ์ css์ต์ ๊ธฐ๋ฅ์ผ๋ก ์ถ๊ฐ๋ aspect-ratio ์์ฑ์ผ๋ก ์๋ฆฌ๋จผํธ์ ๋น์จ์ ํ๋ฐฉ์ ์ค์ ํ ์ ์๋ค.
aspect-ratio: 16 / 9ํ์ค๋ง ๋ฃ์ผ๋ฉด ์๋์ ๊ฐ์ 16:9 ๋น์จ์ div๊ฐ ๋ง๋ค์ด์ง๋ค.- ๋ง์ฝ ํ๋์ ๊ฐ๋ง ์ง์ ํ ๊ฒฝ์ฐ, ๋์ด๋ฅผ 1์ ๋น์จ๋ก ๊ฐ์ฃผํ๋ค.
- div ๋ฟ๋ง ์๋๋ผ ์ด๋ฏธ์ง, ํ ์ด๋ธ ๋ฑ ๋ชจ๋ ์๋ฆฌ๋จผํธ์ ์ข ํก๋น ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
.box {
width: 300px; /* ์์ ๊ฐ๋ก๊ธธ์ด ์ง์ */
background: #cccccc; /* ์์ ๋ฐฐ๊ฒฝ์ */
aspect-ratio: 16 / 9; /* 16:9 ๋น์จ ์ง์ */
}
See the Pen aspect-ratio-4 by barzz12 (@inpaSkyrim) on CodePen.
์ข ํก๋น auto ์ง์
- ์์๊ฐ ๊ณ ์ ํ ์ข ํก๋น๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ auto๋ก ํด๋น ์ข ํก๋น๋ฅผ ๋ฐ๋ฅธ๋ค.
- ์์๊ฐ ๊ณ ์ ํ ์ข ํก๋น๋ฅผ ๊ฐ์ง์ง ์๋ ๊ฒฝ์ฐ ์ง์ ํ ๋น์จ ์์ฑ๊ฐ์ ๋ฐ๋ฅธ๋ค.
div {
/* ๊ณ ์ ํ ์ข
ํก๋น๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ ํด๋น ์ข
ํก๋น๋ฅผ ๋ฐ๋ฅด๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ 1 : 1 ๋น์จ๋ก ์ง์ */
aspect-ratio: auto 1 / 1;
}
See the Pen aspect-ratio-6 by barzz12 (@inpaSkyrim) on CodePen.
์ด๋ฏธ์ง ์ข ํก๋น ๊ฐ์ ์ง์
- ์ด๋ฏธ์ง๊ฐ ๋์ด๋๊ฑฐ๋ ์ค์ด๋ค์ง ์๊ณ , ์ด๋ฏธ์ง ์์ฒด๋ ๊ทธ๋๋ก ์ ์งํ๋ฉฐ ์ข ํก๋น๋ง ์กฐ์ ํ๋ ๋ฐฉ๋ฒ
- ๋จผ์ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ชจ ์์๋ก ๊ฐ์ธ๊ณ , ๋ถ๋ชจ ์์์
aspect-ratio๋ฅผ ์ง์ ํ๋ค. ๋ง์ง๋ง์ผ๋ก ์ด๋ฏธ์ง์object-fit: cover์์ฑ์ ์ ์ฉํ๋ค.
See the Pen aspect-ratio-7 by barzz12 (@inpaSkyrim) on CodePen.
aspect-ratio ์ ์ฉ ์์ธ ์ํฉ
- ๋๋น, ๋์ด๊ฐ์ด ์ง์ ๋ ๊ฒฝ์ฐ ์ข ํก๋น๊ฐ ์ ์ฉ๋์ง ์๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก min-width, min-height ์์๊ฐ์ด ์ ์ฉ๋ ๊ฒฝ์ฐ ๋์ํ์ง ์๋๋ค.
- ๋ด์ฉ์ด ์์๋ฅผ ๋๋ ๊ฒฝ์ฐ ์์๋ ํ์ฅ๋๋๋ฐ ์ด ๊ฒฝ์ฐ์๋ ์ข ํก๋น๊ฐ ์ ์ฉ๋์ง ์๋๋ค.
See the Pen aspect-ratio-5 by barzz12 (@inpaSkyrim) on CodePen.
# ์ฐธ๊ณ ์๋ฃ
https://runebook.dev/ko/docs/css/aspect-ratio
https://webisfree.com/2019-03-11/css-%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B0%8F-%EC%97%98%EB%A6%AC%EB%A8%BC%ED%8A%B8-%EB%B9%84%EC%9C%A8%EB%A1%9C-%EC%A1%B0%EC%A0%88%ED%95%98%EA%B8%B0-aspect-ratio
https://mong-blog.tistory.com/entry/css-Aspect-Ratio-%EC%9A%94%EC%86%8C%EB%A5%BC-%EB%B9%84%EC%9C%A8%EB%8C%80%EB%A1%9C-%EC%A1%B0%EC%A0%95%ED%95%98%EA%B8%B0