[CSS] Layout & Flexbox

HannahhhΒ·2022λ…„ 7μ›” 2일
0

CSS3

λͺ©λ‘ 보기
9/11

πŸ” Layout

각각의 μš”μ†Œλ₯Ό λͺ©μ μ— 맞게 λ°°μΉ˜ν•˜λŠ” 것이닀.


μ™€μ΄μ–΄ν”„λ ˆμž„(Wireframe)

λ ˆμ΄μ•„μ›ƒμ˜ λΌˆλŒ€λ₯Ό κ·Έλ¦¬λŠ” λ‹¨κ³„λ‘œ, λ‹¨μˆœν•œ μ„ μ΄λ‚˜ λ„ν˜•μœΌλ‘œ μ›Ή,μ•±μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ¬˜μ‚¬ν•œ 것이닀.
λ‹¨μˆœνžˆ λ ˆμ΄μ•„μ›ƒκ³Ό μ œν’ˆμ˜ ꡬ쑰λ₯Ό λ³΄μ—¬μ£ΌλŠ” μš©λ„λ‘œ, μŠ€νƒ€μΌλ§ μš”μ†Œλ‚˜ UXλ₯Ό νŒλ‹¨ν•˜μ§€ μ•ŠλŠ”λ‹€.


λͺ©μ—…(Mock-Up)

μ‹€λ¬Ό 크기의 λͺ¨ν˜•μ„ λœ»ν•˜λ©° μ›Ή, μ•±μ˜ 경우 μ‹€μ œλ‘œ μž‘λ™ν•˜λŠ” λͺ¨μŠ΅κ³Ό λ™μΌν•œ HTML λ¬Έμ„œλ₯Ό μž‘μ„±ν•œλ‹€. μ΄λ•Œ, ν•˜λ“œμ½”λ”©μœΌλ‘œ μž‘μ„±ν•œλ‹€.

  • ν•˜λ“œμ½”λ”©?

μ½”λ“œ 내뢀에 데이터λ₯Ό 직접 μž…λ ₯ν•˜λŠ” κ²ƒμœΌλ‘œ, 값을 κ³ μ •μ‹œμΌœ λ†“λŠ” 것이닀.

ex) ꡬꡬ단을 λ§Œλ“ λ‹€κ³  κ°€μ •ν–ˆμ„ λ•Œ, κ΅¬κ΅¬λ‹¨μ²˜λŸΌ 보이게 ν•˜κΈ°μœ„ν•΄ 각 숫자의 단을 λͺ¨λ‘ 좜λ ₯

console.log('2 x 1 = 2')
console.log('2 x 2 = 4')
console.log('2 x 3 = 6')
console.log('2 x 4 = 8')



πŸ‘€ 화면을 λ‚˜λˆ„λŠ” 방법


μˆ˜μ§λΆ„ν• : 화면을 수직으둜 λΆ„ν• ν•˜μ—¬ μ½˜ν…μΈ κ°€ κ°€λ‘œλ‘œ 배치될 수 μžˆλ„λ‘ ν•œλ‹€.

μˆ˜ν‰λΆ„ν• : 수직으둜 λΆ„ν• λœ 각각의 μš”μ†Œλ₯Ό μˆ˜ν‰μœΌλ‘œ λΆ„ν• ν•˜μ—¬, λ‚΄λΆ€ μ½˜ν…μΈ κ°€ μ„Έλ‘œλ‘œ 배치될 수 μžˆλ„λ‘ ν•œλ‹€.


ex) VScode의 layout

<!--μœ„μ˜ λ ˆμ΄μ•„μ›ƒμ„ 고렀의 μž‘μ„±λœ 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>
/* Class 이름에 λ§žλŠ” CSS κ΅¬ν˜„ */

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

HTML λ¬Έμ„œμ˜ 경우,`` μš”μ†ŒλŠ” 기본적으둜 μ•½κ°„μ˜ 여백을 가지고 μžˆκΈ°λ•Œλ¬Έμ— λ°•μŠ€μ— μ‹œμž‘ μœ„μΉ˜λ₯Ό (0,0)에 λ§žμΆ”κΈ° μœ„ν•΄μ„œλŠ” μ΄ˆκΈ°ν™”λ₯Ό ν•΄μ€˜μ•Όν•œλ‹€.
* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}



πŸ” Flexbox

Flexible boxλΌλŠ” 뜻으둜, λ°•μŠ€λ₯Ό μœ μ—°ν•˜κ²Œ λŠ˜λ¦¬κ±°λ‚˜ μ€„μ΄λ©΄μ„œ λ ˆμ΄μ•„μ›ƒμ„ μž‘λŠ” 방법이닀.

πŸ‘€ λΆ€λͺ¨ μš”μ†Œμ— μ μš©ν•΄μ•Όν•˜λŠ” Flexbox 속성


βœ” display: flex

λΆ€λͺ¨ λ°•μŠ€ μš”μ†Œμ— μ μš©ν•΄, μžμ‹ λ°•μŠ€μ˜ λ°©ν–₯κ³Ό 크기λ₯Ό κ²°μ •ν•œλ‹€.

μœ„μͺ½μ—μ„œ λΆ€ν„° μ„Έλ‘œλ‘œ μ •λ ¬, κ°€λ‘œλ‘œ λ„“κ²Œ 곡간 차지(default) -> μ™Όμͺ½λΆ€ν„° κ°€λ‘œλ‘œ μ •λ ¬, μ½˜ν…μΈ λ§ŒνΌμ˜ 곡간 차지

1. flex-direction:

μžμ‹μš”μ†Œλ“€μ„ μ •λ ¬ν•  좕을 κ²°μ •ν•œλ‹€. 아무 섀정도 μ•ˆ ν•˜λ©΄ default κ°€λ‘œ μ •λ ¬.

μ£Όμš” 속성값:

  • row(default) : μ™Όμͺ½μ—μ„œλΆ€ν„° κ°€λ‘œ μ •λ ¬
  • column: μœ„μ—μ„œλΆ€ν„° μ„Έλ‘œ μ •λ ¬
  • row-reverse : 였λ₯Έμͺ½μ—μ„œλΆ€ν„° κ°€λ‘œ μ •λ ¬
  • column-reverse : λ°‘μ—μ„œλΆ€ν„° μ„Έλ‘œ μ •λ ¬

2. flex-wrap:

μžμ‹ μš”μ†Œλ“€μ˜ 크기 > λΆ€λͺ¨ μš”μ†Œμ˜ 크기 μΌλ•Œ, μžλ™ 쀄 λ°”κΏˆμ„ ν•  것인지 κ²°μ •ν•œλ‹€. 아무 섀정도 μ•ˆ ν•˜λ©΄ default 쀄 λ°”κΏˆ X.

μ£Όμš” 속성값:

  • nowrap(default) : μ€„λ°”κΏˆ x
  • wrap: μœ„μ—μ„œλΆ€ν„° κ°€λ‘œ μ •λ ¬, μ€„λ°”κΏˆ O
  • wrap-reverse : λ°‘μ—μ„œλΆ€ν„° κ°€λ‘œ μ •λ ¬, μ€„λ°”κΏˆ O

3. justify-content:

μžμ‹ μš”μ†Œλ“€μ„ μΆ•μ˜ μˆ˜ν‰λ°©ν–₯으둜 μ–΄λ–»κ²Œ μ •λ ¬ν•  것인지 κ²°μ •ν•œλ‹€.

μ£Όμš” 속성값:

flex-direction : row 라면,

  • flex-start : μ™Όμͺ½ μœ„μ—μ„œλΆ€ν„° μ •λ ¬
  • flex-end : 였λ₯Έμͺ½ μœ„μ—μ„œλΆ€ν„° μ •λ ¬
  • center : κ°€μš΄λ° μœ„μ—μ„œλΆ€ν„° μ •λ ¬
  • space-between : 쒌우 양끝에 맞좰 곡간 λΉ„μš°κ³  μ™Όμͺ½μ—μ„œλΆ€ν„° μ •λ ¬
  • space-around : 쒌우 μ£Όλ³€(양끝x)에 맞좰 λΉ„μš°κ³  μ™Όμͺ½μ—μ„œλΆ€ν„° μ •λ ¬

flex-direction : column` 라면,

  • flex-start : μ™Όμͺ½ μœ„μ—μ„œλΆ€ν„° μ •λ ¬
  • flex-end : μ™Όμͺ½ λ°‘μ—μ„œλΆ€ν„° μ •λ ¬
  • center : μ™Όμͺ½ κ°€μš΄λ°μ—μ„œλΆ€ν„° μ •λ ¬
  • space-between : μƒν•˜ 양끝에 맞좰 곡간 λΉ„μš°κ³  μ™Όμͺ½μ—μ„œλΆ€ν„° μ •λ ¬
  • space-around : μƒν•˜ μ£Όλ³€(양끝x)에 맞좰 λΉ„μš°κ³  μ™Όμͺ½μ—μ„œλΆ€ν„° μ •λ ¬


4. align-items:

μžμ‹ μš”μ†Œλ“€μ„ μΆ•μ˜ 수직방ν–₯으둜 μ–΄λ–»κ²Œ μ •λ ¬ν•  것인지 κ²°μ •ν•œλ‹€.

μ£Όμš” 속성값:

stretch, lex-start, flex-end, center, baseline

flex-direction : row 라면,

flex-direction : column 라면,



πŸ‘€ μžμ‹ μš”μ†Œμ— μ μš©ν•΄μ•Όν•˜λŠ” Flexbox 속성


λΆ€λͺ¨ μš”μ†Œμ— μ μš©ν•΄μ•Ό ν•˜λŠ” 속성: μžμ‹μš”μ†Œλ“€μ˜ μ •λ ¬ κ²°μ •
μžμ‹ μš”μ†Œμ— μ μš©ν•΄μ•Ό ν•˜λŠ” 속성: μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” 곡간 κ²°μ •


βœ” flex


`flex`속성에 **3 가지 κ°’**을 지정해 쀄 수 μžˆλ‹€.
  • flex-grow: : 팽창 μ§€μˆ˜, μš”μ†Œμ˜ 크기가 λŠ˜μ–΄λ‚˜μ•Ό ν•  λ•Œ, μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚  것인지 κ²°μ •
  • flex-shrink: : μˆ˜μΆ• μ§€μˆ˜, μš”μ†Œμ˜ 크기가 쀄어듀어야 ν•  λ•Œ, μ–Όλ§ˆλ‚˜ 쀄어듀 것인지 κ²°μ •
  • flex-basis:: μš”μ†Œμ˜ κΈ°λ³Έ 크기 κ²°μ •
/*flex:   <grow>    <shrink>    <basis>*/
flex: 0 1 auto;

1. flex-grow

팽창 μ§€μˆ˜, μš”μ†Œμ˜ 크기가 λŠ˜μ–΄λ‚˜μ•Ό ν•  λ•Œ, μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚  것인지 κ²°μ •ν•œλ‹€.

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

box1μ—λ§Œ flex-grow: 1 ν•΄μ£Όλ©΄ 곡간 차지 λΉ„μœ¨μ΄box1:box2:box3 = 1:0:0
box1,2μ—λ§Œ flex-grow: 1 ν•΄μ£Όλ©΄, 1:1:0
λͺ¨λ‘ flex-grow: 1 ν•΄μ£Όλ©΄, 1:1:1


2. flex-shrink

μˆ˜μΆ• μ§€μˆ˜, μš”μ†Œμ˜ 크기가 쀄어듀어야 ν•  λ•Œ, μ–Όλ§ˆλ‚˜ 쀄어듀 것인지 κ²°μ •ν•œλ‹€.
λΉ„μœ¨λ‘œ λ ˆμ΄μ•„μ›ƒμ„ 지정할 경우, shrinkλŠ” μ‹€μ œ 크기λ₯Ό μ˜ˆμΈ‘ν•˜κΈ°κ°€ μ–΄λ ΅κΈ° λ•Œλ¬Έμ— grow 속성을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. flex-grow μ†μ„±μœΌλ‘œ λΉ„μœ¨λ³€κ²½ μ‹œ, flex=shrink 속성은 1(default)둜 두어도 λ¬΄λ°©ν•˜λ‹€.


3. flex-basis

μš”μ†Œμ˜ κΈ°λ³Έ 크기λ₯Ό κ²°μ •ν•œλ‹€. width와 flex-basisλ₯Ό λ™μ‹œμ— μ‚¬μš©ν•˜λŠ” 경우, flex-basisκ°€ μš°μ„ λœλ‹€.

flex-growκ°€ 0μΌλ•Œ, basis 크기 지정 μ‹œ 크기가 μœ μ§€λœλ‹€.

ex) growλ₯Ό 0:1:1둜 μ„€μ •ν•œ ν›„ , box1μ—λ§Œ flex-basis: 50px둜 μ„€μ •ν–ˆμ„ λ•Œ,

  • flex-basis : auto 와 flex-basis : 0 의 차이?

0은 "width: 0"λ₯Ό μ§€μ •ν•˜λŠ” 것과 κ°™μœΌλ‚˜, autoλŠ” content의 크기에 맞좰 μ§€μ •λœλ‹€.


Reference: μ½”λ“œμŠ€ν…Œμ΄μΈ 

0개의 λŒ“κΈ€