6.1 ํจ์ calc()์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ
calc()
ํจ์๋ CSS์์ ์ํ ์ฐ์ฐ์ ์ํํ ์ ์๊ฒ ํด์ค์, ๋ณด๋ค ์ ์ฐํ๊ณ ์ ์๋ ฅ ์๋ ์คํ์ผ์ ๋ง๋ค ์ ์๊ฒ ํด์ค. ํนํ ๋ค์ํ ๋จ์๋ฅผ ์กฐํฉํ๊ฑฐ๋ ๋์ ์ผ๋ก ๊ฐ(์ฌ์ด์ฆ, ์ฌ๋ฐฑ, ๊ฒฝ๊ณ ๋ฑ)์ ๊ณ์ฐํ ๋ ์ ์ฉํด.
calc()
ํจ์๋ ๋ํ๊ธฐ, ๋นผ๊ธฐ, ๊ณฑํ๊ธฐ, ๋๋๊ธฐ ๋ค ๊ฐ์ง ๊ธฐ๋ณธ ์ํ ์ฐ์ฐ์ ์ํํ ์ ์์ด. ์ด ์ฐ์ฐ๋ค์ ํฝ์
, ํผ์ผํธ, em
, rem
๊ฐ์ ๋ค์ํ ๋จ์๋ฅผ ์กฐํฉํ ๋ ์ฌ์ฉํ ์ ์์ด์ ์ ์๋ ฅ ์๊ณ ๋์ ์ธ ์คํ์ผ์ ๋ง๋๋ ๋ฐ ๋์์ ์ค.
๊ตฌ๋ฌธ:
์
๋ ํฐ {
์์ฑ: calc(ํํ์);
}
์ฐ์ฐ ์์
- ๋ํ๊ธฐ:
calc(100% + 20px)
- ๋นผ๊ธฐ:
calc(50% - 10px)
- ๊ณฑํ๊ธฐ:
calc(10px * 2)
- ๋๋๊ธฐ:
calc(100px / 2)
์์ :
<div>
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
div {
width: calc(100% - 50px);
margin: calc(1em + 10px);
background: lightblue;
}
์ด ์์์์๋:
- ์์์ ๋๋น๋
100%
์์50px
์ ๋บ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ - ๋ง์ง์
1em
๊ณผ10px
์ ํฉ๊ณ๋ก ๊ณ์ฐ๋ผ
6.2 calc() ํจ์์ ์ฌ์ฉ ์์
1. ๋ํ๊ธฐ์ ๋นผ๊ธฐ
calc()
ํจ์๋ ๋ณดํต ์์์ ํฌ๊ธฐ์ ์ฌ๋ฐฑ์ ๋ณด๋ค ์ ํํ๊ฒ ์ ์ดํ๊ธฐ ์ํด ๋ํ๊ธฐ์ ๋นผ๊ธฐ์ ์์ฃผ ์ฌ์ฉ๋ผ.
์์ 1: ํผ์ผํธ์ ํฝ์ ๋ํ๊ธฐ
์ด ์์ ์์ ์ปจํ ์ด๋์ ๋๋น๋ ๋ถ๋ชจ ์์์ 100% ๋๋น์์ 40ํฝ์ ์ ๋บ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ. ์ด๋ ์ฌ๋ฐฑ๊ณผ ์ปจํ ์ด๋ ๋ด์ ๋ค๋ฅธ ์์๋ฅผ ๊ณ ๋ คํ ์ ์๊ฒ ํด์ค:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.container {
width: calc(100% - 40px);
margin: 20px;
background: lightgreen;
}
์์ 2: ๊ณ ์ ๊ฐ์ ๋บ ๊ฐ
์ด ์์ ์์ ์ฌ์ด๋๋ฐ์ ๋๋น๋ ๋ถ๋ชจ ์์์ 100% ๋๋น์์ 250ํฝ์ ์ ๋บ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ, ์ด๋ ์ฃผ์ ์ฝํ ์ธ ๋ฅผ ์ํ ๊ณต๊ฐ์ ๋จ๊ฒจ์ค:
<div class="sidebar">
<ul>
<li><a href="#"></a>Article 1</li>
<li><a href="#"></a>Article 2</li>
<li><a href="#"></a>Article 3</li>
</ul>
</div>
.sidebar {
width: calc(100% - 250px);
background: tomato;
}
2. ๊ณฑํ๊ธฐ์ ๋๋๊ธฐ
calc()
ํจ์๋ ๊ณฑํ๊ธฐ์ ๋๋๊ธฐ๋ ํ ์ ์์ด์, ๋น์จ์ ๋ง๋ ํฌ๊ธฐ์ ์ฌ๋ฐฑ์ ๋ง๋๋ ๋ฐ ์ ์ฉํด.
์์ 3: ๊ณฑํ๊ธฐ
์ด ์์ ์์ ์์์ ๋์ด๋ 20ํฝ์ ์ 3์ ๊ณฑํ ๊ฐ, ์ฆ 60ํฝ์ ๋ก ๊ณ์ฐ๋ผ:
<div class="element">Element</div>
.element {
height: calc(20px * 3);
background: lightpink;
}
์์ 4: ๋๋๊ธฐ
์ด ์์ ์์ ๋ฐ์ค์ ๋๋น๋ ๋ถ๋ชจ ์์์ ๋๋น์ 3๋ถ์ 1๋ก ๊ณ์ฐ๋ผ, ์ธ ๊ฐ์ ๋์ผํ ์ด์ ๋ง๋ค ์ ์๊ฒ ํด์ค:
<div class="box">
Box
</div>
.box {
width: calc(100% / 3);
background: yellow;
}
6.3 ๋ค์ํ ๋จ์์ ๊ฒฐํฉ
calc()
ํจ์์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋๋ ๋ค์ํ ๋จ์์ ๊ฒฐํฉ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฑฐ์ผ. ์ด๋ฅผ ํตํด ์ ์๋ ฅ ์๊ณ ์ ์ฐํ ์คํ์ผ์ ๋ง๋ค ์ ์์ด.
์์ 5: ํผ์ผํธ์ ํฝ์ ๊ฒฐํฉ
์ด ์์ ์์ ํค๋์ ๋์ด๋ ๋ทฐํฌํธ ๋์ด(viewport height)์ 100%์์ 50ํฝ์ ์ ๋บ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ์, ๊ณ ์ ๋ ์ฌ๋ฐฑ์ ๊ณ ๋ คํ ์ ์๊ฒ ํด์ค.
<header class="header">
<nav>
<ul>
<li>๋ฉ์ธ</li>
<li>์๊ฐ</li>
<li>์ฐ๋ฝ์ฒ</li>
</ul>
</nav>
</header>
.header {
height: calc(100vh - 100px);
background: lightgreen;
}
nav ul {
list-style: none;
display: flex;
justify-content: space-around;
padding: 10px;
}
๋์ ํฌ๊ธฐ ๊ณ์ฐ
calc()
ํจ์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ๊ณ์ฐํ ๋ ์ ์ฉํด์, ๋์์ธ์ ๋ณด๋ค ์ ์์ ์ด๊ณ ์ ์ฐํ๊ฒ ๋ง๋ค์ด์ค.
์์ 6: ๋์ ๋๋น ๊ณ์ฐ
์ด ์์ ์์ ์ฝํ ์ธ ์ ๋๋น๋ ๋ถ๋ชจ ์์์ ๋๋น์ 100%์์ ๊ฐ๊ฐ 20ํฝ์ ์ฉ ๋ ๊ฐ์ ์ฌ๋ฐฑ์ ๋บ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ผ:
<div class="content">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.content {
width: calc(100% - 2 * 20px);
background: lightgreen;
}
6.4 ๋ฏธ๋์ด ์ฟผ๋ฆฌ์์ calc()์ ์ฌ์ฉ
calc()
ํจ์๋ ๋ฏธ๋์ด ์ฟผ๋ฆฌ ๋ด์์ ์ ์ํ ์คํ์ผ์ ๋ง๋๋๋ฐ ์ฌ์ฉ๋ ์ ์์ด.
์์ 7: ๋ฏธ๋์ด ์ฟผ๋ฆฌ์์ ์ ์ํ ์ฌ๋ฐฑ
์ด ์์ ์์ ์ปจํ ์ด๋์ ์ฌ๋ฐฑ์ ๋ทฐํฌํธ ๋๋น๊ฐ ์ต์ 600ํฝ์ ์ ๋๋ฌํ๋ฉด ์ฆ๊ฐํด:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
.container {
padding: 10px;
background: tomato;
}
@media (min-width: 600px) {
.container {
padding: calc(10px + 2vw);
}
}
์์ 8: ๋ฏธ๋์ด ์ฟผ๋ฆฌ์์ ์ ์ํ ํฌ๊ธฐ
์ด ์์ ์์๋ ์ปจํ ์ด๋์ ์ฌ๋ฐฑ์ด 600ํฝ์ ๋๋น์ ํ๋ฉด์์ ๋ฐ์ผ๋ก ์ค์ด๋ค์ด, ๋์์ธ์ ์ ์์ฑ์ ํฅ์์์ผ:
<div class="container">
Lorem ipsum odor amet, consectetuer adipiscing elit. Montes malesuada pharetra mi suscipit suspendisse ornare.
Fringilla feugiat cursus finibus commodo, faucibus himenaeos.
</div>
:root {
--main-padding: 20px;
}
.container {
padding: var(--main-padding);
background: yellow;
}
@media (max-width: 600px) {
.container {
padding: calc(var(--main-padding) / 2);
}
}
6.5 ์ฅ์ ๊ณผ ๋จ์
calc() ํจ์์ ์ฅ์ :
1. ์ ์ฐ์ฑ. calc()
ํจ์๋ ๋ค์ํ ๋จ์๋ฅผ ์กฐํฉํ๊ณ ์ํ ์ฐ์ฐ์ ์ํํด ๋ณด๋ค ์ ์ฐํ๊ณ ์ ์๋ ฅ ์๋ ๋์์ธ์ ๋ง๋ค ์ ์๊ฒ ํด์ค.
2. ๋์ ์คํ์ผ ๊ด๋ฆฌ. calc()
๋ฅผ ํตํด ์์์ ํฌ๊ธฐ์ ์ฌ๋ฐฑ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ด์, ๋์์ธ์ ๋ ์๋ต์ ์ด๊ณ ์ ์๋ ฅ ์๊ฒ ๋ง๋ค์ด์ค.
3. ๋ณต์กํ ๊ณ์ฐ์ ๋จ์ํ. calc()
ํจ์๋ CSS์์ ๋ณต์กํ ๊ณ์ฐ์ ๊ฐ๋จํ๊ฒ ์ํํด์ค์, ๊ฐ๋จํ ์ํ ์ฐ์ฐ์ JavaScript๋ฅผ ์ฌ์ฉํ ํ์๋ฅผ ์ค์ฌ์ค.
calc() ํจ์์ ์ ํ ๋ฐ ํน์ง:
1. ์ฐ์ฐ์ ์ฃผ๋ณ ๊ณต๋ฐฑ. calc()
ํํ์์์๋ ์ฐ์ฐ์ ์ฃผ๋ณ์ ๋ฐ๋์ ๊ณต๋ฐฑ์ด ์์ด์ผ ํด. ์๋ฅผ ๋ค์ด, calc(100% - 50px)
๋ ๋ง๊ณ , calc(100%-50px)
๋ ์ค๋ฅ๋ฅผ ๋ฐ์์์ผ.
2. ๋ธ๋ผ์ฐ์ ํธํ์ฑ. calc()
ํจ์๋ ๋๋ถ๋ถ์ ํ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง๋ง, ์ค๋๋ ๋ฒ์ ์์๋ ํธํ์ฑ ๊ฒํ ๊ฐ ํ์ํ ์ ์์ด.
3. ์ฑ๋ฅ. calc()
ํจ์ ์ฌ์ฉ์ ํนํ ๋ณต์กํ ๊ณ์ฐ์ด๋ ์์ฃผ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ํ์ด์ง ๋ ๋๋ง ์๊ฐ์ ์ฝ๊ฐ ์ฆ๊ฐ์ํฌ ์ ์์ด.
GO TO FULL VERSION