๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

004 | Page Layout, Web/App ํ™”๋ฉด ์„ค๊ณ„ ๋ณธ๋ฌธ

SEB/TIL

004 | Page Layout, Web/App ํ™”๋ฉด ์„ค๊ณ„

kexon 2022. 6. 28. 22:00

๐Ÿ“Œ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ

๐Ÿ’™ ๋ ˆ์ด์•„์›ƒ: ํ™”๋ฉด์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•

๐Ÿค HTML ๊ตฌ์„ฑํ•˜๊ธฐ

  • ์ฝ˜ํ…์ธ  ํ๋ฆ„: ์ขŒ → ์šฐ / ์œ„ → ์•„๋ž˜
  • CSS ํ™”๋ฉด ๊ตฌ๋ถ„
    • ์ˆ˜์ง๋ถ„ํ• : ์ฝ˜ํ…์ธ  ๊ฐ€๋กœ ๋ฐฐ์น˜
    • ์ˆ˜ํ‰๋ถ„ํ• : ๋‚ด๋ถ€ ์ฝ˜ํ…์ธ ์˜ ์„ธ๋กœ ๋ฐฐ์น˜
      • ์ˆ˜ํ‰๋ถ„ํ•  + height ⇒ ์ง๊ด€์ ์ธ ์ˆ˜ํ‰ ๋ถ„ํ•  ๊ฐ€๋Šฅ
<!-- HTML -->

<div id="container">
    <div class="col w10">
        <div class="icon">์•„์ด์ฝ˜ 1</div>
        <div class="icon">์•„์ด์ฝ˜ 2</div>
        <div class="icon">์•„์ด์ฝ˜ 3</div>
    </div>
    <div class="col w20">
        <div class="row h40">์˜์—ญ1</div>
        <div class="row h40">์˜์—ญ2</div>
        <div class="row h20">์˜์—ญ3</div>
    </div>
    <div class="col w70">
        <div class="row h80">์˜์—ญ4</div>
        <div class="row h20">์˜์—ญ5</div>
    </div>
</div>
/* CSS */

.w70 { width: 70%; }
.h40 { height: 40%; }

๐Ÿค ๋ ˆ์ด์•„์›ƒ ๋ฆฌ์…‹

  • ๋ฐ•์Šค๋ฅผ ์žก๋Š”๋ฐ ์žˆ์–ด HTML์˜ ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋กœ ์ธํ•œ ์–ด๋ ค์šด ์ 
    • ํƒœ๊ทธ ๊ธฐ๋ณธ ์Šคํƒ€์ผ์— ์•ฝ๊ฐ„์˜ ์—ฌ๋ฐฑ์ด ์žˆ์Œ
    • width, height ๊ณ„์‚ฐ์— ์—ฌ๋ฐฑ ๋ถˆํฌํ•จ (003์˜ ๋ฐ•์Šค๋ชจ๋ธ ์ฐธ๊ณ )
    • ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์Šคํƒ€์ผ
  • ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
    • ๊ธฐ๋ณธ ์Šคํƒ€์ผ๋ง ์ œ๊ฑฐ
    * {
      box-sizing: border-box;
    }
    
    body {
      margin: 0;
      padding: 0;
    }

๐Ÿ“Œ Flexbox

๐Ÿ’™ Flexbox๋กœ ๋ ˆ์ด์•„์›ƒ ์žก๊ธฐ

  • Flex(Flexible): "์ž˜ ๊ตฌ๋ถ€๋Ÿฌ์ง€๋Š”, ์œ ์—ฐํ•œ"
  • Flexbox๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ: ์œ ์—ฐํ•œ ๋ ˆ์ด์•„์›ƒ ์žก๊ธฐ
  • Flexbox๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ: ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ์š”์†Œ์˜ ๊ณต๊ฐ„์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ
๋”๋ณด๊ธฐ
  • ์˜ˆ์ œ
<!-- HTML -->

<div id="main">
  <div class="box">box1</div>
  <div class="box">box2</div>
  <div class="box">box3</div>
</div>
/* CSS */

* {
  border-sizing: border-box;
  margin: 10px;
  padding: 10px;
}

#main {
  border: 2px solid grey;
}

.box {
  border: 3px dotted pink;
}
  • main์— flexbox ์ ์šฉ
* {
  border-sizing: border-box;
  margin: 10px;
  padding: 10px;
}

#main {
  display: flex;      /* flexbox ์ ์šฉ ๋ถ€๋ถ„ */
  border: 2px solid grey;
}

.box {
  border: 3px dotted pink;
}
display: flex; ์ ์šฉ ํ›„ ํšŒ์ƒ‰๋ฐ•์Šค(#main) ๋‚ด ์ž์‹์š”์†Œ(.box)๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋ฐฐ์น˜๋จ

๐Ÿค Flexbox ์†์„ฑ๋“ค - ๋ถ€๋ชจ ์š”์†Œ์— ์ •์˜

๋”๋ณด๊ธฐ
  • flex-direction: ์ •๋ ฌ ์ถ• ์ •ํ•˜๊ธฐ
    • ๊ธฐ๋ณธ: ๊ฐ€๋กœ์ •๋ ฌ(row)
    • ์ž์‹ ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•  ์ •๋ ฌ ์ถ•์„ ์ •ํ•จ
    • ์†์„ฑ
      • row(๊ธฐ๋ณธ๊ฐ’): ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
      • column: ์œ„ → ์•„๋ž˜
      • row-reverse: ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
      • column-reverse: ์•„๋ž˜ → ์œ„
  • flex-wrap: ์ค„๋ฐ”๊ฟˆ ์„ค์ •
    • ํ•˜์œ„ ์š”์†Œ ํฌ๊ธฐ๊ฐ€ ์ƒ์œ„ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์„ ๋•Œ ์ž๋™ ์ค„๋ฐ”๊ฟˆํ• ์ง€ ์ •ํ•จ
    • ๊ธฐ๋ณธ: ์ค„๋ฐ”๊ฟˆ ์•ˆํ•จ
    • ์†์„ฑ
      • nowrap(๊ธฐ๋ณธ๊ฐ’): ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ (block-level: ์ค„๋ฐ”๊ฟˆ ์—†์Œ)
      • wrap: ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ (inline-level: ๋„˜์–ด๊ฐ€๋ฉด ์ค„๋ฐ”๊ฟˆ)
      • wrap-reverse: ์š”์†Œ๋“ค์ด ์ค„๋ฐ”๊ฟˆ์„ ํ•˜๋ฉฐ ์—ญ์ˆœ์œผ๋กœ ๋ฐฐ์น˜๋จ
  • justify-content: ์ถ•์˜ ์ˆ˜ํ‰ ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ถ•์˜ ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ์ž์‹์š”์†Œ๋“ค์„ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•จ
    • ์†์„ฑ
      • row(๊ธฐ๋ณธ๊ฐ’): ์˜ค๋ฅธ์ชฝ → ์™ผ์ชฝ
      • column: ์œ„ → ์•„๋ž˜
    • row์™€ column์˜ ์ฃผ์š” ์†์„ฑ ๊ฐ’: flex-start, flex-end, center, space-between, space-around
    • ์‚ฌ์šฉ๋ฒ•
  • align-items: ์ถ•์˜ ์ˆ˜์ง ๋ฐฉํ–ฅ ์ •๋ ฌ
    • ์ถ•์˜ ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ์ž์‹์š”์†Œ๋“ค์„ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•จ
      • ์š”์†Œ๋“ค์ด ๊ฐ€๋กœ ์ •๋ ฌ์ผ ๋•Œ ์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ• ์ง€
      • ์š”์†Œ๋“ค์ด ์„ธ๋กœ ์ •๋ ฌ์ผ ๋•Œ ๊ฐ€๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ• ์ง€

๐Ÿค Flexbox ์†์„ฑ๋“ค - ์ž์‹ ์š”์†Œ์— ์ •์˜(ํ•˜์œ„์†์„ฑ)

๋”๋ณด๊ธฐ

flex ์†์„ฑ ๊ฐ’ (⇒ ์ˆœ์„œ๊ฐ€ ์ค‘์š”)

  • grow(ํŒฝ์ฐฝ์ง€์ˆ˜): ์š”์†Œ ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋Š˜์–ด๋‚  ๊ฒƒ์ธ์ง€ ์ •ํ•จ
  • shrink(์ˆ˜์ถ•์ง€์ˆ˜): ์š”์†Œ ํฌ๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ค„์–ด๋“ค ๊ฒƒ์ธ์ง€ ์ •ํ•จ
  • basis(๊ธฐ๋ณธํฌ๊ธฐ)
flex: grow shrink basis;
flex: 0 1 auto;

/* ๋”ฐ๋กœ๋„ ๊ฐ€๋Šฅ */
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

๐Ÿค Flexbox ์‹ค์Šตํ•˜๊ธฐ

 

Flexbox Froggy

A game for learning CSS flexbox

flexboxfroggy.com

โœ… Ref.

๋”๋ณด๊ธฐ
 

์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Flex๋ฅผ ์ตํ˜€๋ณด์ž

์ด ํŠœํ† ๋ฆฌ์–ผ์€ “์ฐจ์„ธ๋Œ€ CSS ๋ ˆ์ด์•„์›ƒ” ์‹œ๋ฆฌ์ฆˆ์˜ ์ฒซ๋ฒˆ์งธ ํฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Flex๋ฅผ ์ตํ˜€๋ณด์ž ์ด๋ฒˆ์—์•ผ๋ง๋กœ CSS Grid๋ฅผ ์ตํ˜€๋ณด์ž ๋ฒŒ์จ๋ถ€ํ„ฐ ์Šคํฌ๋กค์˜ ์••๋ฐ•์ด ๋Š๊ปด์ง€๊ณ ,‘์ข€ ํŽธ์•ˆํ•˜๊ฒŒ ๋ˆ„

studiomeal.com

 

CSS Flex(Flexible Box) ์™„๋ฒฝ ๊ฐ€์ด๋“œ

๋งŽ์€ ๊ฒฝ์šฐ float, inline-block, table ๋“ฑ์˜ ๋„์›€์„ ๋ฐ›์•„์„œ ์ˆ˜ํ‰ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜์ง€๋งŒ ์ด๋Š” ์ฐจ์„ ์ฑ…์ด๋ฉฐ, ์šฐ๋ฆฌ๋Š” Flex(Flexible Box)๋ผ๋Š” ๋ช…ํ™•ํ•œ ๊ฐœ๋…(์†์„ฑ๋“ค)์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CSS F

heropy.blog

๐Ÿ“Œ ์›น/์•ฑ ํ™”๋ฉด ์„ค๊ณ„ํ•˜๊ธฐ

๐Ÿ’™ ์™€์ด์–ดํ”„๋ ˆ์ž„ ์„ค๊ณ„ ๋ฐ ๋ชฉ์—… ๊ตฌํ˜„

๐Ÿค ์™€์ด์–ดํ”„๋ ˆ์ž„(Wireframe)

  • ๋‹จ์ˆœํ•œ ์„ ์ด๋‚˜ ๋„ํ˜•์œผ๋กœ ์›น/์•ฑ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„
  • ์›น/์•ฑ ๊ฐœ๋ฐœ ์‹œ ๋ผˆ๋Œ€๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋‹จ๊ณ„ ⇒ ํ™”๋ฉด ์˜์—ญ ๊ตฌ๋ถ„
  • ๋ ˆ์ด์•„์›ƒ๊ณผ ์ œํ’ˆ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์คŒ ⇒ UI์— ๊ฐ€๊นŒ์›€

๐Ÿค ๋ชฉ์—…(Mock-up)

  • ์ตœ์ข… ๊ตฌํ˜„๋ฌผ์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ง€๋Š”์ง€ ๊ตฌํ˜„ํ•˜์ง€๋งŒ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ

๐Ÿ’™  HTML๋กœ ์›น/์•ฑ ๊ตฌ์กฐ ์žก๊ธฐ

  1. ์›น/์•ฑ์˜ ์˜์—ญ์„ ํฐ ํ‹€๋กœ ๋‚˜๋ˆ„๊ธฐ
  2. ๊ฐ ์˜์—ญ์„ ํ‘œํ˜„ํ•  ํƒœ๊ทธ ์ƒ๊ฐํ•˜๊ธฐ

๐Ÿ’™ ์‹ค์Šต

๐Ÿค ์™€์ด์–ดํ”„๋ ˆ์ž„ ๋งŒ๋“ค๊ธฐ

1. ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋Š” ์›น/์•ฑ ์‚ฌ์ดํŠธ - ๋งˆ์ด๋ฆฌ์–ผํŠธ๋ฆฝ

 

๋งˆ์ด๋ฆฌ์–ผํŠธ๋ฆฝ :: ๋‚˜๋‹ค์šด ์ง„์งœ ์—ฌํ–‰

 

www.myrealtrip.com

2. ์‹ค์Šต ์‚ฌ์ดํŠธ - ์นด์นด์˜ค ์˜ค๋ธ

 

OvenApp.io

Oven(์˜ค๋ธ)์€ HTML5 ๊ธฐ๋ฐ˜์˜ ๋ฌด๋ฃŒ ์›น/์•ฑ ํ”„๋กœํ† ํƒ€์ดํ•‘ ํˆด์ž…๋‹ˆ๋‹ค. (์นด์นด์˜ค ์ œ๊ณต)

ovenapp.io

3. ๊ตฌํ˜„ ๊ฒฐ๊ณผ๋ฌผ

๐Ÿ’œ Today is ...

  • ์ž๊ธฐ์ฃผ๋„ํ•™์Šต์‹œ๊ฐ„์— ์นด๋ฉ”๋ผ ์ผœ๊ธฐ ํ•„์ˆ˜์ธ ์Šคํ„ฐ๋””์— ์ฐธ์—ฌํ–ˆ๋‹ค. ์Œ๋ฃŒ ๋งˆ์‹œ๋Ÿฌ, ํ™”์žฅ์‹ค, ์ฒญ์†Œ ๋“ฑ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ฉฐ ๋”ด์ง“ํ•˜๊ธฐ ์‰ฌ์šด ํ™˜๊ฒฝ์ธ๋ฐ ๊ฐ•์ œ๋กœ ๋‚˜๋ฅผ ๋ฌถ์–ด๋†“๊ธฐ์— ํšจ๊ณผ๊ฐ€ ์•„์ฃผ ์ข‹์•˜๋‹ค๐Ÿ‘๐Ÿป 
  • ์‚ฌ์‹ค ์–ด์ œ css ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ „์— ํ–ˆ๋˜ ๊ฒƒ๋“ค์ด ๊ฑฐ~~์˜ ์ฆ๋ฐœ๋˜์–ด์„œ ์„œ๋– ๋ ˆ์จ๋ฅผ ์กฐ๊ธˆ ๋ฐ›์•˜๋Š”๋ฐ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐˆ ํ•„์š” ์—†์ด ๊ธฐ๋ณธ ์ปจ์…‰๋งŒ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค๊ณ  ๋ง์”€ํ•ด์ฃผ์…”์„œ ์˜ค๋Š˜์€ ๋ถ€๋‹ด์—†์ด ์žฌ๋ฐŒ๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
  • ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ๊ณผ ํ™”๋ฉด ์„ค๊ณ„๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์นด์นด์˜ค์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ค๋ธ์ด๋ผ๋Š” ํˆด๋กœ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ๊ทธ๋ ธ๋‹ค. ๋ญ๋“  ์ฒ˜์Œ์€ ์„œํˆด๊ณ  ๋ฒ„๋ฒ…์ด๊ณ  ๋จธ๋ฆฌ์— ๊น€ ๋‚˜๋‹ค๊ฐ€ ์นจ์ฐฉํ•ด์ง€๋Š” ๊ฒƒ! ์‚ฌ์ดํŠธ ์ •ํ•˜๋Š”๋ฐ ์“ธ๋ฐ์—†์ด ์˜ค๋ž˜ ์‹œ๊ฐ„์„ ์ผ๋‹ค๐Ÿ˜ญ ๊ฐ€๋ณ๊ฒŒ ์ƒ๊ฐํ•˜๊ตฌ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ๊ทธ๋ฆฌ๋ฉด์„œ ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์–ด๋–ค ํƒœ๊ทธ๋กœ ๋งˆํฌ์—…ํ• ๊ฑด์ง€์— ์˜์˜๋ฅผ ๋‘ฌ์•ผ ํ•˜๋Š”๋ฐ. ๊ทธ๋ž˜๋„ ๋‚˜๋ฆ„ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ ์žฌ๋ฐŒ์–ด์„œ ์‹œ๊ฐ„๊ฐ€๋Š” ์ค„ ๋ชฐ๋ž๋‹ค. ์–ด๋””๊นŒ์ง€ ํ•ด์•ผ๋ ์ง€ ๋ชฐ๋ผ์„œ ๋ฉ”์ธ ํŽ˜์ด์ง€์— ๊ผญ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋Œ€๋žต ๊ทธ๋ ธ๋”๋‹ˆ ์–ด๋Š์ƒˆ ๋๋‚  ์‹œ๊ฐ„!
    ์ „์—” ์ผ์ผํžˆ ์†์œผ๋กœ ๊ทธ๋ ค์„œ ์ˆ˜์ •ํ• ๋•Œ๋งˆ๋‹ค...๐Ÿ™ˆ ์นธ ์ •๋ ฌ์ด ์•ˆ ๋˜๋Š” ๋ถ€๋ถ„์ด ์กฐ๊ธˆ ๋ถˆํŽธํ–ˆ์ง€๋งŒ ํˆด์„ ์“ฐ๋‹ˆ ํ™•์‹คํžˆ ํŽธํ•œ ๋ถ€๋ถ„์ด ์žˆ์—ˆ๋‹ค. ์ „์—” ์ด๋Ÿฐ ๊ฒƒ์— ๊ฐ•๋ฐ•์ ์ด์–ด์„œ ์นธ, ์ •๋ ฌ ์•ˆ ๋งž์œผ๋ฉด ์—„์ฒญ ์ŠคํŠธ๋ ˆ์Šค ๋ฐ›์•˜๋Š”๋ฐ ๋†“์œผ๋‹ˆ๊นŒ ๋งˆ์Œ์€ ํŽธํ•˜๋‹ค ๐Ÿคฃ๐Ÿคฃ
  • ๋“œ๋””์–ด! ์ฒซ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŽ˜์–ด๊ฐ€ ์ •ํ•ด์กŒ๋‹ค!!!๐ŸŽŠ ์„ค๋ ˆ๊ณ  ๊ธด์žฅ๋œ๋‹ค. 
  • ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธ€ ์˜ฌ๋ฆฌ๋ฉด ์ œ๋ชฉ ์‚ฌ์ด ๊ฐ„๊ฒฉ์ด ๋–จ์–ด์ง€๋Š”๋ฐ! ์™œ ๊ทธ๋Ÿฌ๋Š”์ง€ ํ˜น์‹œ ์•„์‹œ๋Š”๋ถ„!?!!?? ํ•˜... ์ˆ˜์ •ํ•ด๋„ ์ˆ˜์ •์ด ์•ˆ๋ผ์š” ๐Ÿคฌ๐Ÿคฌ๐Ÿคฏ
    ๋‚˜๋Š” ์™œ ๋•Œ๋ฌธ์— ํ‹ฐ์Šคํ† ๋ฆฌ์— ์ด๋ ‡๊ฒŒ ์Šฝํ๋ ˆ์Šค๋ฅผ ๋ฐ›๋Š”๊ฐ€ ํ•ณํ•˜ํ•ณใ…Žํ•˜ใ…‡ใ„นใ„นใ…Žใ„ดใ…‡๐Ÿคฃ
Comments