Day +4

λΉ„νŠΈΒ·2023λ…„ 4μ›” 14일
0

CodeStates

λͺ©λ‘ 보기
4/54
post-thumbnail
post-custom-banner

πŸ’‘λ ˆμ΄μ•„μ›ƒ



βš‘μ™€μ΄μ–΄ν”„λ ˆμž„


  • μ™€μ΄μ–΄ν”„λ ˆμž„ (Wireframe)
    • μ›Ή λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•  λ•Œ λ ˆμ΄μ•„μ›ƒμ˜ λΌˆλŒ€λ₯Ό κ·Έλ¦¬λŠ” 단계.
    • "μ™€μ΄μ–΄λ‘œ μ„€κ³„λœ λͺ¨μ–‘"을 의미.
  • λͺ©μ—… (Mock-up)
    • λŒ€λΆ€λΆ„μ˜ μ‚°μ—…μ—μ„œ λͺ©μ—…은 μ‹€λ¬Ό 크기의 λͺ¨ν˜•μ„ 의미.

    • μ‹€λ¬Ό μ œν’ˆμ΄ μ—†λŠ” λ¬΄ν˜•μ˜ μ›Ή λ˜λŠ” 앱은 μ–΄λ–»κ²Œ λͺ©μ—…을 λ§Œλ“€κΉŒ?
      • μ›Ή λ˜λŠ” 앱을 μ œν’ˆμ΄λΌκ³  ν•  λ•Œ, λͺ©μ—…은 μ‹€μ œ μ œν’ˆμ˜ μž‘λ™ λͺ¨μŠ΅κ³Ό λ™μΌν•˜κ²Œ HTML λ¬Έμ„œλ₯Ό μž‘μ„±.
      • 예λ₯Ό λ“€μ–΄, νŠΈμœ— μž‘μ„±μž, νŠΈμœ— λ‚΄μš©, μž‘μ„±ν•œ λ‚ μ§œ 등을 HTML λ¬Έμ„œ 내에 ν•˜λ“œμ½”λ”©ν•˜λŠ” 방식.

πŸ”₯ν•˜λ“œμ½”λ”©μ΄λž€?

  • μƒμˆ˜λ‚˜ λ³€μˆ˜μ— λ“€μ–΄κ°€λŠ” 값을 μ†ŒμŠ€μ½”λ“œμ— 직접 μ“°λŠ” 방식.

β—‹ μ˜ˆμ‹œ

let tweet = { user: 'κΉ€μ½”λ”©', content: 'SNSλŠ” μΈμƒμ˜...' }

↓ jsλ₯Ό μ΄μš©ν•΄μ„œ λ³€μˆ˜λ₯Ό μ΄μš©ν•œ 데이터 관리λ₯Ό / HTML λ¬Έμ„œλ‘œ ν•˜λ“œμ½”λ”©ν•΄μ„œ ν‘œν˜„. ↓

<div class="writer">κΉ€μ½”λ”©</div>
<div class="content">SNSλŠ” μΈμƒμ˜...</div>

πŸ”₯μ™€μ΄μ–΄ν”„λ ˆμž„μ˜ λͺ©μ 

  • μ™€μ΄μ–΄ν”„λ ˆμž„κ³Ό λͺ©μ—…이 없이 λ°”λ‘œ JavaScript둜 λ™μž‘μ„ μ‹œν‚€λ©΄ 보닀 λΉ λ₯΄κ³  νŽΈλ¦¬ν•˜μ§€ μ•Šμ„κΉŒ?
    • NO. 완성본이 μ–΄λ–€ λͺ¨μŠ΅μΈμ§€ μƒμƒν•˜κΈ° μ–΄λ €μš΄κ±΄ 마치 섀계도 없이 건물을 μ§“λŠ” 것과 κ°™λ‹€.


βš‘ν™”λ©΄μ„ λ‚˜λˆ„λŠ” 방법


πŸ”₯HTML κ΅¬μ„±ν•˜κΈ°

  • λŒ€λΆ€λΆ„μ˜ μ½˜νƒ μΈ μ˜ 흐름은 μ’Œμ—μ„œ 우 (β†’), μœ„μ—μ„œ μ•„λž˜ (↓)둜 νλ¦…λ‹ˆλ‹€.
  1. 수직 λΆ„ν•  : 화면을 수직으둜 κ΅¬λΆ„ν•˜μ—¬, μ½˜ν…μΈ κ°€ κ°€λ‘œλ‘œ 배치될 수 μžˆλ„λ‘ μš”μ†Œλ₯Ό 배치.
  2. μˆ˜ν‰ λΆ„ν•  : λΆ„ν• λœ 각각의 μš”μ†Œλ₯Ό μˆ˜ν‰μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬, λ‚΄λΆ€ μ½˜ν…μΈ κ°€ μƒˆλ‘œλ‘œ 배치될 수 μžˆλ„λ‘ μš”μ†Œλ₯Ό 배치.
    - μˆ˜ν‰μœΌλ‘œ κ΅¬λΆ„λœ μš”μ†Œμ— height 속성을 μΆ”κ°€ν•˜λ©΄, μˆ˜ν‰ 뢄할을 보닀 μ§κ΄€μ μœΌλ‘œ ν•  수 μžˆλ‹€.

πŸ”₯λ ˆμ΄μ•„μ›ƒ 리셋

  • HTML λ¬Έμ„œλŠ” 기본적인 μŠ€νƒ€μΌμ„ 가지고 μžˆλ‹€.
  • HTML λ¬Έμ„œκ°€ κ°–λŠ” κΈ°λ³Έ μŠ€νƒ€μΌμ΄ λ ˆμ΄μ•„μ›ƒμ„ μž‘λŠ”λ° λ°©ν•΄κ°€ λ˜κΈ°λ„ ν•œλ‹€.
    • λ°•μŠ€μ˜ μ‹œμž‘μ„ μ •ν™•νžˆ (0,0)의 μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜κ³  싢은데, <body> μš”μ†Œκ°€ 가진 κΈ°λ³Έ μŠ€νƒ€μΌμ— μ•½κ°„μ˜ 여백이 μžˆλ‹€.
    • width, height 계산이 여백을 ν¬ν•¨ν•˜μ§€ μ•Šμ•„ 계산에 어렀움이 μžˆλ‹€.

↓ κΈ°λ³Έ μŠ€νƒ€μΌλ§μ„ μ œκ±°ν•˜λŠ” CSSμ½”λ“œ μ˜ˆμ‹œ

* {
  box-sizing: border-box;
}

body { 
  margin: 0;
  padding: 0;
}



πŸ’‘Flexbox



⚑Flexbox λ”°λΌν•˜κΈ° - 1


πŸ”₯ Flexbox둜 λ ˆμ΄μ•„μ›ƒ 작기

  • Flex(Flexible)
    • "잘 κ΅¬λΆ€λŸ¬μ§€λŠ”, μœ μ—°ν•œ" μ΄λΌλŠ” 뜻.
    • Flexbox둜 λ ˆμ΄μ•„μ›ƒμ„ κ΅¬μ„±ν•œλ‹€λŠ” 것은, λ°•μŠ€λ₯Ό μœ μ—°ν•˜κ²Œ λŠ˜λ¦¬κ±°λ‚˜ 쀄여 λ ˆμ΄μ•„μ›ƒμ„ μž‘λŠ” 방법.

display: flex λΆ„μ„ν•˜κΈ°

display: flex λŠ” λΆ€λͺ¨ λ°•μŠ€ μš”μ†Œμ— μ μš©ν•΄, μžμ‹ λ°•μŠ€μ˜ λ°©ν–₯κ³Ό 크기λ₯Ό κ²°μ •ν•˜λŠ” λ ˆμ΄μ•„μ›ƒ ꡬ성 방법.

  1. HTML둜 3개의 <div> μš”μ†Œλ₯Ό μžμ‹μœΌλ‘œ 가진 <main> μš”μ†Œλ₯Ό μž‘μ„±ν•΄μž.
  2. 각 μš”μ†Œλ“€μ΄ λˆˆμ— 잘 보이도둝 CSS둜 <main> μš”μ†Œμ—λŠ” 빨간색 점선, <div> μš”μ†Œλ“€μ—λŠ” μ΄ˆλ‘μƒ‰ μ‹€μ„ μœΌλ‘œ ν…Œλ‘λ¦¬λ₯Ό μ„€μ •.
  3. μ „μ²΄μ μœΌλ‘œ margin κ³Ό padding 도 10ν”½μ…€μ”© 주자.
<main>
	<div>box1</div>
	<div>box2</div>
	<div>box3</div>
</main>
main {
  border: 1px dotted red;
}

div {
  border: 1px solid green;
}

* {
  margin: 10px;
  padding: 10px;
}

이처럼 <div> μš”μ†Œλ“€μ€ 별닀λ₯Έ 섀정을 해주지 μ•ŠμœΌλ©΄ μœ„μͺ½μ—μ„œλΆ€ν„° μ„Έλ‘œλ‘œ μ •λ ¬λ˜λ©°, κ°€λ‘œλ‘œ λ„“κ²Œ 곡간을 μ°¨μ§€ν•˜λŠ” 것을 확인할 수 μžˆλ‹€.


μ΄λ²ˆμ—λŠ” 이 μƒνƒœμ—μ„œ λΆ€λͺ¨ μš”μ†ŒμΈ <main> μš”μ†Œμ— display: flex 속성을 μ μš©ν•΄λ³΄μž.

main {
  display: flex;
  border: 1px dotted red;
}

속성을 μ μš©ν–ˆλ”λ‹ˆ μžμ‹ μš”μ†ŒμΈ <div> μš”μ†Œλ“€μ΄ μ™Όμͺ½λΆ€ν„° κ°€λ‘œλ‘œ μ •λ ¬λœ 것과 λ‚΄μš©λ§ŒνΌμ˜ 곡간을 μ°¨μ§€ν•˜λŠ” 것을 확인할 수 μžˆλ‹€.

이처럼 Flexbox 속성듀을 ν™œμš©ν•˜λ©΄ μš”μ†Œμ˜ μ •λ ¬, μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 섀정해쀄 수 μžˆλ‹€.


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

  • Flexbox 속성을 μ‚¬μš©ν•  λ•Œ 속성을 μ§€μ •ν•΄μ£ΌλŠ” μœ„μΉ˜κ°€ μ€‘μš”.
    • Flexbox 속성 μ€‘μ—μ„œλŠ” λΆ€λͺ¨ μš”μ†Œμ— μ μš©ν•΄μ•Όν•˜λŠ” 속성듀, μžμ‹ μš”μ†Œμ— μ μš©ν•΄μ•Όν•˜λŠ” 속성듀이 μžˆλ‹€.
    • μ μ ˆν•œ μœ„μΉ˜μ— 속성을 지정해주지 μ•ŠμœΌλ©΄ μš”μ†Œλ“€μ΄ μ›ν•˜λŠ”λŒ€λ‘œ μ •λ ¬λ˜μ§€ μ•ŠλŠ”λ‹€.

βœ…flex-direction : μ •λ ¬ μΆ• μ •ν•˜κΈ°

  • λΆ€λͺ¨ μš”μ†Œμ— μ„€μ •ν•΄μ£ΌλŠ” μ†μ„±μœΌλ‘œ, μžμ‹ μš”μ†Œλ“€μ„ μ •λ ¬ν•  μ •λ ¬ 좕을 μ •ν•©λ‹ˆλ‹€. 아무 섀정도 해주지 μ•ŠμœΌλ©΄ 기본적으둜 κ°€λ‘œ μ •λ ¬.

βœ…flex-wrap : 쀄 λ°”κΏˆ μ„€μ •ν•˜κΈ°

  • ν•˜μœ„ μš”μ†Œλ“€μ˜ 크기가 μƒμœ„ μš”μ†Œμ˜ 크기λ₯Ό λ„˜μœΌλ©΄ μžλ™ 쀄 λ°”κΏˆμ„ ν•  것인지 μ •ν•©λ‹ˆλ‹€. μ„€μ •ν•΄ 주지 μ•ŠμœΌλ©΄ 쀄 λ°”κΏˆμ„ ν•˜μ§€ μ•ŠλŠ”λ‹€.

βœ…justify-content : μΆ• μˆ˜ν‰ λ°©ν–₯ μ •λ ¬

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

↓ flex-direction : row 인 경우 ↔


↓ flex-direction : column 인 경우 ↕️


βœ…align-items : μΆ• 수직 λ°©ν–₯ μ •λ ¬

  • μžμ‹ μš”μ†Œλ“€μ„ μΆ•μ˜ 수직 λ°©ν–₯으둜 μ–΄λ–»κ²Œ μ •λ ¬ν•  것인지 μ •ν•œλ‹€.
  • μš”μ†Œλ“€μ΄ κ°€λ‘œλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€λ©΄ μ„Έλ‘œ λ°©ν–₯으둠 μ–΄λ–»κ²Œ μ •λ ¬ν•  것인지, μ„Έλ‘œλ‘œ μ •λ ¬λ˜μ–΄ μžˆλ‹€λ©΄ κ°€λ‘œ λ°©ν–₯으둠 μ–΄λ–»κ²Œ μ •λ ¬ν•  것인지 μ •ν•˜λŠ” 속성.

↓ flex-direction : row 인 경우 ↔


↓ flex-direction : column 인 경우 ↕️



⚑Flexbox λ”°λΌν•˜κΈ° - 2


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

  • Flexbox 속성듀을 ν™œμš©ν•˜λ©΄ μš”μ†Œμ˜ μ •λ ¬, μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” 곡간을 섀정해쀄 수 μžˆλ‹€.
  • λΆ€λͺ¨ μš”μ†Œμ— μ μš©ν•΄μ•Ό ν•˜λŠ” 속성듀이 μžμ‹ μš”μ†Œλ“€μ˜ μ •λ ¬κ³Ό 관련이 μžˆμ—ˆλ‹€λ©΄, μžμ‹ μš”μ†Œμ—κ²Œ μ μš©ν•΄μ•Ό ν•˜λŠ” 속성인 flexλŠ” μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” 곡간과 관련이 μžˆλ‹€.

βœ…flex μ†μ„±μ˜ κ°’

flex:   <grow(팽창 μ§€μˆ˜)>    <shrink(μˆ˜μΆ• μ§€μˆ˜)>    <basis(κΈ°λ³Έ 크기)>
  • grow(팽창 μ§€μˆ˜) : μš”μ†Œμ˜ 크기가 λŠ˜μ–΄λ‚˜μ•Ό ν•  λ•Œ μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚  것인지
  • shrink(μˆ˜μΆ• μ§€μˆ˜) : μš”μ†Œμ˜ 크기가 쀄어듀어야 ν•  λ•Œ μ–Όλ§ˆλ‚˜ 쀄어듀 것인지
  • basis(κΈ°λ³Έ 크기) : λŠ˜μ–΄λ‚˜κ³  μ€„μ–΄λ“œλŠ” 것과 상관없이 μš”μ†Œμ˜ κΈ°λ³Έ ν¬κΈ°λŠ” μ–Όλ§ˆμΈμ§€
//μžμ‹ μš”μ†Œμ— flex 속성을 λ”°λ‘œ 섀정해주지 μ•ŠμœΌλ©΄ λ‹€μŒκ³Ό 같은 기본값이 적용

flex: 0 1 auto;


//κΌ­ flex 속성 μ•ˆμ— μ„Έ 가지 값을 ν•œ λ²ˆμ— 섀정해쀄 ν•„μš” 없이, 각 값을 λ”°λ‘œ 지정해쀄 μˆ˜λ„ μžˆλ‹€.

flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;

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

↑ βœ…boxλ₯Ό 3개λ₯Ό λ§Œλ“€μ–΄ 놓고 3가지 값을 μ„€λͺ…ν•΄λ³΄μž.

1. grow : μžμ‹ λ°•μŠ€λŠ” μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚  수 μžˆμ„κΉŒ?

  • μš”μ†Œμ˜ 크기가 λŠ˜μ–΄λ‚˜μ•Ό ν•  λ•Œ μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚  것인지λ₯Ό 의미.

    flex 속성을 μ„€μ •ν•˜κΈ° μ „, grow의 κΈ°λ³Έ 값인 0은 빈 곡간이 μžˆμ–΄λ„ λŠ˜μ–΄λ‚˜μ§€ μ•ŠμŒμ„ 의미.

    box1만 flex-grow : 1둜 μ„€μ •. flex-grow의 기본값은 0μ΄λ―€λ‘œ λ‚˜λ¨Έμ§€ λ°•μŠ€λŠ” flex-grow : 0인 μƒνƒœ

    box2도 flex-grow : 1둜 μ„€μ •. box3만 flex-grow : 0인 μƒνƒœ

    box3도 flex-grow : 1둜 μ„€μ •. μ„Έ λ°•μŠ€ λͺ¨λ‘ flex-grow : 1인 μƒνƒœ

- βœ…κ° μžμ‹ μš”μ†Œλ“€μ΄ μ–Όλ§ˆλ‚˜ λŠ˜μ–΄λ‚˜μ„œ λ‚¨λŠ” 곡간을 차지할 것인지 λΉ„μœ¨μ„ μ •ν•˜λŠ” 것

  • 첫 번째 μ˜ˆμ‹œμ—μ„œ growλŠ” box1 : box2 : box3 = 1 : 0 : 0 μ΄λ―€λ‘œ box1이 λͺ¨λ“  곡간을 μ°¨μ§€ν•˜κ³ ,
  • 두 번째 μ˜ˆμ‹œμ—μ„œ growλŠ” box1 : box2 : box3 = 1 : 1 : 0 μ΄λ―€λ‘œ box1κ³Ό box2κ°€ 1:1둜 곡간을 λ‚˜λˆ  가지고,
  • μ„Έ 번째 μ˜ˆμ‹œμ—μ„œ growλŠ” box1 : box2 : box3 = 1 : 1 : 1 μ΄λ―€λ‘œ μ„Έ λ°•μŠ€κ°€ 1:1:1둜 곡간을 λ‚˜λˆ  가진 κ²ƒμž…λ‹ˆλ‹€.

2. shrink : μžμ‹ λ°•μŠ€λŠ” μ–Όλ§ˆλ‚˜ 쀄어듀 수 μžˆμ„κΉŒ?

  • grow와 λ°˜λŒ€λ‘œ, μ„€μ •ν•œ λΉ„μœ¨λ§ŒνΌ λ°•μŠ€ 크기가 μž‘μ•„μ§„λ‹€.
  • flex-grow 속성과 flex-shrink 속성을 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 일은 μΆ”μ²œν•˜μ§€ μ•ŠλŠ”λ‹€.
    • λΉ„μœ¨λ‘œ λ ˆμ΄μ•„μ›ƒμ„ 지정할 경우 flex-grow 속성 λ˜λŠ” flex: <grow> 1 auto와 같이 grow 속성에 λ³€ν™”λ₯Ό μ£ΌλŠ” 방식을 ꢌμž₯.
    • flex-shrink 속성은 widthλ‚˜ 이후 μ„€λͺ…ν•  flex-basis속성에 λ”°λ₯Έ λΉ„μœ¨μ΄λ―€λ‘œ μ‹€μ œ 크기λ₯Ό μ˜ˆμΈ‘ν•˜κΈ°κ°€ μ–΄λ ΅κΈ° λ•Œλ¬Έ.
  • flex-grow μ†μ„±μœΌλ‘œ λΉ„μœ¨μ„ λ³€κ²½ν•˜λŠ” 경우, flex-shrink 속성은 기본값인 1둜 두어도 무방.


3. basis : 이 λ°•μŠ€μ˜ κΈ°λ³Έ ν¬κΈ°λŠ” μ–Όλ§ˆμΌκΉŒ?

  • μžμ‹ λ°•μŠ€κ°€ flex-growλ‚˜ flex-shrink에 μ˜ν•΄ λŠ˜μ–΄λ‚˜κ±°λ‚˜ 쀄어듀기 전에 κ°€μ§€λŠ” κΈ°λ³Έ 크기.
  • flex-growκ°€ 0일 λ•Œ, basis 크기λ₯Ό μ§€μ •ν•˜λ©΄ κ·Έ ν¬κΈ°λŠ” μœ μ§€λœλ‹€.


πŸ‘©β€πŸ’» 마무리

첫 νŽ˜μ–΄ν”„λ‘œκ·Έλž¨μœΌλ‘œ μ œμž‘ν•œ [HTML/CSS] ν™œμš© (계산기 λͺ©μ—…)
쒋은 νŽ˜μ–΄λΆ„μ„ λ§Œλ‚˜μ„œ 결과물이 λ„ˆλ¬΄ λ§ˆμŒμ— λ“ λ‹€!😊

profile
Drop the Bit!
post-custom-banner

0개의 λŒ“κΈ€