์คํ์ผ์ ๋ฉ์ง๊ฒ ์ ํ๋๋ฐ, ์์๋ค์ ์์น๊ฐ ์๋ง์ด๋ผ๋ฉด ์ฌ์ฉ์ ์ ์ฅ์์ ๋ถํธํ UI๊ฐ ๋ ์๋ฐ์ ์์ฃ .
๊ทธ๋์ ์น ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ๋ฉด์๋ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ๋ฐ๋ก ๋ ์ด์์ ๊ตฌ์ฑ์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ค๋ฌด์์๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ ์ด์์ ๊ธฐ๋ฒ๋ค์ ์ ๋ฆฌํด ๋ณผ๊ฒ์.
โ Flexbox๋ก ์์๋ฅผ ์ ์ฐํ๊ฒ ์ ๋ ฌํด ๋ณด์
Flexbox๋ ์ผ๋ ฌ๋ก ์ ๋ ฌ๋๋ ์ฝํ ์ธ ๋ฅผ ๋ฐฐ์นํ ๋ ์ ๋ง ์ ์ฉํด์.
ํนํ ์ ์ค์ ์ ๋ ฌ, ๊ฐ๊ฒฉ ์กฐ์ , ๋ฐ์ํ ๋ ์ด์์ ๋ฑ์ ํ์ํ์ฃ .
.container {
display: flex;
justify-content: center; /* ๊ฐ๋ก ์ ๋ ฌ */
align-items: center; /* ์ธ๋ก ์ ๋ ฌ */
height: 100vh;
}
๐ ์ฃผ์ ์์ฑ ์์ฝ
์์ฑ | ์ค๋ช |
flex-direction | ์ฃผ์ถ ๋ฐฉํฅ: row, column ๋ฑ |
justify-content | ์ฃผ์ถ ์ ๋ ฌ: center, space-between ๋ฑ |
align-items | ๊ต์ฐจ์ถ ์ ๋ ฌ: stretch, center ๋ฑ |
gap | ์์ ๊ฐ ์ฌ๋ฐฑ |
๐งช ์์ : ์นด๋ 3๊ฐ๋ฅผ ๊ฐ๋ก๋ก ์ ๋ ฌํ๊ธฐ
<div class="card-wrapper">
<div class="card">์นด๋ 1</div>
<div class="card">์นด๋ 2</div>
<div class="card">์นด๋ 3</div>
</div>
<style>
.card-wrapper {
display: flex;
gap: 20px;
justify-content: space-around;
}
.card {
background: #f1f1f1;
padding: 20px;
width: 150px;
text-align: center;
}
</style>
โ Grid๋ก ๊ฒฉ์ํ ๋ ์ด์์ ๋ง๋ค๊ธฐ
Grid๋ 2์ฐจ์ ๋ ์ด์์์ ๋ค๋ฃฐ ์ ์์ด์ ๊ฐค๋ฌ๋ฆฌ, ๊ฒ์ํ, ๋ธ๋ก๊ทธ ์ธ๋ค์ผ ๋ชฉ๋ก ๋ฑ์ ๋ฑ์ด์์.
ํ๊ณผ ์ด์ ์์ ๋กญ๊ฒ ๋ฐฐ์นํ ์ ์๊ณ , ๋ฐ์ํ ๊ตฌํ์๋ ๊ฐ๋ ฅํฉ๋๋ค.
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3๋ฑ๋ถ */
gap: 16px;
}
๐ ์์ฃผ ์ฐ๋ ์์ฑ ์ ๋ฆฌ
์์ฑ | ์ค๋ช |
grid-template-columns | ์ด(๊ฐ๋ก) ํฌ๊ธฐ ์ ์ |
grid-template-rows | ํ(์ธ๋ก) ํฌ๊ธฐ ์ ์ |
gap | ์์ ์ฌ์ด ๊ฐ๊ฒฉ |
grid-column, grid-row | ํน์ ์ ๋ณํฉ ๋๋ ์์น ์ง์ |
๐งช ์์ : 2x3 ๊ฐค๋ฌ๋ฆฌ ๋ง๋ค๊ธฐ
<div class="gallery">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>
<style>
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.item {
background: #ddd;
padding: 30px;
text-align: center;
}
</style>
โ float๊ณผ clearfix๋ ์ ์์์ผ ํ ๊น?
์์ ์๋ ์์๋ฅผ ์์ผ๋ก ์ ๋ ฌํ ๋ float์ ๋ง์ด ์ผ์ด์.
์ง๊ธ์ ๊ฑฐ์ Flex๋ Grid๋ก ๋์ฒด๋๊ธด ํ์ง๋ง, ๋ ๊ฑฐ์ ํ๋ก์ ํธ์์๋ ์ฌ์ ํ ๋ณผ ์ ์์ด์.
.left {
float: left;
width: 50%;
}
.right {
float: right;
width: 50%;
}
.clearfix::after {
content: "";
display: block;
clear: both;
}
clearfix๋ฅผ ์ ์ฐ๋ฉด ๋ถ๋ชจ๊ฐ ์์์ ๋์ด๋ฅผ ์ธ์ ๋ชป ํด์ ๋ ์ด์์์ด ๊นจ์ง ์ ์์ด์.
โ ๋ฐ์ํ ์น: ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ก ๋ค์ํ ํ๋ฉด์ ๋์ํ์
์์ฆ ์น์ฌ์ดํธ๋ PC, ํ๋ธ๋ฆฟ, ๋ชจ๋ฐ์ผ ๋ฑ ๋ค์ํ ๊ธฐ๊ธฐ์์ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ(Responsive Web)์ด ํ์์ ๋๋ค.
๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํ์ผ์ ์ ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค.
๋ชจ๋ฐ์ผ์์๋ ์ธ๋ก ์ ๋ ฌ, ๋ฐ์คํฌํฑ์์๋ ๊ฐ๋ก ์ ๋ ฌ ๋ฑ ๋ค์ํ ๋ ์ด์์์ ํ๋์ CSS ํ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด์.
๐ ๋ฏธ๋์ด ์ฟผ๋ฆฌ ๊ธฐ๋ณธ ๊ตฌ์กฐ
@media screen and (max-width: 768px) {
.container {
flex-direction: column;
}
}
๐งช ์์ : ๋ชจ๋ฐ์ผ์์ ์ธ๋ก๋ก ์์ด๊ฒ ๋ง๋ค๊ธฐ
<div class="flexbox">
<div>Box 1</div>
<div>Box 2</div>
</div>
<style>
.flexbox {
display: flex;
gap: 10px;
}
@media screen and (max-width: 768px) {
.flexbox {
flex-direction: column;
}
}
</style>
๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ค์ฌ๋ณด๋ฉด, ๊ฐ๋ก๋ก ์ ๋ ฌ๋๋ ์์๊ฐ ์ธ๋ก๋ก ์์ด๊ฒ ๋ฉ๋๋ค.
โจ ๋ง๋ฌด๋ฆฌ: ๋์๊ฒ ๋ง๋ ๋ ์ด์์ ์ ๋ต ์ฐพ๊ธฐ
์ ๋ฆฌํ์๋ฉด,
- ๊ฐ๋จํ 1์ฐจ์ ์ ๋ ฌ โ Flexbox
- ํ๊ณผ ์ด์ ํ์ฉํ ๊ฒฉ์ ๋ฐฐ์น โ Grid
- ๊ณผ๊ฑฐ ๋ฐฉ์/๋ ๊ฑฐ์ ๋์ โ float + clearfix
- ๋ค์ํ ๊ธฐ๊ธฐ ๋์ โ media query
๋ ์ด์์์ ์ฒ์์ ์ด๋ ต๊ฒ ๋๊ปด์ง์ง๋ง, ์ฝ๋๋ฅผ ์ง์ ์์ฑํด ๋ณด๋ฉฐ ๋์ผ๋ก ํ์ธํ๋ฉด ๊ธ๋ฐฉ ์ต์ํด์ ธ์.
'๐จ Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript) ๊ธฐ๋ณธ ๋ค์ง๊ธฐ - Part 2 (0) | 2025.04.27 |
---|---|
๐ ์๋ฐ์คํฌ๋ฆฝํธ(JavaScript) ๊ธฐ๋ณธ ๋ค์ง๊ธฐ - Part 1 (0) | 2025.04.24 |
CSS๋ก ์คํ์ผ๋ง ์์ํ๊ธฐ (0) | 2025.04.10 |
HTML ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ (0) | 2025.04.09 |
์น์ ์ด๋ป๊ฒ ์๋ํ ๊น? (0) | 2025.04.08 |