๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽจ Frontend

์›น ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ์ œ๋Œ€๋กœ ์žก๊ธฐ

by hyebin (Helia) 2025. 4. 23.
๋ฐ˜์‘ํ˜•

์Šคํƒ€์ผ์€ ๋ฉ‹์ง€๊ฒŒ ์ž…ํ˜”๋Š”๋ฐ, ์š”์†Œ๋“ค์˜ ์œ„์น˜๊ฐ€ ์—‰๋ง์ด๋ผ๋ฉด ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„  ๋ถˆํŽธํ•œ UI๊ฐ€ ๋  ์ˆ˜๋ฐ–์— ์—†์ฃ .

๊ทธ๋ž˜์„œ ์›น ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๋ฉด์„œ๋„ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์‹ค๋ฌด์—์„œ๋„ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด ๋ณผ๊ฒŒ์š”.


โœ… Flexbox๋กœ ์š”์†Œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ •๋ ฌํ•ด ๋ณด์ž

Flexbox๋Š” ์ผ๋ ฌ๋กœ ์ •๋ ฌ๋˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐฐ์น˜ํ•  ๋•Œ ์ •๋ง ์œ ์šฉํ•ด์š”.

ํŠนํžˆ ์ •์ค‘์•™ ์ •๋ ฌ, ๊ฐ„๊ฒฉ ์กฐ์ ˆ, ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ ๋“ฑ์— ํƒ์›”ํ•˜์ฃ .

.container {
  display: flex;
  justify-content: center; /* ๊ฐ€๋กœ ์ •๋ ฌ */
  align-items: center;      /* ์„ธ๋กœ ์ •๋ ฌ */
  height: 100vh;
}

 

์ถœ์ฒ˜: https://developer.mozilla.org/ko/docs/Learn_web_development/Core/CSS_layout/Flexbox

๐Ÿ“Œ ์ฃผ์š” ์†์„ฑ ์š”์•ฝ

์†์„ฑ ์„ค๋ช…
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;
}

์ถœ์ฒ˜: https://developer.mozilla.org/ko/docs/Learn_web_development/Core/CSS_layout/Grids

๐Ÿ“Œ ์ž์ฃผ ์“ฐ๋Š” ์†์„ฑ ์ •๋ฆฌ

์†์„ฑ ์„ค๋ช…
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

 

๋ ˆ์ด์•„์›ƒ์€ ์ฒ˜์Œ์—” ์–ด๋ ต๊ฒŒ ๋А๊ปด์ง€์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•ด ๋ณด๋ฉฐ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๋ฉด ๊ธˆ๋ฐฉ ์ต์ˆ™ํ•ด์ ธ์š”.

๋ฐ˜์‘ํ˜•