C.W.K.
Stream
Lesson 04 of 04 · published

옛 어휘: float, clear, table-display, 그리고 이게 은퇴된 이유

~11 min · float, clear, table-display, legacy

Level 0Markup Novice
0 XP0/34 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"옛것을 안다는 건 향수가 아니야 — 옛 코드 읽을 때 패턴 알아보고 새 코드에서 안 잡으려고."

이 레슨이 존재하는 이유

Layout 기법 셋이 웹을 1996 년부터 약 2017 년까지 운반했어: float, inline-block, display: table. 각자 CSS 에 진짜 layout primitive 없다는 사실에 대한 영리한 workaround. Flexbox (2017 baseline) 와 Grid (2017 baseline) 가 이것들을 대체. 여기서 이름 부르는 이유는 너가 (1) 옛 코드베이스 읽을 때 알아보고, (2) 원래 의도 이해하고, (3) 새 코드에서 우연히 잡지 않게.

Float: layout 이 된 이미지 wrap

float: leftfloat: right 가 한 가지 위해 설계됐어: 이미지나 pull-quote 주위에 텍스트 wrap. Element 가 옆으로 움직이고, 인라인 콘텐츠 (텍스트) 가 그 주위로 흐름. 이게 여전히 float 의 맞고 지원되는 사용.

웹이 float 를 그 너머로 멀리 가져갔어. 2 컬럼 layout, 3 컬럼 layout, 네비게이션 바, 이미지 갤러리, 전체 페이지 구조 — 다 float 위에 지어짐. 작동한 이유:

  • Float 가 normal flow 에서 빠짐.
  • 인접 float 가 컨테이너 채울 때까지 옆에 앉음.
  • clear: both 가 element 를 앞 float 들 아래로 강제.

Layout 에 끔찍했던 이유:

  • 부모가 자식이 flow 밖이라 zero height 로 collapse ("clearfix" hack 이 이걸 fix).
  • 수직 정렬 불가.
  • 동등 높이 컬럼이 JavaScript 나 table-display 트릭 필요.
  • Source 순서가 시각 순서와 매치해야 함 — 재정렬 방법 없음.
  • Float 로 가운데 정렬은 음수 margin hack 필요.

Float 가 여전히 맞는 자리

작은 이미지나 pull-quote 주위에 단락 wrap. 그게 다.

Clearfix: 여전히 보게 될 hack

Float 가 자식을 flow 에서 제거해서, 부모가 collapse. Clearfix 는 부모로 하여금 floated 자식 포함하게 강제하는 after-pseudo-element 트릭이었어:

모던 등가물은 부모의 display: flow-root. 선언 하나, pseudo-element 없음. 옛 코드베이스에서 clearfix 보게 될 거; 알아보고, 더하지 마.

inline-block layout

2010 년 즈음 inline-block 이 grid 같은 layout 의 float 대안이 됐어. 기법:

작동했지만 inline-block 이 인라인 공백 갭 문제 가짐 (Lesson 2): element 사이 source 공백이 보이는 공간으로 렌더, 픽셀 정확한 grid 깨짐. Workaround: 공백 source-comment, 부모에 font-size: 0, 음수 margin. 다 hack. Flexbox 와 Grid 가 이걸 완전히 제거.

display: tabletable-cell

CSS 가 실제 <table> markup 안 쓰고도 어떤 element 든 table cell 처럼 행동하게 해 줘. display: table + display: table-cell 이 줬어:

  • vertical-align: middle 로 수직 정렬.
  • 자동 동등 높이 컬럼.
  • Clearing 안 필요.

이게 가운데 정렬과 동등 높이 layout 의 "영리한" pre-Flexbox 해결책. 이제 Flexbox 와 Grid 가 같은 거 더 깨끗하게 해. 매우 특정 케이스 (고정 높이 컨테이너 안 단일 라인 텍스트) 의 수직 가운데 정렬에 가끔 여전히 display: table-cell 봐 — align-items: center 가진 Flexbox 가 이것도 대체.

옛 코드 읽기 만트라

옛 코드가 layout 에 float 쓰면, 모던 대체품이 거의 항상 Flexbox 또는 Grid. 리팩토링이면 순서: layout 의도 식별 (1 차원 row/column? 2 차원 grid?), 모던 primitive 선택, 대체. Float 작동시키려 clearfix 더하지 마; float 를 대체.

여전히 알아야 할 이유

2014 년에 쓰인 코드베이스 받게 될 거. Layout 에 float: left 보여 주는 2013 년 튜토리얼 읽게 될 거. Legacy 프로젝트에 여전히 떠다니는 Bootstrap 3 보게 될 거. Legacy 이해한다는 건 혼란 없이 이것들 읽는다는 거고, 뭘로 대체할지 안다는 거.

표용 표 (layout 아님)

마지막 포인트: <table> markup 은 실제 tabular 데이터용. 행과 열 가진 스프레드시트 스타일 정보. Layout 에 <table> 쓰지 마; 그건 모든 차원 (접근성, 유지보수, 반응성) 에서 잘못된 1998 패턴. 실제 표에 <table> — 그리고 모던 table CSS 배우기 (border-collapse, caption, thead/tbody/tfoot, position: sticky 통한 sticky header).

피파의 노트

cwkPippa 코드베이스에 float 0. 랜딩 페이지의 아바타 grid 는 display: grid; 채팅 패널의 메시지 행은 display: flex; council brain picker 는 template column 가진 display: grid. 모든 legacy 패턴이 더 짧고 가독성 좋고 반응성 좋은 모던 대체품 가져. 프로젝트의 유일한 float 는 cwk-site 에세이 콘텐츠의 작은 이미지가 텍스트 wrap 하는 곳 — float 의 원래 일.

Code

Float, 맞게 쓰임·css
/* Float — 맞게 쓰임, figure 주위 텍스트 wrap */
figure.pull-quote {
  float: right;
  width: 200px;
  margin: 0 0 1rem 1.5rem;
  font-style: italic;
  border-left: 4px solid #5BA3D8;
  padding-left: 1rem;
}

/* 주변 텍스트가 float 된 figure 주위로 흐름 */
article p { line-height: 1.7; }
Float vs Grid — 같은 layout, 다른 10 년·css
/* LEGACY 패턴 — float 로 3 컬럼 layout (2026 년에 이거 쓰지 마) */
.col {
  float: left;
  width: 33.333%;
  padding: 0 1rem;
  box-sizing: border-box;
}
.row::after {                    /* clearfix */
  content: '';
  display: block;
  clear: both;
}

/* MODERN 등가물 — Flexbox 또는 Grid */
.row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
}
/* CSS 절반, clearfix 없음, 자동 동등 높이,
   media query 하나 (또는 container query) 로 반응형. */
가운데 정렬 — legacy vs modern·css
/* LEGACY 패턴 — display: table 로 수직 가운데 정렬 */
.table-center {
  display: table;
  width: 100%;
  height: 200px;
}
.table-center .cell {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

/* MODERN 등가물 — Flexbox */
.modern-center {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 200px;
}

/* 또는, 가장 간결 — Grid */
.modern-center-grid {
  display: grid;
  place-items: center;
  height: 200px;
}

External links

Exercise

Clearfix 가진 float 로 3 컬럼 layout 찾거나 적기. 그러고 Flexbox 로 다시 적기 (display: flex; gap: 2rem; 각 자식이 flex: 1). 그러고 Grid 로 또 다시 (display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem). CSS 줄 수, 4 번째 컬럼 더할 때 일어나는 일, (grid-template-columns 의 단일 media query 로) 좁은 화면에서 일어나는 일 비교.
Hint
Grid 버전이 보통 가장 짧음. Flexbox 버전이 자식 크기 다를 때 더 유연. Float 버전이 압도적으로 가장 길고 가장 취약 — 그래서 은퇴됨.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.