3 minute read

CSS Layout

ref: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout

CSS layout overview

보톡 흐름(normal flow)

  • νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒμ„ λΈŒλΌμš°μ €κ°€ κΈ°λ³Έκ°’μœΌλ‘œ λ°°μΉ˜ν•˜λŠ” 방법
  • μ†ŒμŠ€ μ½”λ“œμ— λ‚˜νƒ€λ‚˜λŠ” μˆœμ„œ κ·ΈλŒ€λ‘œ HTML μš”μ†Œκ°€ ν‘œμ‹œλœλ‹€. μš”μ†Œ 집합이 μƒλŒ€ μš”μ†Œ λ°”λ‘œ μ•„λž˜ λ‚˜νƒ€λ‚˜λŠ” 것을 block μš”μ†ŒλΌκ³  κΈ°μˆ ν•˜κ³ , inline μš”μ†Œμ™€ μƒλ°˜λœλ‹€.
  • CSSμ—μ„œ μš”μ†Œκ°€ λ°°μΉ˜λ˜λŠ” 방식을 λ³€κ²½μ‹œν‚€λŠ” λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.
    • diplay 속성 β€” block, inline, inline-block
      • ref - The box model: https://developer.mozilla.org/ko/docs/Learn/CSS/Building_blocks/The_box_model
    • Floats β€” block μˆ˜μ€€ μš”μ†Œκ°€ μ–΄λ–€ μš”μ†Œμ˜ ν•œ μͺ½ 츑면으둜 λ°€λ €λ‚˜λ„λ‘ ν•  수 μžˆλ‹€.
    • position 속성 β€” λ‹€λ₯Έ μƒμž 내뢀에 λ“€μ–΄κ°€ μƒμžμ˜ μ •ν™•ν•œ μœ„μΉ˜λ₯Ό μ œμ–΄ν•  수 있게 ν•΄μ€€λ‹€.
    • table layout β€” HTML table μŠ€νƒ€μΌ 지정을 μœ„ν•œ κΈ°λŠ₯μ΄κΈ°λŠ” ν•˜λ‚˜ display:tableκ³Ό κ΄€λ ¨λœ 속성을 μ‚¬μš©ν•˜μ—¬ λΉ„ν…Œμ΄λΈ” μš”μ†Œμ—λ„ μ‚¬μš©λ  수 μžˆλ‹€.
    • Multi-column layout
      • μ‹ λ¬Έμ—μ„œ λ³Ό 수 μžˆλŠ” column ν˜•νƒœλ‘œ λ°°μΉ˜λ˜λ„λ‘ λ§Œλ“€ 수 μžˆλ‹€.

display 속성

  • 보톡 흐름(normal flow)μƒμ˜ λͺ¨λ“  μš”μ†ŒλŠ” ν•œ 가지 display 속성값을 κ°–κ³  있으며, ν•΄λ‹Ή μš”μ†Œμ˜ κΈ°λ³Έ λ™μž‘ 방식을 μ§€μ •ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  • μš°λ¦¬λŠ” 이런 κΈ°λ³Έκ°’ λ™μž‘μ„ λ³€κ²½ν•  수 μžˆλ‹€.
  • λ ˆμ΄μ•„μ›ƒμ˜ λͺ©μ μ΄ 무엇인지 λ…Όν•  λ•Œ κ°€μž₯ μ€‘μš”ν•œ 두 가지 속성값은 display: flex 와 display: grid 이닀.

flexbox: Flexible Box Layout

  • flexboxλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ 당신이 μ§„μ—΄ν•˜κΈΈ μ›ν•˜λŠ” λͺ¨λ“  μš”μ†Œμ˜ λΆ€λͺ¨ μš”μ†Œμ— display: flexλ₯Ό μ μš©ν•˜κ³  λ‚˜λ©΄ λͺ¨λ“  직계 μžμ‹μ΄ ν”Œλ ‰μŠ€ ν•­λͺ©μ΄ 되고, column으둜 λ°°μ—΄λœλ‹€.
  • μš”μ†Œλ“€μ΄ flex ν•­λͺ©μ΄ λ˜μ—ˆκ³ , flexboxκ°€ κ·Έλ“€ μš”μ†Œμ— λΆ€μ—¬ν•œ 일뢀 μ΄ˆκΈ°κ°’μ„ μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ΄λ‹€. 그듀이 ν–‰μœΌλ‘œ ν‘œμ‹œλœ μ΄μœ λŠ” flex-direction의 μ΄ˆκΈ°κ°’μ΄ row이기 λ•Œλ¬Έμ΄λ‹€.
  • align-items μ†μ„±μ˜ μ΄ˆκΈ°κ°’ stretch에 따라 heightλŠ” κ°€μž₯ ν‚€κ°€ 큰 μ•„μ΄ν…œμ˜ λ†’μ΄λ‘œ μ—°μž₯λœλ‹€.
  • μ•„λž˜λŠ” flexbox μ˜ˆμ‹œ
.wrapper {
  display: flex;
}
<div class="wrapper">
  <div class="box1">ν•˜λ‚˜</div>
  <div class="box2">λ‘˜</div>
  <div class="box3">μ…‹</div>
</div>
  • μžμ‹ ν•­λͺ©μ„ μ—¬μœ  곡간에 맞좰 μ—°μž₯ν•˜κ±°λ‚˜ μˆ˜μΆ•ν•  수 μžˆλ‹€. flex: 1
.wrapper {
    display: flex;
}

.wrapper > div {
    flex: 1;
}

Grid Layout

  • flex boxλŠ” 일차원 λ ˆμ΄μ•„μ›ƒ, grid layout은 이차원 λ ˆμ΄μ•„μ›ƒ. 즉, ν–‰κ³Ό 열에 ν¬ν•¨λœ μ•„μ΄ν…œμ„ λ°°μ—΄ν•œλ‹€.
  • μ—¬κΈ° 각기 1fr값이 μ§€μ •λœ 3μ—΄κ³Ό 100px이 μ§€μ •λœ 2행을 μ •μ˜ν–ˆλ‹€.
.wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 100px 100px;
    grid-gap: 10px;
}
<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>
  • grid-column, grid-rowλ₯Ό μ‚¬μš©ν•΄μ„œ λͺ…μ‹œμ μœΌλ‘œ μœ„μΉ˜λ₯Ό 지정할 수 μžˆλ‹€.
.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;
}
<div class="wrapper">
  <div class="box1">ν•˜λ‚˜</div>
  <div class="box2">λ‘˜</div>
  <div class="box3">μ…‹</div>
</div>

Floats

Ref: https://developer.mozilla.org/ko/docs/Learn/CSS/CSS_layout/Introduction#floats

μš”μ†Œλ₯Ό float μ‹œν‚€λ©΄ μš”μ†ŒλŠ” μ™Όμͺ½ λ˜λŠ” 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™ν•˜κ³ , 보톡 흐름(normal flow)μ—μ„œ λ²—μ–΄λ‚˜κ²Œ λœλ‹€.

float 속성은 λ„€ 가지 값을 κ°€μ§ˆ 수 μžˆλ‹€.

  • left
  • right
  • none: default
  • inherit

μ•„λž˜ μ˜ˆμ œμ—μ„œλŠ” <div> λ₯Ό μ™Όμͺ½μœΌλ‘œ λ„μš°κ³  였λ₯Έμͺ½μ— margin을 μ£Όμ–΄ ν…μŠ€νŠΈλ₯Ό <div> μš”μ†Œ μžλ¦¬μ—μ„œ λ°€μ–΄ λ‚Έλ‹€. 이것은 ν…μŠ€νŠΈκ°€ κ·Έ μƒμžλ₯Ό κ°μ‹ΈλŠ” 효과λ₯Ό λΆ€μ—¬ν•˜λ©°, μ΄λŠ” ν˜„λŒ€ μ›Ή λ””μžμΈμ—μ„œ μ‚¬μš©λ˜λŠ” Floats에 λŒ€ν•΄ μ•Œμ•„μ•Όν•  λ‚΄μš©μ˜ λŒ€λΆ€λΆ„μ΄λ‹€.

<h1>κ°„λ‹¨ν•œ 뢀동 예제</h1>

<div class="box">뢀동</div>

<p>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam
  dolor, eu lacinia lorem placerat vulputate. Duis felis orci, pulvinar id metus
  ut, rutrum luctus orci. Cras porttitor imperdiet nunc, at ultricies tellus
  laoreet sit amet. Sed auctor cursus massa at porta. Integer ligula ipsum,
  tristique sit amet orci vel, viverra egestas ligula. Curabitur vehicula tellus
  neque, ac ornare ex malesuada et. In vitae convallis lacus. Aliquam erat
  volutpat. Suspendisse ac imperdiet turpis. Aenean finibus sollicitudin eros
  pharetra congue. Duis ornare egestas augue ut luctus. Proin blandit quam nec
  lacus varius commodo et a urna. Ut id ornare felis, eget fermentum sapien.
</p>
.box {
  float: left;
  width: 150px;
  height: 150px;
  margin-right: 30px;
}

포지셔닝 기술

포지셔닝을 톡해 보톡 흐름(normal flow)속에 μžˆλŠ” μš”μ†Œλ₯Ό μ˜ˆμƒλ˜λŠ” 기쑴의 배치 μœ„μΉ˜μ—μ„œ λ²—μ–΄λ‚˜ λ‹€λ₯Έ μœ„μΉ˜λ‘œ μ΄λ™μ‹œν‚¬ 수 μžˆλ‹€. 포지셔닝은 메인 νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒμ„ μƒμ„±ν•˜λŠ” λ©”μ„œλ“œκ°€ μ•„λ‹ˆλΌ νŽ˜μ΄μ§€μ˜ νŠΉμ • ν•­λͺ©μ˜ μœ„μΉ˜λ₯Ό κ΄€λ¦¬ν•˜κ³  λ―Έμ„Έ μ‘°μ •ν•˜λŠ” 것에 κ΄€ν•œ 것이닀.

κ·ΈλŸ¬λ‚˜ position 속성에 μ˜μ‘΄ν•˜λŠ” νŠΉμ • λ ˆμ΄μ•„μ›ƒ νŒ¨ν„΄μ„ μƒλŒ€ν•  경우 μœ μš©ν•œ κΈ°μˆ λ„ μžˆλ‹€. 포지셔닝을 μ΄ν•΄ν•˜λŠ” 것은 λ˜ν•œ 보톡 흐름을 μ΄ν•΄ν•˜κ³ , ν•­λͺ©μ„ 보톡 νλ¦„μ—μ„œ λ²—μ–΄λ‚˜κ²Œ ν•œλ‹€λŠ” 것이 무엇인지λ₯Ό μ΄ν•΄ν•˜λŠ” 데 도움이 λœλ‹€.

λ‹€μ„― 가지 포지셔닝 μœ ν˜•μ΄ μžˆλ‹€.

  • 정적static 포지셔닝은 λͺ¨λ“  μš”μ†Œμ— κΈ°λ³Έκ°’μœΌλ‘œ λΆ€μ—¬λœ 속성이닀.
  • μƒλŒ€relative 포지셔닝은 νŽ˜μ΄μ§€μƒμ˜ μš”μ†Œ μœ„μΉ˜λ₯Ό μˆ˜μ •ν•˜μ—¬ 그것을 보톡 νλ¦„μƒμ˜ κΈ°μ‘΄ μœ„μΉ˜μ™€ λΉ„λ‘€ν•΄ 이동토둝 ν•˜λŠ” κ²ƒμœΌλ‘œ νŽ˜μ΄μ§€μ˜ λ‹€λ₯Έ μš”μ†Œμ™€ κ²ΉμΉ˜λŠ” 것도 ν•΄λ‹Ήν•œλ‹€.
  • μ ˆλŒ€absolute 포지셔닝은 μš”μ†Œλ₯Ό νŽ˜μ΄μ§€μ˜ 일반 λ ˆμ΄μ•„μ›ƒ λŒ€μ—΄μ—μ„œ μ™„μ „νžˆ λ²—μ–΄λ‚œ 곳으둜 μ΄λ™μ‹œμΌœ 자체적인 κ°œλ³„ λ ˆμ΄μ–΄ 상에 λ†“λŠ” 것과 κ°™λ‹€. κ·Έκ³³μœΌλ‘œλΆ€ν„° νŽ˜μ΄μ§€μ˜ <html> μš”μ†Œ(λ˜λŠ” κ°€μž₯ κ·Όμ ‘ μœ„μΉ˜μ— μžˆλŠ” 쑰상 μš”μ†Œ)의 κ°€μž₯자리 κΈ°μ€€μ—μ„œ λΉ„λ‘€ν•˜λŠ” μœ„μΉ˜μ— κ³ μ •ν•  수 μžˆλ‹€.
  • κ³ μ •fixed 포지셔닝은 λ‹€λ₯Έ μš”μ†Œκ°€ μ•„λ‹Œ λΈŒλΌμš°μ € 뷰포트 κΈ°μ€€κ³Ό λΉ„λ‘€ν•΄ μš”μ†Œλ₯Ό κ³ μ •ν•˜λŠ” 것을 μ œμ™Έν•˜κ³ λŠ” μ ˆλŒ€ 포지셔닝과 맀우 μœ μ‚¬ν•˜λ‹€.
  • μŠ€ν‹°ν‚€sticky 포지셔닝은 ν•˜λ‚˜μ˜ μš”μ†Œλ₯Ό position: static와 같이 μž‘λ™ν•˜λ‹€κ°€ 뷰포트 κΈ°μ€€μ—μ„œ 사전에 μ •μ˜λœ κ°„κ²©λ„μš°κΈ° 지점에 λ„λ‹¬ν•œ μˆœκ°„ μ΄ν›„λΆ€ν„°λŠ” position: fixed와 같이 μž‘λ™ν•˜λŠ” μƒˆλ‘œμš΄ 포지셔닝 λ©”μ„œλ“œμ΄λ‹€.

ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒ

닀단 λ ˆμ΄μ•„μ›ƒ

Introduction to CSS layout

Normal Flow

Flexbox

Grids

Floats

Positioning

Multiple-column Layout

Responsive design

Beginner’s guide to media queries

Legacy Layout Methods

Supporting Older Browsers

Fundamental Layout Comprehension

Tags: ,

Categories:

Updated: