[TIL] CSS : layout

AcidΒ·2021λ…„ 9μ›” 1일
1

πŸ“‘ HTML/CSS

λͺ©λ‘ 보기
2/2
post-thumbnail

CSS λ ˆμ΄μ•„μ›ƒμ— λŒ€ν•œ λ‚΄μš©μœΌλ‘œ Box-model, display , flex, position등에 λŒ€ν•œ λ‚΄μš©μ„ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 😊

CSS layout 🧩

λ ˆμ΄μ•„μ›ƒ(layout)은 좜판, 건좕 λ“±μ˜ λΆ„μ•Όμ—μ„œ μ‹œκ°μ  νš¨κ³Όλ‚˜ μ‚¬μš© λͺ©μ μ„ κ³ λ €ν•˜μ—¬ κ΅¬μ„±Β·λ°°μ—΄ν•˜λŠ” λ“±μ˜ μΌμ΄λΌλŠ” 사전적 μ •μ˜λ₯Ό κ°–λŠ”λ°, 이와 μœ μ‚¬ν•˜κ²Œ CSS의 λ ˆμ΄μ•„μ›ƒμ€ μ•Œλ§žμ€ μœ„μΉ˜μ— μš”μ†Œλ“€μ„ λ°°μ—΄ν•˜λŠ” 것이닀. λ ˆμ΄μ•„μ›ƒμ΄ λ³„λ„λ‘œ μ§€μ •λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œλŠ” normal flow(일반 λŒ€μ—΄)둜 λ°°μΉ˜λœλ‹€.

πŸ’‘ normal flow(일반 λŒ€μ—΄)

normal flow(일반 λŒ€μ—΄)λž€ CSSλ₯Ό μ μš©ν•˜μ§€ μ•Šμ„ 경우, μ›ΉνŽ˜μ΄μ§€ μš”μ†Œκ°€ λ°°μΉ˜λ˜λŠ” 방식을 μ˜λ―Έν•œλ‹€. 보닀 λ‚˜μ€ μ›ΉνŽ˜μ΄μ§€λŠ” normal flow μƒνƒœμ—μ„œ μ½λŠ” 것이 κ°€λŠ₯ν•˜κ³ , κ²¬κ³ ν•˜κ³  ꡬ쑰화 된 λ¬Έμ„œλ‘œ μ‹œμž‘ν•˜λŠ” 것이닀.

normal flow μƒνƒœμ—μ„œ 읽기 κ°€λŠ₯ν•˜λ‹€λŠ” 점은 κΈ°λŠ₯이 μ œν•œλœ λΈŒλΌμš°μ €μ—μ„œ μ‚¬μš©μ— 무리가 μ—†κ±°λ‚˜, νŽ˜μ΄μ§€ μ½˜ν…μΈ λ₯Ό μ†Œλ¦¬ λ‚΄ μ½λŠ” 슀크린 리더와 같은 κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” μœ μ €λ“€μ—κ²Œ 이λ₯Ό κ°€λŠ₯μΌ€ ν•˜λŠ”(readable) μ½˜ν…μΈ λ₯Ό λ§Œλ“€ 수 μžˆλ‹€λŠ” 것이닀.

그렇기에 λ ˆμ΄μ•„μ›ƒ 변경에 μžˆμ–΄μ„œλ„ μ΅œλŒ€ν•œ normal flow에 맞좰 ν˜‘λ ₯ 함이 지ν–₯λœλ‹€.


μ΄λŸ¬ν•œ λ ˆμ΄μ•„μ›ƒμ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ 기본적으둜 각 μš”μ†Œμ— λŒ€ν•œ μ˜μ—­μ΄ μ–΄λ–»κ²Œ μ„€μ •λ˜λŠ” 지에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

Box model πŸ“¦

Box model(λ°•μŠ€ λͺ¨λΈ)은 λ¬Έμ„œ λ ˆμ΄μ•„μ›ƒ κ³„μ‚°μ—μ„œ 각각의 μš”μ†Œλ₯Ό μ‚¬κ°ν˜• λ°•μŠ€λ‘œ ν‘œν˜„ν•˜λŠ” 것이닀.

λ°•μŠ€ λͺ¨λΈμ€ 개발자 도ꡬλ₯Ό 톡해 μœ„μ™€ 같이 확인할 수 있고, μ•ˆμͺ½μ—μ„œ λΆ€ν„°, μ½˜ν…μΈ (contents), νŒ¨λ”©(padding), 보더(border), λ§ˆμ§„(margin)에 λŒ€ν•œ μ˜μ—­μ„ μ •μ˜ν•˜κ³  μžˆλ‹€. 각 μ˜μ—­μ„ κ°„λ‹¨ν•˜κ²Œ μ •μ˜ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

  • μ½˜ν…μΈ  μ˜μ—­(content area) :
    κΈ€μ΄λ‚˜ 이미지, λΉ„λ””μ˜€ λ“± μ‹€μ œ λ‚΄μš©μ„ ν¬ν•¨ν•˜λŠ” μ˜μ—­.
  • μ•ˆμͺ½ μ—¬λ°± μ˜μ—­(padding area) : μ½˜ν…μΈ  μ˜μ—­κ³Ό ν…Œλ‘λ¦¬ μ˜μ—­ μ‚¬μ΄μ˜ λ‚΄λΆ€ μ˜μ—­μœΌλ‘œ, μ½˜ν…μΈ  μ˜μ—­μ„ μš”μ†Œ μ•ˆμͺ½ μ—¬λ°±κΉŒμ§€ ν¬ν•¨ν•˜λŠ” 크기둜 ν™•μž₯.
  • ν…Œλ‘λ¦¬ μ˜μ—­(border area) : μ•ˆμͺ½ μ—¬λ°± μ˜μ—­κ³Ό λ°”κΉ₯ μ—¬λ°± μ˜μ—­μ„ κ΅¬λΆ„ν•˜λŠ” μ˜μ—­
  • λ°”κΉ₯ μ—¬λ°± μ˜μ—­(margin area) : ν…Œλ‘λ¦¬ μ˜μ—­ λ°–μ˜ μ˜μ—­


μ΄λ ‡κ²Œ λ°•μŠ€ λͺ¨λΈμ„ 톡해 각 μš”μ†Œκ°€ νŠΉμ • μœ„μΉ˜μ—μ„œ μ–Όλ§ˆ 만큼의 크기λ₯Ό 차지할 수 μžˆλŠ” 지λ₯Ό 지정할 수 μžˆλ‹€.


이제 λ°•μŠ€ λͺ¨λΈμ— λŒ€ν•œ 지식을 λ°”νƒ•μœΌλ‘œ HTML νƒœκ·Έμ˜ display 에 λŒ€ν•œ λ‚΄μš©μ„ block κ³Ό inline λ“±μ˜ κ°œλ…κ³Ό ν•¨κ»˜ μ•Œμ•„λ³΄μž.

display πŸ–₯️

HTML μž‘μ„± 이후, μœ„ 사진 같이 μš”μ†Œ 이동을 μœ„ν•΄ display 값을 μ„€μ •ν•  ν•„μš”κ°€ μžˆλ‹€. CSS의 displayλž€ μš”μ†Œκ°€ μ–΄λ–»κ²Œ ν‘œμ‹œλ  지에 λŒ€ν•΄ μ„ νƒν•˜λŠ” 속성이닀. 이λ₯Ό 톡해 μ•žμ—μ„œ μ–ΈκΈ‰ν•œ normal flow μ†μ—μ„œ μš”μ†Œκ°€ μœ„μΉ˜ν•˜λŠ” 방식을 λ³€κ²½ν•  수 μžˆλ‹€.

display λŠ” λ‹Ήμ—°νžˆλ„ 속성 값에 따라 κ·Έ μš”μ†Œμ˜ ν‘œμ‹œ ν˜•μ‹μ„ κ²°μ •ν•˜κΈ°μ—, μ΄μ–΄μ„œ ν•΄λ‹Ή 속성 κ°’ 쀑 λŒ€ν‘œμ μΈ 값에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

block


block 은 ν•΄λ‹Ή μš”μ†Œλ₯Ό 블둝 μš”μ†Œλ‘œ μ§€μ •ν•˜λ©°, 블둝 μš”μ†Œμ— λŒ€ν•œ λ‚΄μš©μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • κΈ°λ³Έ κ°’μœΌλ‘œ κ°€λ‘œ μ˜μ—­μ„ μ „λΆ€ μ°¨μ§€ν•˜λ©°, λ‹€λ₯Έ μš”μ†Œλ“€κ³Ό ꡬ뢄될 λ•Œ μ€„λ°”κΏˆμ΄ λ°œμƒν•œλ‹€.
  • 크기 λ³€κ²½(width, height, margin, padding)이 κ°€λŠ₯ν•˜λ‹€.
  • <div> , <p> , <h1> λ“±μ˜ νƒœκ·Έκ°€ 이에 ν•΄λ‹Ήν•œλ‹€.

div {
    background-color: red; /* μ˜μ—­ ꡬ뢄을 μœ„ν•¨ */
    width: 300px;
    height: 300px;
    margin: 100px;
    padding: 30px;
}


μž„μ˜μ˜ <div> νƒœκ·Έμ— CSSλ₯Ό μ μš©ν•œ μ˜ˆμ‹œμ΄λ‹€. μ˜ˆμ‹œμ™€ 같이 width κ°’ λΆ€ν„° μ‹œμž‘ν•΄μ„œ padding κ°’ κΉŒμ§€ μ›ν™œν•˜κ²Œ 적용된 λͺ¨μŠ΅μ΄λ‹€.

inline


inline 값은 ν•΄λ‹Ή μš”μ†Œλ₯Ό 인라인 μš”μ†Œλ‘œ μ§€μ •ν•˜λ©°, 인라인 μš”μ†Œμ— λŒ€ν•œ λ‚΄μš©μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • κΈ°λ³Έ κ°’μœΌλ‘œ λ‚΄λΆ€ μ½˜ν…μΈ μ˜ μ˜μ—­λ§Œμ„ μ°¨μ§€ν•œλ‹€.
  • μ€„λ°”κΏˆμ΄ 이루어지지 μ•Šκ³ , μ΄μ–΄μ„œ μž‘μ„±λœλ‹€.
  • 크기 변경이 λΆˆκ°€λŠ₯ν•˜λ‹€. (width 와 height λŠ” 미적용. padding 은 μ „ λ°©ν–₯ 적용되고, margin 은 right , left 만)


body {
    padding-top: 30px;
}

span {
    background-color: red;
    width: 300px;
    height: 300px;
    margin: 100px;
    padding: 30px;
}


μž„μ˜μ˜ <span> νƒœκ·Έμ— CSSλ₯Ό μ μš©ν•œ μ˜ˆμ‹œλ‹€. λͺ¨λ“  μš”μ†ŒλŠ” μœ„μ—μ„œ μ„€λͺ…ν•œ 바와 같이 μ μš©λ˜μ§€λ§Œ, padding 의 경우 top , bottom 은 ν•΄λ‹Ή μ˜μ—­μ„ μ •μ˜ν•˜μ§€λ§Œ μ°¨μ§€ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.

πŸ’‘ inline 의 margin 의 νŠΉμ§•

inline 의 margin-top κ³Ό margin-bottom 의 경우 ν•΄λ‹Ή μ˜μ—­μ„ μ •μ˜ν•˜μ§€λ§Œ μ°¨μ§€ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” ν‘œν˜„μ„ μ‚¬μš©ν–ˆλŠ”λ°, μ΄λŠ” μœ„ μ½”λ“œμ—μ„œ body νƒœκ·Έμ— λ“€μ–΄κ°„ CSS μš”μ†Œλ₯Ό μ œκ±°ν•˜λ©΄ μ•Œ 수 μžˆλ‹€.

μœ„ μ˜ˆμ‹œμ˜ κ²½μš°μ—” body 에 padding-top 을 톡해 μ΅œμƒλ‹¨μ— 여백을 μ€€ μƒνƒœμΈλ°, ν•΄λ‹Ή 여백이 사라지면 span μš”μ†Œμ˜ μœ— μͺ½ νŒ¨λ”© 뢀뢄이 사라진 κ²ƒμœΌλ‘œ 보인닀.

μ΄λŠ” ν•΄λ‹Ή μ˜μ—­μ„ μ •μ˜λŠ” ν•˜μ§€λ§Œ, λ‹€λ₯Έ μš”μ†Œλ₯Ό 밀어내지 μ•ŠλŠ”λ‹€λŠ” 의미둜 μ°¨μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μ •μ˜ν•˜μ˜€λ‹€.

λ°•μŠ€ λͺ¨λΈμ— λŒ€ν•œ MDN λ‚΄μš©μ„ 보면, λ°•μŠ€μ˜ μ™ΈλΆ€ λ””μŠ€ν”Œλ ˆμ΄ μœ ν˜•μ΄ inline 일 경우λ₯Ό μ„€λͺ…ν•˜λŠ” λΆ€λΆ„μ—μ„œ 이처럼 μ •μ˜λ˜μ–΄ μžˆλ‹€.

"νŒ¨λ”©κ³Ό μ—¬λ°±, ν…Œλ‘λ¦¬λŠ” λ‹€λ₯Έ 인라인 λ°•μŠ€λ“€μ΄ λ‹€λ₯Έ λ°•μŠ€λ‘œλΆ€ν„° λ©€μ–΄μ§€μ§€κ²Œ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€."

적용 κ²°κ³Ό λͺ¨λ“  λ°©ν–₯의 νŒ¨λ”©μ΄ μ•„λ‹Œ, padding-right 와 padding-left 의 κ²½μš°μ—” ν•΄λ‹Ή μ˜μ—­μ„ μ°¨μ§€ν•˜λŠ” κ²ƒμœΌλ‘œ ν™•μΈλ˜μ—ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œμ˜ κ²½μš°μ—”, span 내뢀에 span νƒœκ·Έλ₯Ό μ‚½μž…ν•˜μ—¬ λ³„λ„μ˜ 클래슀λ₯Ό λΆ€μ—¬ν•œ λ’€, ν•΄λ‹Ή 클래슀 μš”μ†Œμ—λ§Œ μœ„μ™€ 같은 CSS μš”μ†Œλ₯Ό μΆ”κ°€ν–ˆλ‹€.

...
<body>
    <span><span class = 'span'>aaaaaaaa</span>
      aaaaaaaa</br>aaaaaaaa</span>
</body>
...

inline-block


inline-block은 inline κ³Ό block 의 쀑간 ν˜•νƒœμ΄λ©° λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ κ°–λŠ”λ‹€.

  • κΈ°λ³Έ κ°’μœΌλ‘œ λ‚΄λΆ€ μ½˜ν…μΈ μ˜ μ˜μ—­λ§Œμ„ μ°¨μ§€ν•œλ‹€.
  • μ€„λ°”κΏˆμ΄ 이루어진닀.
  • 크기 λ³€κ²½(width, height, margin, padding)이 κ°€λŠ₯ν•˜λ‹€.

.span {
    display: inline-block;
    background-color: red;
    width: 300px;
    height: 300px;
    padding: 30px;
}


μœ„ inline 의 margin 에 λŒ€ν•œ λ‚΄μš©μ—μ„œ λ‚˜μ™”λ˜ μ˜ˆμ‹œμ—μ„œ display 값을 inline-block 으둜 λ³€κ²½ν•œ μ˜ˆμ‹œλ‹€. λ³΄μ΄λŠ” 바와 같이 ν΄λž˜μŠ€κ°€ μ§€μ •λœ μš”μ†Œμ— λŒ€ν•΄μ„œ width 와 height 에 λŒ€ν•œ 뢀뢄이 λͺ…ν™•νžˆ μ •μ˜λ˜μ–΄ 있고, padding 에 λŒ€ν•΄μ„œλ„ λͺ…ν™•νžˆ 적용된 것을 μ•Œ 수 μžˆλ‹€.

이처럼 크기 λ³€κ²½μ˜ μ˜μ—­μ—μ„œ block κ³Ό 같은 κΈ°λŠ₯을 κ°–λŠ”λ‹€.

flex


flex λŠ” 1차원 μƒμ˜ μš”μ†Œλ“€μ„ λ°°μΉ˜ν•  λ•Œ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 속성 값이닀. 이λ₯Ό λ°°μ—΄ν•˜κ³ μž ν•˜λŠ” μš”μ†Œλ“€μ˜ λΆ€λͺ¨(container)μš”μ†Œμ— μ μš©ν•˜λ©΄ λ™μ‹œμ— λͺ¨λ“  직계 μžμ‹λ“€μ΄ flex ν•­λͺ©μ΄ λœλ‹€. 이후 μ—¬λŸ¬ 속성 값을 톡해, ν•΄λ‹Ή μš”μ†Œλ“€μ„ 자유둭게 λ°°μ—΄ν•  수 μžˆλ‹€λŠ” 점이 νŽΈλ¦¬ν•˜λ‹€λŠ” 것이닀.

μ΄μ–΄μ„œ display : flex 와 ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 속성과 값듀에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

justify-content

κ°€λ‘œμ„  μƒμ˜ 정렬을 μ •μ˜

  • flex-start : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ μ™Όμͺ½μœΌλ‘œ μ •λ ¬
  • flex-end : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ 였λ₯Έμͺ½μœΌλ‘œ μ •λ ¬
  • center : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ κ°€λ‘œμ„  상 κ°€μš΄λ°λ‘œ μ •λ ¬
  • space-between : μš”μ†Œλ“€ 사이에 λ™μΌν•œ 간격
  • space-around : μš”μ†Œλ“€ μ£Όμœ„μ— λ™μΌν•œ 간격

align-items

μ„Έλ‘œμ„  μƒμ˜ 정렬을 μ •μ˜

  • flex-start : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ μ΅œμƒλ‹¨μœΌλ‘œ μ •λ ¬
  • flex-end : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ μ΅œν•˜λ‹¨μœΌλ‘œ μ •λ ¬
  • center : μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ μ„Έλ‘œμ„  상 κ°€μš΄λ°λ‘œ μ •λ ¬
  • baseline: μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ˜ μ‹œμž‘ μœ„μΉ˜μ— μ •λ ¬
  • stretch: μš”μ†Œλ“€μ„ μ»¨ν…Œμ΄λ„ˆμ— λ§žλ„λ‘ 늘림

flex-direction

μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ μš”μ†Œλ“€μ˜ μ •λ ¬ λ°©ν–₯을 μ •μ˜

  • row: μš”μ†Œλ“€μ„ ν…μŠ€νŠΈμ˜ λ°©ν–₯κ³Ό λ™μΌν•˜κ²Œ μ •λ ¬
  • row-reverse: μš”μ†Œλ“€μ„ ν…μŠ€νŠΈμ˜ λ°˜λŒ€ λ°©ν–₯으둜 μ •λ ¬
  • column: μš”μ†Œλ“€μ„ μœ„μ—μ„œ μ•„λž˜λ‘œ μ •λ ¬
  • column-reverse: μš”μ†Œλ“€μ„ μ•„λž˜μ—μ„œ μœ„λ‘œ μ •λ ¬

order

μ»¨ν…Œμ΄λ„ˆ 각 μš”μ†Œμ˜ μˆœμ„œλ₯Ό λ°”κΏ€ 수 있음

  • κΈ°λ³Έ 값은 0이며, μ–‘μˆ˜λ‚˜ 음수둜 λ³€κ²½ κ°€λŠ₯
  • ν•΄λ‹Ή μœ„μΉ˜ κΈ°μ€€μœΌλ‘œ μ–Όλ§ˆλ‚˜ 움직일지λ₯Ό μ •μ˜

flex-wrap & flex-flow

flex-wrap 은 μš”μ†Œμ˜ μ •λ ¬μ—μ„œ 쀄 κ΅¬λΆ„μ˜ 유무λ₯Ό μ •μ˜ν•˜κ³ , flex-flow λŠ” flex-wrap κ³Ό flex-direction 을 합쳐 두 값을 λ™μ‹œμ— λŒ€μž…(flex-flow : [direction] [wrap])ν•œλ‹€.

  • nowrap: λͺ¨λ“  μš”μ†Œλ“€μ„ ν•œ 쀄에 μ •λ ¬
  • wrap: μš”μ†Œλ“€μ„ μ—¬λŸ¬ 쀄에 걸쳐 μ •λ ¬
  • wrap-reverse: μš”μ†Œλ“€μ„ μ—¬λŸ¬ 쀄에 걸쳐 λ°˜λŒ€λ‘œ μ •λ ¬(쀄 μ‹œμž‘ 기쀀이 λ°”λ€œ)

align-content

μ—¬λŸ¬ 쀄 μ‚¬μ΄μ˜ 간격을 지정

  • flex-start: μ—¬λŸ¬ 쀄듀을 μ»¨ν…Œμ΄λ„ˆμ˜ κΌ­λŒ€κΈ°μ— μ •λ ¬
  • flex-end: μ—¬λŸ¬ 쀄듀을 μ»¨ν…Œμ΄λ„ˆμ˜ λ°”λ‹₯에 μ •λ ¬
  • center: μ—¬λŸ¬ 쀄듀을 μ„Έλ‘œμ„  μƒμ˜ κ°€μš΄λ°μ— μ •λ ¬
  • space-between: μ—¬λŸ¬ 쀄듀 사이에 λ™μΌν•œ 간격을 λ‘ 
  • space-around: μ—¬λŸ¬ 쀄듀 μ£Όμœ„μ— λ™μΌν•œ 간격을 λ‘ 
  • stretch: μ—¬λŸ¬ 쀄듀을 μ»¨ν…Œμ΄λ„ˆμ— λ§žλ„λ‘ 늘림

grid


flex κ°€ 1차원 λ ˆμ΄μ•„μ›ƒμ„ μœ„ν•œ 것이라면, grid λŠ” 2차원 λ ˆμ΄μ•„μ›ƒμ„ μœ„ν•œ 것이닀. ν–‰κ³Ό 열을 κΈ°μ€€μœΌλ‘œ μš”μ†Œλ“€μ„ λ°°μ—΄ν•˜λŠ” 것이닀.

grid λŠ” λ‹€μŒκ³Ό 같은 속성듀을 μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ“€μ„ λ°°μ—΄ν•  수 μžˆλ‹€.

  • grid-template-columns : μ—΄μ˜ κ°―μˆ˜μ™€ 크기λ₯Ό μ •μ˜
  • grid-template-rows : ν–‰μ˜ κ°―μˆ˜μ™€ 크기λ₯Ό μ •μ˜
  • grid-gap : μš”μ†Œ κ°„ 간격을 μ •μ˜

<div class="wrapper">
    <div class="box1">ν•˜λ‚˜</div>
    <div class="box2">λ‘˜</div>
    <div class="box3">μ…‹</div>
    <div class="box4">λ„·</div>
    <div class="box5">λ‹€μ„―</div>
    <div class="box6">μ—¬μ„―</div>
</div>
.wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 100px 100px;
    grid-gap: 10px;
}


λ˜ν•œ, μžμ‹ μš”μ†Œλ“€μ— λŒ€ν•΄ CSS 값을 λΆ€μ—¬ν•˜μ—¬ 각 μš”μ†Œμ˜ 면적에 λŒ€ν•΄ μ •μ˜ν•  μˆ˜λ„ μžˆλ‹€.

<div class="wrapper">
    <div class="box1">ν•˜λ‚˜</div>
    <div class="box2">λ‘˜</div>
    <div class="box3">μ…‹</div>
</div>
.wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 100px 100px;
    grid-gap: 10px;
}

.box1 {
    grid-column: 2 / 4;
    grid-row: 1;
}

.box2 {
    grid-column: 1;
    grid-row: 1 / 3;
}

.box3 {
    grid-row: 2;
    grid-column: 3;
}


μœ„μ™€ 같이 grid-row 와 grid-column 을 톡해, 각 μš”μ†Œκ°€ μ°¨μ§€ν•˜λŠ” μ˜μ—­μ„ μ •μ˜ν•˜μ—¬ grid λ‚΄ λΉ„μœ¨μ„ μ‘°μ •ν•  수 μžˆλ‹€.


position 🚢

position 은 λ¬Έμ„œ 상에 μš”μ†Œλ₯Ό λ°°μΉ˜ν•˜λŠ” 방법을 μ˜λ―Έν•œλ‹€. position 속성 κ°’μ˜ 기쀀이 λ˜λŠ” μ€‘μš”ν•œ μš”μ†Œ 쀑 ν•˜λ‚˜λŠ” λ¬Έμ„œμ˜ 흐름을 λ”°λ₯΄λŠ” 지에 λŒ€ν•œ 여뢀일 것이닀. ν•΄λ‹Ή 뢀뢄에 μ§‘μ€‘ν•˜λ©° position 속성 값에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

static


static 은 position 의 κΈ°λ³Έ κ°’μœΌλ‘œ, μš”μ†Œλ₯Ό 일반적인 λ¬Έμ„œ 흐름에 따라 λ°°μΉ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. static 의 κ²½μš°μ—λŠ” top, right, bottom, left, z-index μ†μ„±λ“€μ˜ 영ν–₯을 받지 μ•ŠλŠ”λ‹€.

μœ„ 경우 top 속성에 값을 λŒ€μž…ν–ˆμ§€λ§Œ, 결과둜 λ°˜μ˜λ˜μ§€ μ•Šμ€ λͺ¨μŠ΅μ΄λ‹€.

relative


relative λŠ” μœ„μ™€ 같이 λ¬Έμ„œμ˜ 흐름은 λ”°λ₯΄μ§€λ§Œ, μžμ‹ μ˜ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ top, right, bottom, left, z-index 속성듀에 따라 μš”μ†Œμ˜ μœ„μΉ˜κ°€ 변경될 수 μžˆλ‹€.

static κ³Ό 같은 top 값을 ν• λ‹Ήν–ˆμ§€λ§Œ, relative 의 경우 μš”μ†Œμ˜ μœ„μΉ˜κ°€ λ³€κ²½λ˜μ—ˆλ‹€. 여타 값이 주어지지 μ•ŠμœΌλ©΄ relative λ˜ν•œ static κ³Ό 같은 κΈ°λŠ₯을 ν•œλ‹€.

그리고 relative 의 κ²½μš°μ— μžμ‹ μ˜ μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ ν•˜κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ μš”μ†Œμ˜ μœ„μΉ˜μ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€λŠ” 점이 μ€‘μš”ν•˜λ‹€.

μœ„μ™€ 같이 body 에 μš”μ†Œλ₯Ό 좔가해도 λ¬Έμ„œμ˜ 흐름에 따라 정해진 μžμ‹ μ˜ μœ„μΉ˜μ—μ„œλ§Œ 움직이기 λ•Œλ¬Έμ— λ‹€λ₯Έ μš”μ†Œμ˜ μœ„μΉ˜μ— 영ν–₯을 주지 μ•ŠλŠ”λ‹€. λ˜ν•œ, 그렇기에 μš”μ†Œκ°€ κ²ΉμΉ  수 μžˆλ‹€λŠ” 점을 μœ μ˜ν•΄μ•Ό ν•œλ‹€. μœ„ κ²½μš°μ—” top κ°’μœΌλ‘œ λ§ˆμ΄λ„ˆμŠ€ 값을 λŒ€μž…ν•œλ‹€λ©΄ μš”μ†Œκ°€ κ²ΉμΉ  수 μžˆλ‹€.


absolute


absolute λŠ” 일반적인 λ¬Έμ„œ 흐름을 λ”°λ₯΄μ§€ μ•Šκ³  μ œμ™Έλœλ‹€. 그리고 κ°€μž₯ κ°€κΉŒμš΄ 쑰상 μš”μ†Œμ— λŒ€ν•΄ μƒλŒ€μ μœΌλ‘œ λ°°μΉ˜ν•œλ‹€.

μœ„ 경우 κ°€μž₯ κ°€κΉŒμš΄ 쑰상 μš”μ†ŒμΈ first div λ₯Ό κΈ°μ€€μœΌλ‘œ absolute div κ°€ top : 100px 의 μœ„μΉ˜ 함을 μ•Œ 수 μžˆλ‹€.

μœ„ μ˜ˆμ‹œμ—μ„œ second-div κ°€ 사라져도 absolute 의 μœ„μΉ˜μ—λŠ” 변함이 μ—†μ§€λ§Œ, first div κ°€ μ‚¬λΌμ§ˆ 경우 κ·Έ λ‹€μŒ κ°€κΉŒμš΄ 쑰상 μš”μ†ŒμΈ second-div λ₯Ό κΈ°μ€€μœΌλ‘œ μœ„μΉ˜ν•˜κ²Œ λœλ‹€.

λ§Œμ•½ 쑰상 μš”μ†Œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, body λ₯Ό κΈ°μ€€μœΌλ‘œ μœ„μΉ˜λ₯Ό 움직인닀.

fixed


fixed 도 absolute 와 λ§ˆμ°¬κ°€μ§€λ‘œ λ¬Έμ„œμ˜ νλ¦„μ—μ„œ μ œμ™Έλ˜μ§€λ§Œ, fixed 의 경우 슀크린 뷰포트λ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ μœ„μΉ˜μ—μ„œ 배치되며, 슀크둀 λ˜μ–΄λ„ 움직이지 μ•ŠλŠ”λ‹€.

πŸ’‘ 뷰포트(viewport)

λ””μŠ€ν”Œλ ˆμ΄ μƒμ˜ ν‘œμ‹œ μ˜μ—­μ„ μ˜λ―Έν•˜λ©°, κ°„λ‹¨ν•˜κ²Œ μ›ΉνŽ˜μ΄μ§€κ°€ λΈŒλΌμš°μ € ν™”λ©΄μ—μ„œ μ‹€μ œλ‘œ ν‘œμ‹œλ˜λŠ” μ˜μ—­μ„ μ˜λ―Έν•œλ‹€.

λ·°ν¬νŠΈμ— λŒ€ν•œ 사항은 head νƒœκ·Έμ—μ„œ meta νƒœκ·Έλ₯Ό 톡해 μ„€μ •ν•  수 μžˆλ‹€.

μœ„ μ˜ˆμ‹œλ₯Ό 보면 상단 메뉴에 ν•΄λ‹Ήν•˜λŠ” ν…μŠ€νŠΈ μš”μ†Œλ“€μ΄ 슀크둀이 진행 됨에도 κ³ μ •λ˜μ–΄ μžˆλŠ” 것을 μ•Œ 수 μžˆλ‹€. fixed 값을 μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή μš”μ†Œμ™€ 같이 μš”μ†Œλ₯Ό λ°°μΉ˜ν•  수 μžˆλ‹€.

πŸ”– 좜처

CSS layout : MDN Web Docs : CSS λ ˆμ΄μ•„μ›ƒ μž…λ¬Έμ„œ
CSS box model : MDN Web Docs : μƒμž λͺ¨λΈ
CSS position : MDN Web Docs : position
CSS Position : Suyeon Bakλ‹˜ medium : (CSS) CSS Position μ„€λͺ…

profile
μ΄μœ μ— μ§‘μ°©ν•˜λŠ” ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ§€λ§μƒμž…λ‹ˆλ‹€ 🧐

0개의 λŒ“κΈ€