CSS Grid์ Flexbox์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํด๋ณด์ธ์! ์ต์ ์ ์น ๋์์ธ๊ณผ ๊ฐ๋ฐ์ ์ํด ๊ฐ ๋ ์ด์์ ๋ฐฉ์์ ์ธ์ ์ฌ์ฉํด์ผ ํ๋์ง ์์๋ณด์ธ์.
CSS Grid vs Flexbox: ์ํฉ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ๋ ์ด์์ ๋๊ตฌ ์ ํํ๊ธฐ
๋์์์ด ๋ฐ์ ํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ ์ด์์ ๊ธฐ์ ์ ๋ง์คํฐํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. CSS์๋ ๋ ๊ฐ์ง ๊ฐ๋ ฅํ ๋ ์ด์์ ๋๊ตฌ์ธ CSS Grid์ Flexbox๊ฐ ์์ต๋๋ค. ๋ ๊ฐ์ง ๋ชจ๋ ๋ฐ์ํ ๋ฐ ๋์ ๋์์ธ์ ๋ง๋๋ ๋ฐ ๋ฐ์ด๋์ง๋ง, ๊ฐ๊ฐ ๋๋ ทํ ๊ฐ์ ์ด ์์ผ๋ฉฐ ์๋ก ๋ค๋ฅธ ์๋๋ฆฌ์ค์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ ๊ฐ ๋ฐฉ๋ฒ์ ํต์ฌ ๊ฐ๋ ์ ์์ธํ ์ดํด๋ณด๊ณ , ์ํฉ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๋ ๋ฐ ๋์์ด ๋๋ ์ค์ ์์ ์ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ณธ ๊ฐ๋ ์ดํดํ๊ธฐ
Flexbox๋ ๋ฌด์์ธ๊ฐ?
Flexible Box Layout์ ์ฝ์์ธ Flexbox๋ 1์ฐจ์ ๋ ์ด์์ ๋ชจ๋ธ์ ๋๋ค. ๋จ์ผ ํ์ด๋ ์ด์ ์๋ ์์ดํ ๋ค ์ฌ์ด์ ๊ณต๊ฐ์ ๋ถ๋ฐฐํ๋ ๋ฐ ํ์ํฉ๋๋ค. ๋ด๋น๊ฒ์ด์ ๋ฐ์ ์์ดํ ์ ์ ๋ ฌํ๊ฑฐ๋ ์นด๋ ์ปดํฌ๋ํธ ๋ด์ ์์๋ค์ ๋ฐฐ์นํ๋ ๊ฒ์ ์์ํด๋ณด์ธ์. Flexbox๋ ์ด๋ฌํ ์๋๋ฆฌ์ค์์ ๋น์ ๋ฐํฉ๋๋ค.
์ฃผ์ ๊ฐ๋ :
- ํ๋ ์ค ์ปจํ
์ด๋(Flex Container): ํ๋ ์ค ์์ดํ
์ ๋ด๋ ๋ถ๋ชจ ์์.
display: flex;๋๋display: inline-flex;๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํฉ๋๋ค. - ํ๋ ์ค ์์ดํ (Flex Items): ํ๋ ์ค ์ปจํ ์ด๋์ ์ง๊ณ ์์ ์์.
- ์ฃผ์ถ(Main Axis): ํ๋ ์ค ์์ดํ ์ ๊ธฐ๋ณธ ๋ฐฉํฅ (๊ธฐ๋ณธ๊ฐ์ ์ํ).
- ๊ต์ฐจ์ถ(Cross Axis): ์ฃผ์ถ์ ์์ง์ธ ์ถ.
- ํ๋ ์ค ์์ฑ(Flex Properties):
flex-direction,justify-content,align-items,flex-grow,flex-shrink,flex-basis์ ๊ฐ์ ์์ฑ๋ค์ ํ๋ ์ค ์์ดํ ์ ๋ ์ด์์๊ณผ ๋์์ ์ ์ดํฉ๋๋ค.
CSS Grid๋ ๋ฌด์์ธ๊ฐ?
CSS Grid Layout์ 2์ฐจ์ ๋ ์ด์์ ์์คํ ์ ๋๋ค. ํ์ด์ง๋ฅผ ํ๊ณผ ์ด๋ก ๋๋์ด ๊ทธ๋ฆฌ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ ๋๋ถ์ ์น์ฌ์ดํธ ํค๋, ํธํฐ, ๋ฉ์ธ ์ฝํ ์ธ ์์ญ, ์ฌ์ด๋๋ฐ์ ๊ฐ์ ๋ณต์กํ ๋ ์ด์์์ ์ด์์ ์ ๋๋ค. ์น ํ์ด์ง์ ์ ์ฒด ์ํคํ ์ฒ๋ฅผ ๊ตฌ์กฐํํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ฐ๋ :
- ๊ทธ๋ฆฌ๋ ์ปจํ
์ด๋(Grid Container): ๊ทธ๋ฆฌ๋๋ฅผ ์์ฑํ๋ ๋ถ๋ชจ ์์.
display: grid;๋๋display: inline-grid;๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํฉ๋๋ค. - ๊ทธ๋ฆฌ๋ ์์ดํ (Grid Items): ๊ทธ๋ฆฌ๋ ์ปจํ ์ด๋์ ์ง๊ณ ์์ ์์.
- ๊ทธ๋ฆฌ๋ ๋ผ์ธ(Grid Lines): ๊ทธ๋ฆฌ๋์ ํ๊ณผ ์ด์ ์ ์ํ๋ ์ํ ๋ฐ ์์ง์ .
- ๊ทธ๋ฆฌ๋ ํธ๋(Grid Tracks): ๊ทธ๋ฆฌ๋ ๋ผ์ธ ์ฌ์ด์ ๊ณต๊ฐ (ํ ๋๋ ์ด).
- ๊ทธ๋ฆฌ๋ ์์ญ(Grid Area): ๊ทธ๋ฆฌ๋ ๋ผ์ธ์ผ๋ก ์ ์๋ ์ง์ฌ๊ฐํ ๊ณต๊ฐ์ผ๋ก, ๊ทธ๋ฆฌ๋ ์์ดํ ์ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๋ ์์ฑ(Grid Properties):
grid-template-rows,grid-template-columns,grid-gap,grid-row,grid-column,justify-items์ ๊ฐ์ ์์ฑ๋ค์ ๊ทธ๋ฆฌ๋์ ๊ตฌ์กฐ์ ์์ดํ ์ ๋ฐฐ์น๋ฅผ ์ ์ดํฉ๋๋ค.
Flexbox ์ค์ ์ฌ์ฉ ์: 1์ฐจ์ ๋ ์ด์์
Flexbox๋ 1์ฐจ์ ๋ ์ด์์์ ๋ค๋ฃฐ ๋ ์ง๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค. ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ด๋น๊ฒ์ด์ ๋ฐ
๋ฐ์ํ ๋ด๋น๊ฒ์ด์ ๋ฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ ํ์ ์ธ Flexbox ํ์ฉ ์ฌ๋ก์ ๋๋ค. ๋ด๋น๊ฒ์ด์ ์์ดํ ์ ์ํ์ผ๋ก ์ฝ๊ฒ ์ ๋ ฌํ๊ณ , ๊ท ๋ฑํ๊ฒ ๊ฐ๊ฒฉ์ ์กฐ์ ํ๋ฉฐ, ์์ ํ๋ฉด์์๋ ์ค๋ฒํ๋ก์ฐ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
<nav class="navbar">
<a href="#" class="logo">Brand</a>
<ul class="nav-links">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem;
background-color: #f0f0f0;
}
.nav-links {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.nav-links li {
margin-left: 1rem;
}
์ด ์์ ๋ Flexbox๊ฐ ์ด๋ป๊ฒ ๋ก๊ณ ์ ๋ด๋น๊ฒ์ด์ ๋งํฌ ์ฌ์ด์ ๊ณต๊ฐ์ ์ฝ๊ฒ ๋ถ๋ฐฐํ๊ณ ๋์์ ์์ง์ผ๋ก ์ ๋ ฌํ๋์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์นด๋ ์ปดํฌ๋ํธ
์ ํ ์ ๋ณด, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋๋ ์ฌ์ฉ์ ํ๋กํ์ ํ์ํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ์นด๋๋ Flexbox์ ์ด์ ์ ํ์ฉํ ์ ์์ต๋๋ค. ์นด๋์ ์ฝํ ์ธ (์ด๋ฏธ์ง, ์ ๋ชฉ, ์ค๋ช , ๋ฒํผ)๋ฅผ ์์ง ๋๋ ์ํ์ผ๋ก ์ฝ๊ฒ ๋ฐฐ์ดํ์ฌ ์ผ๊ด๋ ๊ฐ๊ฒฉ๊ณผ ์ ๋ ฌ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
<div class="card">
<img src="image.jpg" alt="Card Image">
<div class="card-content">
<h2>Card Title</h2>
<p>This is a short description of the card content.</p>
<button>Learn More</button>
</div>
</div>
.card {
display: flex;
flex-direction: column;
border: 1px solid #ccc;
border-radius: 5px;
overflow: hidden;
}
.card img {
width: 100%;
height: auto;
}
.card-content {
padding: 1rem;
}
์ฌ๊ธฐ์ Flexbox๋ ์นด๋ ๋ด์์ ์ด๋ฏธ์ง, ์ ๋ชฉ, ์ค๋ช
, ๋ฒํผ์ ์์ง์ผ๋ก ๋ฐฐ์ดํฉ๋๋ค. flex-direction: column;์ ์ฌ์ฉํ๋ฉด ์ฝํ
์ธ ๊ฐ ์ ์ ํ๊ฒ ์์
๋๋ค.
๋์ผํ ๋์ด์ ์ด
์ผ๋ฐ์ ์ธ ๋์์ธ ์๊ตฌ์ฌํญ์ธ ๋์ผํ ๋์ด์ ์ด์ ๋ง๋๋ ๊ฒ์ Flexbox๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํฉ๋๋ค. ๋ถ๋ชจ ์ปจํ
์ด๋์ display: flex;๋ฅผ ์ ์ฉํ๊ณ ๊ฐ ์ด์ flex: 1;์ ์ ์ฉํ๋ฉด, ๊ฐ์ฅ ๋์ ์ด์ ๋์ด์ ๋ง์ถฐ ์๋์ผ๋ก ๋์ด๋ฉ๋๋ค.
<div class="container">
<div class="column">Column 1 - Some shorter content.</div>
<div class="column">Column 2 - This column has more content. This column has more content. This column has more content. This column has more content.</div>
<div class="column">Column 3</div>
</div>
.container {
display: flex;
}
.column {
flex: 1;
padding: 1rem;
border: 1px solid #eee;
}
flex: 1; ์์ฑ์ ๊ฐ ์ด์ด ๋์ผํ๊ฒ ๋์ด๋๋๋ก ํ์ฌ ์ฝํ
์ธ ๊ธธ์ด์ ๊ด๊ณ์์ด ๋์ผํ ๋์ด์ ์ด์ ๋ง๋ญ๋๋ค.
CSS Grid์ ์์ญ: 2์ฐจ์ ๋ ์ด์์
CSS Grid๋ 2์ฐจ์ ๋ ์ด์์ ์ฒ๋ฆฌ์ ๋ฐ์ด๋๋ฉฐ, ์น ํ์ด์ง ๊ตฌ์กฐ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. Grid๊ฐ ๋น์ ๋ฐํ๋ ์ฃผ์ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์น์ฌ์ดํธ ๋ ์ด์์ (ํค๋, ํธํฐ, ์ฌ์ด๋๋ฐ)
์น์ฌ์ดํธ์ ์ ์ฒด ๋ ์ด์์(ํค๋, ๋ด๋น๊ฒ์ด์ , ๋ฉ์ธ ์ฝํ ์ธ , ์ฌ์ด๋๋ฐ, ํธํฐ)์ ๊ตฌ์กฐํํ๋ ๋ฐ๋ CSS Grid๊ฐ ์ด์์ ์ธ ์ ํ์ ๋๋ค. ํ๊ณผ ์ด์ ์ ์ํ์ฌ ๊ฒฌ๊ณ ํ๊ณ ์ ์ฐํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
<div class="grid-container">
<header class="header">Header</header>
<nav class="nav">Navigation</nav>
<main class="main">Main Content</main>
<aside class="sidebar">Sidebar</aside>
<footer class="footer">Footer</footer>
</div>
.grid-container {
display: grid;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto auto 1fr auto;
grid-template-areas:
"header header header"
"nav nav nav"
"sidebar main main"
"footer footer footer";
gap: 10px;
height: 100vh; /* Ensure the grid covers the viewport height */
}
.header { grid-area: header; background-color: #eee; padding: 1em; }
.nav { grid-area: nav; background-color: #ddd; padding: 1em;}
.main { grid-area: main; background-color: #ccc; padding: 1em; }
.sidebar { grid-area: sidebar; background-color: #bbb; padding: 1em; }
.footer { grid-area: footer; background-color: #aaa; padding: 1em; }
/* Responsive adjustments */
@media (max-width: 768px) {
.grid-container {
grid-template-columns: 1fr; /* Single column layout */
grid-template-rows: auto auto 1fr auto auto; /* Add a row for the sidebar */
grid-template-areas:
"header"
"nav"
"main"
"sidebar"
"footer";
}
}
์ด ์์ ๋ grid-template-areas๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด์์์ ์ ์ํ๋ฏ๋ก ์ฝ๋๊ฐ ๊ฐ๋
์ฑ์ด ๋๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค. ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋ง๊ฒ ๋ ์ด์์์ ์ฝ๊ฒ ์ฌ๋ฐฐ์นํ ์ ์์ต๋๋ค.
๋ณต์กํ ์์
์ฌ๋ฌ ์ ๋ ฅ ํ๋, ๋ ์ด๋ธ, ์ค๋ฅ ๋ฉ์์ง๊ฐ ์๋ ๋ณต์กํ ์์์ ๋์์ธํ ๋ CSS Grid๋ฅผ ์ฌ์ฉํ๋ฉด ์์์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์กฐํํ๊ณ ์ผ๊ด๋ ์ ๋ ฌ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ฌ๋ฌ ํ๊ณผ ์ด์ ๊ฑธ์ณ ์์๋ฅผ ์ ๋ ฌํด์ผ ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
<form class="grid-form">
<label for="name">Name:</label>
<input type="text" id="name" name="name">
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<label for="message">Message:</label>
<textarea id="message" name="message"></textarea>
<button type="submit">Submit</button>
</form>
.grid-form {
display: grid;
grid-template-columns: auto 1fr;
gap: 10px;
padding: 1rem;
}
.grid-form label {
text-align: right;
}
.grid-form button {
grid-column: span 2; /* Span across both columns */
text-align: center;
}
์ด ์์ ๋ ๋ ์ด๋ธ์ ์ผ์ชฝ์, ์ ๋ ฅ ํ๋๋ฅผ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์นํ์ฌ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ด๊ณ ์ ๋ฆฌ๋ ์์์ ๋ง๋ญ๋๋ค. ์ ์ถ ๋ฒํผ์ ๊ฐ์กฐ๋ฅผ ์ํด ๋ ์ด์ ๊ฑธ์ณ ์์ต๋๋ค.
๊ฐค๋ฌ๋ฆฌ ๋ ์ด์์
๋์ ์ด๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๊ฒ์ CSS Grid์ ๋ ๋ค๋ฅธ ํ๋ฅญํ ํ์ฉ ์ฌ๋ก์ ๋๋ค. ์ด๋ฏธ์ง์ ํฌ๊ธฐ์ ๋ฐฐ์น๋ฅผ ์ฝ๊ฒ ์ ์ดํ์ฌ ์๊ฐ์ ์ผ๋ก ํฅ๋ฏธ๋ก์ด ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
<div class="gallery">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<img src="image3.jpg" alt="Image 3">
<img src="image4.jpg" alt="Image 4">
<img src="image5.jpg" alt="Image 5">
<img src="image6.jpg" alt="Image 6">
</div>
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 10px;
}
.gallery img {
width: 100%;
height: auto;
}
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); ์์ฑ์ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด์ ์๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ๋ ๋ฐ์ํ ๊ฐค๋ฌ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
์ธ์ Flexbox๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น: ๋น ๋ฅธ ๊ฐ์ด๋
- 1์ฐจ์ ๋ ์ด์์: ํ์ด๋ ์ด์ ์๋ ์์ดํ ์ ๋ ฌ.
- ์ฝํ ์ธ ์ ๋ ฌ ๋ฐ ๋ถ๋ฐฐ: ์์ดํ ๊ฐ์ ๊ณต๊ฐ์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ.
- ๋์ผํ ๋์ด์ ์ด: ์๋์ผ๋ก ๊ฐ์ ๋์ด๋ก ์กฐ์ ๋๋ ์ด ์์ฑ.
- ๊ฐ๋จํ ์ปดํฌ๋ํธ ๋ ์ด์์: ์นด๋๋ ๋ฒํผ ๊ทธ๋ฃน๊ณผ ๊ฐ์ ์์ ์ปดํฌ๋ํธ ๋ด์ ์ฝํ ์ธ ๊ตฌ์กฐํ.
- ์์ ์ค์ ์ ๋ ฌ: ์์๋ฅผ ์ํ ๋ฐ ์์ง์ผ๋ก ์ฝ๊ฒ ์ค์ ์ ๋ ฌ.
์ธ์ CSS Grid๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น: ๋น ๋ฅธ ๊ฐ์ด๋
- 2์ฐจ์ ๋ ์ด์์: ํ๊ณผ ์ด์ด ์๋ ๋ณต์กํ ๋ ์ด์์ ์์ฑ.
- ์น์ฌ์ดํธ ๊ตฌ์กฐ: ์น์ฌ์ดํธ์ ์ ์ฒด ๋ ์ด์์(ํค๋, ํธํฐ, ์ฌ์ด๋๋ฐ, ์ฝํ ์ธ ) ์ ์.
- ๋ณต์กํ ์์: ์ฌ๋ฌ ํ๋์ ๋ ์ด๋ธ์ด ์๋ ์์ ๊ตฌ์กฐํ.
- ๊ฐค๋ฌ๋ฆฌ ๋ ์ด์์: ๋์ ์ด๊ณ ๋ฐ์ํ์ธ ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ ์์ฑ.
- ์์ ๊ฒน์น๊ธฐ: ์์๋ค์ด ์๋ก ๊ฒน์น๋๋ก ๋ฐฐ์น.
Flexbox์ Grid ๊ฒฐํฉํ๊ธฐ: ๊ฐ๋ ฅํ ์กฐํฉ
์ง์ ํ ๊ฐ๋ ฅํจ์ Flexbox์ Grid๋ฅผ ๊ฒฐํฉํ๋ ๋ฐ ์์ต๋๋ค. Grid๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ํ์ด์ง ๋ ์ด์์์ ๊ตฌ์กฐํํ ๋ค์, ํน์ ๊ทธ๋ฆฌ๋ ์์ญ ๋ด ์์์ ๋ ์ด์์์ Flexbox๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํตํด ๋ ๋ฐฉ๋ฒ์ ์ฅ์ ์ ๋ชจ๋ ํ์ฉํ์ฌ ๋งค์ฐ ์ ์ฐํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ๋์์ธ์ ๋ง๋ค ์ ์์ต๋๋ค. 'ํฐ ๊ทธ๋ฆผ'์๋ Grid๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ๊ทธ๋ฆผ ์์ ์ธ๋ถ ์ฌํญ์๋ Flexbox๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, Grid๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ๊ธฐ๋ณธ ๋ ์ด์์(ํค๋, ๋ด๋น๊ฒ์ด์ , ๋ฉ์ธ ์ฝํ ์ธ , ์ฌ์ด๋๋ฐ, ํธํฐ)์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฉ์ธ ์ฝํ ์ธ ์์ญ ๋ด์์ Flexbox๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๋ จ์ ์นด๋๋ฅผ ๋ฐฐ์ดํ๊ฑฐ๋ ์์ ๋ด์ ์์๋ฅผ ์ ๋ ฌํ ์ ์์ต๋๋ค.
์ ๊ทผ์ฑ ๊ณ ๋ ค์ฌํญ
Flexbox์ Grid๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ ์ด์์์ด ์๋งจํฑํ์ง ํ์ธํ๊ณ , ์๊ฐ์ ์์๊ฐ ๋ค๋ฅด๋๋ผ๋ HTML ์์ค ์ฝ๋์ ์์ ์์๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ดํด๋์ด์ผ ํฉ๋๋ค. ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ ์ถ๊ฐ์ ์ธ ๋งฅ๋ฝ๊ณผ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ธ์.
- ๋ ผ๋ฆฌ์ ์ธ ์์ค ์์: HTML์์ ๋ ผ๋ฆฌ์ ์ธ ์์ค ์์๋ฅผ ์ ์งํ์ธ์.
- ARIA ์์ฑ: ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ธ์.
- ํค๋ณด๋ ๋ด๋น๊ฒ์ด์ : ๋ ์ด์์์ด ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํ์ธ์.
- ์๋งจํฑ HTML: ์๋งจํฑ HTML ์์(์:
<nav>,<article>,<aside>)๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ธ์.
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
Flexbox์ Grid๋ ๋ชจ๋ ์ฑ๋ฅ์ด ์ฐ์ํ ๋ ์ด์์ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ง๋ง ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ํผํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ถํ์ํ ์ค์ฒฉ์ ์ต์ํํ๊ณ , ๋ณต์กํ ๊ณ์ฐ์ ํผํ๋ฉฐ, ๋ค์ํ ๊ธฐ๊ธฐ์์ ๋ ์ด์์์ ํ ์คํธํ์ฌ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ์ธ์.
- ์ค์ฒฉ ์ต์ํ: Flexbox ๋๋ Grid ์ปจํ ์ด๋์ ๊ณผ๋ํ ์ค์ฒฉ์ ํผํ์ธ์.
- ๋ณต์กํ ๊ณ์ฐ ํผํ๊ธฐ: ๋ธ๋ผ์ฐ์ ๊ฐ ์ํํด์ผ ํ๋ ๊ณ์ฐ์ ์์ ์ค์ด๊ธฐ ์ํด ๋ ์ด์์์ ๋จ์ํํ์ธ์.
- ๋ค์ํ ๊ธฐ๊ธฐ์์ ํ ์คํธ: ๋ค์ํ ๊ธฐ๊ธฐ์ ํ๋ฉด ํฌ๊ธฐ์์ ๋ ์ด์์์ ํ ์คํธํ์ฌ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ์ธ์.
- ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ ์ฌ์ฉ: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ์ธ์.
๋ธ๋ผ์ฐ์ ํธํ์ฑ
Flexbox์ Grid๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฐ์ด๋ ๋ธ๋ผ์ฐ์ ์ง์์ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง ํญ์ ํธํ์ฑ ํ(์: Can I use... ์น์ฌ์ดํธ)๋ฅผ ํ์ธํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ์๋ฃจ์ ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ ๋์ ํธํ์ฑ์ ์ํด Autoprefixer๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒค๋ ์ ๋์ฌ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
์ ์ธ๊ณ์ ์ค์ ์ฌ์ฉ ์์
๋ค์์ ๋ค์ํ ์ง์ญ์ ์ค์ ์น์ฌ์ดํธ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ Flexbox์ Grid๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ๋ช ๊ฐ์ง ์์์ ๋๋ค:
- ์ ์ ์๊ฑฐ๋ (์ ์ธ๊ณ): ์ ํ ๋ชฉ๋ก์ ๊ฐ ๋ชฉ๋ก ๋ด์์ ์ ํ ์ด๋ฏธ์ง, ์ค๋ช , ๊ฐ๊ฒฉ์ ์ ๋ ฌํ๊ธฐ ์ํด Flexbox๋ฅผ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. Grid๋ ์ ์ฒด ์ ํ ์นดํ๋ก๊ทธ๋ฅผ ํ๊ณผ ์ด๋ก ๋ฐฐ์ดํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๋ด์ค ์น์ฌ์ดํธ (๋ค์ํ ์ง์ญ): ๋ด์ค ์ฌ์ดํธ๋ ์ฌ๋ฌ ์ด, ์ฌ์ด๋๋ฐ, ์ฃผ์ ๊ธฐ์ฌ๊ฐ ์๋ ๋ณต์กํ ๋ ์ด์์์ ๋ง๋ค๊ธฐ ์ํด Grid๋ฅผ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. ๊ฐ ์น์ ๋ด์์๋ Flexbox๋ฅผ ์ฌ์ฉํ์ฌ ํค๋๋ผ์ธ, ์ด๋ฏธ์ง, ๊ธฐ์ฌ ์์ฝ์ ์ ๋ ฌํ ์ ์์ต๋๋ค.
- ์์ ๋ฏธ๋์ด ํ๋ซํผ (์ ์ธ๊ณ): ์์ ๋ฏธ๋์ด ํ๋ซํผ์ ํ๋กํ ์ ๋ณด, ๊ฒ์๋ฌผ, ๋๊ธ์ ์ ๋ ฌํ๊ธฐ ์ํด Flexbox๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํฉ๋๋ค. Grid๋ ๋ด์ค ํผ๋, ํ๋กํ ํ์ด์ง, ์ค์ ํจ๋์ ํฌํจํ ์ ์ฒด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ์ ๋ถ ์น์ฌ์ดํธ (์ ๋ฝ, ์์์ ์์): ๋ง์ ์ ๋ถ ์น์ฌ์ดํธ๊ฐ ๋ ์ด์์์ Grid๋ฅผ ์ฑํํ์ฌ ์ ๋ณด๊ฐ ์ ์ ๋ฆฌ๋๊ณ ๋ค์ํ ๊ธฐ๊ธฐ์์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. Flexbox๋ ๊ฒ์์ฐฝ ๋ฐ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด์ ๊ฐ์ ์ปดํฌ๋ํธ ๋ด์ ํญ๋ชฉ์ ์ ๋ ฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๊ต์ก ํ๋ซํผ (๋ถ๋ฏธ, ๋จ๋ฏธ ์์): ์จ๋ผ์ธ ํ์ต ํ๋ซํผ์ Grid๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ ์๋ฃ, ๊ณผ์ , ํ์ ํ๋กํ์ ์ ๋ฆฌํฉ๋๋ค. Flexbox๋ ํด์ฆ, ํฌ๋ผ, ์ํธ์์ฉ ์์์ ๋ํ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ฒฐ๋ก : ์ฌ๋ฐ๋ฅธ ๋๊ตฌ ์ ํํ๊ธฐ
Flexbox์ CSS Grid๋ ์น ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๊ฐ๋ ฅํ ๋ ์ด์์ ๋๊ตฌ์ ๋๋ค. ๊ฐ๊ฐ์ ๊ฐ์ ๊ณผ ์ฝ์ ์ ์ดํดํจ์ผ๋ก์จ ์ํฉ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๊ณ ๋ฐ์ํ์ด๋ฉฐ ๋์ ์ด๊ณ ์ ๊ทผ์ฑ ๋์ ์น ๋์์ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ต์์ ์ ๊ทผ ๋ฐฉ์์ ์ข ์ข ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๊ฒฐํฉํ๋ ๊ฒ์์ ๊ธฐ์ตํ์ธ์. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ธฐ ์ํด ์ด ๋๊ตฌ๋ค์ ์คํํ๊ณ , ํ์ํ๊ณ , ๋ง์คํฐํ์ธ์.
๊ถ๊ทน์ ์ผ๋ก Flexbox์ Grid ์ฌ์ด์ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ ์ด์์์ ์ฐจ์, ํ์ํ ์ ์ด ์์ค, ์ ๊ทผ์ฑ ๊ณ ๋ ค ์ฌํญ์ ๊ณ ๋ คํ์ธ์. ์ฐ์ต๊ณผ ์คํ์ ํตํด ๊ฐ ๋ฐฉ๋ฒ์ ์ธ์ ์ฌ์ฉํ๊ณ ์ด๋ป๊ฒ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํฉํ ์ง์ ๋ํ ์๋ฆฌํ ๊ฐ๊ฐ์ ๊ฐ๋ฐํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ถ๊ฐ ํ์ต ์๋ฃ
- MDN ์น ๋ฌธ์: Mozilla Developer Network๋ Flexbox์ Grid์ ๋ํ ํฌ๊ด์ ์ธ ๋ฌธ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
- CSS-Tricks: CSS-Tricks๋ CSS ๋ ์ด์์ ๊ธฐ์ ์ ๋ํ ํ๋ถํ ๊ธฐ์ฌ, ํํ ๋ฆฌ์ผ, ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Grid by Example: Grid by Example์ CSS Grid ๋ ์ด์์์ ์ค์ ์ ์ธ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Flexbox Froggy & Grid Garden: Flexbox์ Grid์ ๊ธฐ๋ณธ์ ๋ฐฐ์ธ ์ ์๋ ์ธํฐ๋ํฐ๋ธ ๊ฒ์์ ๋๋ค.