CSS 세로 정렬 5가지 방식 비교 공식과 Flexbox Grid 가이드

웹 페이지에서 박스 안의 텍스트나 아이콘을 세로 방향 정중앙에 배치하는 작업은 프론트엔드 개발에서 자주 마주치는 기본 과제입니다. Flexbox, Grid, absolute 포지셔닝, line-height 등 여러 방식이 있지만 각각 적용 조건과 한계가 달라 상황에 맞는 방식을 고르지 못해 헤매는 경우가 많습니다. 이 글에서는 실무에서 쓰이는 5가지 세로 정렬 방식의 원리와 CSS 코드를 정리하고, 어떤 상황에 어떤 방식이 적합한지 확인하는 방법을 안내합니다.

요약 ① Flexbox와 Grid는 한두 줄의 CSS로 세로 정렬을 처리하는 모던 표준 방식입니다. ② absolute+transform, line-height, table-cell 방식은 특정 조건에서만 쓸 수 있는 보완적 방법입니다. ③ 아래 도구에서 Flexbox·Grid·Line Height·Absolute 4가지 방식을 직접 바꿔가며 결과와 코드를 비교할 수 있습니다.

세로 정렬이 여러 방식으로 나뉘는 이유

과거 CSS에는 세로 방향 정렬을 위한 전용 속성이 없어서, 개발자들은 table-cell의 vertical-align: middle 속성을 빌려 쓰거나 position: absolute와 transform: translateY(-50%)를 조합하는 방식으로 우회해야 했습니다. CSS3에서 Flexbox와 Grid가 도입되면서 align-items: center, place-content: center 같은 속성으로 세로 정렬을 직접 지정할 수 있게 되었지만, 텍스트 한 줄 정렬이나 구형 브라우저 대응처럼 예전 방식이 여전히 쓰이는 상황도 남아 있어 5가지 방식이 함께 쓰입니다.

5가지 세로 정렬 방식 직접 구현하기

각 방식을 코드로 직접 적용하는 방법은 다음과 같습니다.

  1. Flexbox 방식 (align-items: center): 부모 요소에 display: flex와 align-items: center를 지정합니다. 주축이 가로(row)일 때 교차축인 세로 방향 정렬을 담당하는 속성입니다.
  2. CSS Grid 방식 (place-content: center): 부모 요소에 display: grid와 place-content: center를 지정하면 가로·세로 정렬을 한 번에 처리합니다.
  3. Absolute + Transform 방식: 부모에 position: relative를, 자식에 position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)를 지정합니다. 자식 요소의 높이를 몰라도 정중앙에 배치할 수 있으며, 계산식으로 풀면 세로 중앙 좌표는 (부모 높이 − 자식 높이) ÷ 2 입니다.
  4. Line-height 방식: 한 줄짜리 텍스트에 한해 line-height 값을 컨테이너의 height 값과 동일하게 지정하면 세로 중앙에 맞춰집니다.
  5. Table-cell 방식: display: table-cell과 vertical-align: middle을 지정합니다. 구형 브라우저 호환이 필요한 레거시 프로젝트에서 사용합니다.
/* 1. Flexbox 방식 */
.flex-center {
  display: flex;
  justify-content: center; /* 가로 중앙 */
  align-items: center;     /* 세로 중앙 */
  height: 200px;
}

/* 2. CSS Grid 방식 */
.grid-center {
  display: grid;
  place-content: center;   /* 가로+세로 동시에 중앙 정렬 */
  height: 200px;
}

/* 3. Absolute + Transform 방식 */
.absolute-center-parent {
  position: relative;
  height: 200px;
}
.absolute-center-child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

/* 4. 텍스트 전용 Line-height 방식 */
.text-single-line {
  height: 50px;
  line-height: 50px; /* height 수치와 동일하게 선언 */
}

/* 5. Table-cell 방식 (구형 브라우저 호환용 레거시 기법) */
.table-cell-parent {
  display: table;
  height: 200px;
}
.table-cell-child {
  display: table-cell;
  vertical-align: middle; /* 세로 중앙 */
  text-align: center;     /* 가로 중앙 */
}

실무에서 자주 하는 실수

  • vertical-align의 적용 조건을 놓치는 경우: vertical-align: middle 속성은 inline, inline-block, table-cell 요소에만 적용됩니다. div나 article 같은 일반 block 요소에 직접 지정하면 동작하지 않으므로 Flexbox나 Grid 방식을 사용해야 합니다.
  • flex-direction: column 전환 시 속성을 그대로 두는 경우: flex-direction을 column으로 바꾸면 주축이 세로로 바뀌면서 세로 정렬을 담당하는 속성이 align-items에서 justify-content로 바뀝니다. 축을 전환했다면 정렬 속성도 함께 바꿔야 합니다.

각 방식의 결과를 코드로 하나씩 확인하는 대신, Flexbox·Grid·Line Height·Absolute 4가지 방식을 클릭 한 번으로 전환하며 실시간 미리보기와 호환성 정보까지 함께 보고 싶다면 저희 도구로 확인하기.

CSS 세로 정렬 시각 가이드 & 호호성 리포트

Flexbox, Grid, Line Height, Absolute 4가지 세로 정렬 기법의 차이를 시각적으로 비교하고 최적의 CSS 소스코드를 즉시 복사해 보세요.

5가지 방식 한눈에 비교

방식핵심 CSS적합한 상황
Flexboxdisplay: flex; align-items: center;1차원 레이아웃, 모던 브라우저 대상
Griddisplay: grid; place-content: center;가로·세로 동시 정렬, 최소 코드
Absolute + Transformposition: absolute; top: 50%; transform: translate(-50%, -50%);자식 요소 높이를 모를 때
Line-heightline-height 값을 height와 동일하게 지정한 줄짜리 텍스트 전용
Table-celldisplay: table-cell; vertical-align: middle;구형 브라우저 호환이 필요할 때

정리

세로 정렬은 상황에 따라 맞는 방식이 다릅니다. 모던 브라우저를 대상으로 하는 레이아웃이라면 Flexbox나 Grid로 한두 줄의 코드만으로 해결할 수 있고, 자식 요소의 높이를 모르는 경우에는 absolute+transform 방식이 유용합니다. 한 줄짜리 텍스트는 line-height 방식을, 구형 브라우저 호환이 필요하면 table-cell 방식을 씁니다. 방식별 차이가 헷갈린다면 도구에서 직접 비교해 보는 것이 가장 빠릅니다.

CSS 세로 정렬 시각 가이드 & 호호성 리포트

Flexbox, Grid, Line Height, Absolute 4가지 세로 정렬 기법의 차이를 시각적으로 비교하고 최적의 CSS 소스코드를 즉시 복사해 보세요.


📖 실무자들이 겪는 현실적인 CSS 세로 정렬 사연 3가지

수많은 프론트엔드 개발자들이 레이아웃을 잡을 때 세로 정렬 문제로 골머리를 앓습니다. 다음은 실무에서 가장 빈번하게 발생하는 대표적인 세로 정렬 실패 및 해결 사연들입니다.

사연 1: "
에 vertical-align: middle을 주고 왜 안 되는지 3시간 동안 고민한 주니어 개발자"

입사 3개월 차 주니어 개발자 A씨는 사용자 프로필 이미지 옆에 텍스트를 세로 중앙 정렬하라는 지시를 받았습니다. 이름 그대로 세로를 정렬해줄 것 같은 vertical-align: middle 속성을 텍스트를 감싼 <div>에 부여했습니다. 하지만 텍스트는 꼼짝도 하지 않았고, 구글링과 삽질을 반복하며 3시간을 허비했습니다. 결국 사수에게 질문한 뒤에야, vertical-align 속성은 인라인 요소(inline, inline-block)나 테이블 셀(table-cell)에만 작동하며 블록 요소(block)에는 아무런 효과가 없다는 사실을 알게 되었습니다. 결국 부모 요소에 display: flex; align-items: center; 단 두 줄을 추가하는 것으로 3시간의 고민을 10초 만에 해결했습니다.

사연 2: "flex-direction: column으로 바꿨더니 세로 정렬이 갑자기 가로 정렬로 변해버린 퍼블리셔"

웹 퍼블리셔 B씨는 완벽하게 세로 정렬된 프로필 카드를 모바일 화면에 맞춰 레이아웃을 세로 배치로 변경했습니다. 카드의 구조를 위아래로 쌓기 위해 부모 요소에 flex-direction: column을 추가했는데, 황당하게도 잘 맞았던 '세로 중앙 정렬'이 풀리고 요소들이 좌우 횡방향(가로) 정렬로 틀어졌습니다. 이유는 Flexbox의 축 전환(Axis Swap) 원리를 몰랐기 때문입니다. 방향이 row일 때 교차축(세로)을 제어하던 align-items: center가, column 모드에서는 주축이 세로로 바뀌면서 가로축 정렬을 제어하게 된 것입니다. 세로 배치 모드에서 수직 중앙 정렬을 하려면 align-items가 아닌 justify-content: center를 써야 한다는 사실을 깨닫고 수정하여 모바일 카드를 완성했습니다.

사연 3: "모바일에서 갑자기 천장으로 날아간 absolute top: 50% 히어로 텍스트"

반응형 웹을 구축하던 C팀은 히어로 섹션 배너의 메인 카피를 position: absolute; top: 50%; transform: translateY(-50%);로 완벽히 정중앙에 배치했습니다. 데스크톱에서는 완벽하게 보였으나, 모바일 기기 테스트 중 텍스트가 화면 맨 위쪽 상단에 걸려 반쪽만 보이는 현상이 발생했습니다. 원인은 부모 컨테이너에 명시적인 heightmin-height가 없었기 때문입니다. 내부에 블록 요소 흐름을 타는 자식이 없으니 부모의 높이가 0px로 수렴해버렸고, top: 50%가 계산할 기준 높이가 사라진 것입니다. 결국 부모 컨테이너에 min-height: 100vh를 부여하여 부모의 높이를 뷰포트 크기로 강제 확보한 뒤에야 안전한 반응형 중앙 정렬을 구현할 수 있었습니다.


🔬 핵심 기술 메커니즘 — 브라우저는 세로 정렬을 어떻게 렌더링하는가?

CSS에서 세로 정렬은 단순히 눈에 보이는 위치를 옮기는 것이 아니라, CSS Box Model Centering Geometry(박스 모델 렌더링 기하학)에 의해 철저하게 계산된 결과입니다. 각 정렬 방식이 내부적으로 어떻게 동작하는지 원리를 파악해야만 오류 없는 레이아웃 설계가 가능합니다.

1. Flexbox 교차축(Cross-Axis) 정렬의 수학적 원리

Flexbox에서 align-items: center를 선언하면 브라우저의 렌더링 엔진은 남은 여백을 자동으로 분배합니다. 주축이 row일 때, 교차축인 세로 방향에 대해 위아래 마진(자동 여백)을 다음과 같이 동등하게 계산합니다.

$$ ext{margin}{ ext{top}} = ext{margin}{ ext{bottom}} = rac{H_{ ext{container}} - H_{ ext{child}}}{2} $$

여기서 $H_{ ext{container}}$는 부모 컨테이너의 전체 높이이고, $H_{ ext{child}}$는 자식 요소의 높이입니다. Flex 레이아웃 알고리즘이 런타임에 이 수식을 자동으로 처리해주므로 자식의 높이가 가변적이더라도 언제나 완벽한 중앙 정렬을 유지합니다.

2. Absolute + Transform 기법의 계산식

이 방식은 상대적인 기준점 이동과 자기 자신의 크기만큼 역산하는 두 단계를 거칩니다.

$$ y_{ ext{final}} = 50% cdot H_{ ext{parent}} - 50% cdot H_{ ext{child}} $$

  • 1단계 (top: 50%): 자식 요소의 '상단 테두리(Top Edge)'를 부모 높이의 정확히 절반 위치(50%)로 내립니다. 이 상태에서는 요소의 중심이 중앙에 있지 않고 상단 테두리가 중앙에 있습니다.
  • 2단계 (transform: translateY(-50%)): 자식 요소의 높이($H_{ ext{child}}$)의 절반만큼 Y축 반대 방향(위쪽)으로 끌어올립니다. 결과적으로 자식 요소의 정중앙 지점이 부모의 중앙과 완벽히 일치하게 됩니다.

3. Grid place-content: center 의 정체

CSS Grid에서 place-content: center는 단순한 하나의 속성이 아니라, 수직과 수평 양축을 동시에 정렬하는 **단축 속성(Shorthand Property)**입니다. 이는 내부적으로 align-content: center; (교차축/세로 정렬)와 justify-content: center; (인라인축/가로 정렬) 두 가지를 동시에 선언한 것과 같습니다. Grid는 2차원 레이아웃 시스템이므로 1차원인 Flexbox보다 중앙 정렬 코드가 훨씬 간결하게 압축됩니다.

4. vertical-align: middle 이 블록(Block) 요소에서 실패하는 이유

브라우저의 렌더링 과정에서 vertical-align 속성은 인라인 서식 컨텍스트(Inline Formatting Context) 내부에서만 동작하도록 명세(Spec)되어 있습니다.

  • 인라인 상자나 테이블 셀 안에서 기준선(Baseline)을 바탕으로 상하 정렬을 수행합니다.
  • 반면 <div>, <section>과 같은 블록 레벨 요소는 독자적인 **블록 서식 컨텍스트(Block Formatting Context)**를 생성하므로 텍스트 기준선이라는 개념 자체가 적용되지 않습니다. 따라서 블록 요소에는 vertical-align 값이 무시됩니다.

5. Flex Direction의 축 전환(Axis Swap) 규칙

Flexbox에서 가장 헷갈리는 부분은 주축(Main Axis)과 교차축(Cross Axis)의 동적인 변화입니다.

  • flex-direction: row (기본값): 주축이 가로, 교차축이 세로. ➔ align-items: center 가 세로 정렬을 담당.
  • flex-direction: column: 주축이 세로, 교차축이 가로. ➔ justify-content: center 가 세로 정렬을 담당.

📊 5가지 세로 정렬 방식 상세 비교 매트릭스

실무에서 자주 사용되는 5가지 정렬 기법의 한계와 지원 여부를 종합적으로 비교한 표입니다.

비교 항목Flexbox (align-items)Grid (place-content)Absolute + TransformLine-height 방식Table-cell 방식
다중 줄 텍스트(Multi-line) 지원✅ 완벽 지원✅ 완벽 지원✅ 완벽 지원❌ 지원 안 됨 (깨짐)✅ 완벽 지원
자식 높이 미상(Unknown Height) 시✅ 지원 (자동 계산)✅ 지원 (자동 계산)✅ 지원 (transform 역산)❌ 불가능✅ 지원
모던 브라우저 및 모바일 호환성💯 최상💯 최상💯 최상⚠️ 제한적⚠️ 구형 전용 (비권장)
코드의 간결성(Simplicity)⭐⭐⭐ (2~3줄 필요)⭐⭐⭐⭐⭐ (가장 짧음)⭐⭐ (top, left, transform 등)⭐⭐⭐ (height와 동일)⭐ (구조 복잡함)
반응형 스케일링(Responsive)✅ 우수함✅ 우수함⚠️ 부모 height 설정 필수❌ 고정 크기에서만 사용❌ 테이블 레이아웃 고정

⚠️ CSS 세로 정렬, 실무자들이 저지르는 5가지 치명적 실수

개발 과정에서 세로 정렬이 무너지는 가장 흔한 이유 5가지를 분석합니다.

  1. 블록 요소에 vertical-align: middle 남발하기: 인라인 컨텍스트가 아닌 <div> 블록에 속성을 부여하고 왜 안 되는지 수정한 흔적을 남기는 실수입니다.
  2. Absolute 사용 시 부모에 명시적 높이(Height)를 누락하는 것: 부모 기준점을 position: relative로 잡았더라도 부모의 높이가 0이라면 top: 50%가 계산되지 않아 요소가 뷰포트 상단 밖으로 튀어나갑니다.
  3. flex-direction: column 으로 전환하면서 정렬 속성 방치하기: 반응형 분기점(Media Query)에서 모바일을 위해 column으로 바꿨을 때, 정렬 축이 바뀐 것을 인지하지 못하고 align-items를 그대로 두어 정렬이 깨지는 실수입니다.
  4. display: flex 선언 없이 margin: auto 로 세로 정렬 시도하기: margin: auto는 일반 블록 컨텍스트에서는 오직 가로 방향(좌우) 정렬에만 동작합니다. 반드시 display: flex와 함께 써야만 상하좌우 모든 방향의 여백이 자동으로 균등 분배됩니다.
  5. 히어로 배너에 min-height: 100vh 를 깜빡하는 경우: 화면 전체를 덮는 웰컴 배너를 정중앙 정렬하려 할 때, 부모 래퍼(Wrapper)의 높이를 명시적으로 뷰포트 높이만큼 잡아주지 않으면 콘텐츠 크기만큼만 컨테이너가 쪼그라들어 중앙 정렬 효과가 시각적으로 나타나지 않습니다.

💡 결점 없는 완벽한 세로 정렬을 위한 5-Step 워크플로우

어떤 UI 레이아웃이 주어져도 당황하지 않고 세로 정렬을 완성할 수 있는 5단계 검증 프로세스입니다.

  1. 1단계: 부모 컨테이너의 높이(Height) 확보 확인: 가장 먼저 부모 요소가 시각적으로 충분한 높이(height 또는 min-height)를 가지고 있는지 확인합니다. 공간이 없으면 정렬은 무의미합니다.
  2. 2단계: 최우선으로 Flexbox 고려하기: 90% 이상의 일반적인 1차원 컨텐츠 배치 상황에서는 display: flex; align-items: center; justify-content: center;를 기본 해답으로 사용합니다.
  3. 3단계: 양축 동시 정렬 시 Grid 활용하기: 격자 구조이거나 아이템을 X축, Y축 한가운데에 놓아야 하는 컴포넌트라면 가장 짧은 코드인 display: grid; place-content: center;를 채택합니다.
  4. 4단계: 모달 및 오버레이 팝업엔 Absolute + Transform 배치: 화면이나 특정 부모 컨테이너 위에 떠 있는(Floating) UI라면 문서 흐름(Document Flow)에서 분리해야 하므로 position: absolutetransform 조합을 사용합니다.
  5. 5단계: 텍스트 줄바꿈 및 가변 높이 스트레스 테스트: 내부에 들어갈 콘텐츠의 분량을 극단적으로 늘리거나 줄여보아 요소의 높이가 변해도 정렬 기준선이 붕괴하지 않는지 점검합니다.

🔍 프론트엔드 장인을 위한 7가지 전문가 CSS 정렬 팁

  1. 세상에서 가장 짧은 완벽 중앙 정렬: display: grid; place-items: center; (단 2줄의 코드로 부모 안의 자식을 완벽히 가로세로 중앙에 위치시킵니다.)
  2. Flex 컨테이너 내부의 margin: auto 마법: display: flex가 적용된 부모 안에서 특정 자식에게 margin: auto;를 주면, 해당 자식이 남은 여백을 모두 흡수하면서 완벽한 센터링이나 구석 밀어내기가 가능해집니다.
  3. 모바일 사파리 하단 바를 고려한 min-height: 100dvh: 모바일 브라우저의 동적 UI(상단 주소창, 하단 툴바)에 의해 가려지는 문제를 막기 위해 기존의 vh 대신 동적 뷰포트 단위인 dvh(Dynamic Viewport Height)를 사용하여 안전하게 꽉 차는 배너를 만드세요.
  4. 개별 자식만 튀고 싶다면 align-self: center: 부모의 기본 정렬 규칙이 align-items: flex-start이더라도, 자식 요소 하나에만 align-self: center를 부여하여 그룹 규칙을 무시하고 혼자 세로 중앙에 배치할 수 있습니다.
  5. 완벽한 정사각형 카드 정렬 (aspect-ratio + place-content): 썸네일 카드를 만들 때 aspect-ratio: 1/1display: grid; place-content: center;를 결합하면 찌그러지지 않는 완벽한 정방형 내부 중앙 배치를 달성할 수 있습니다.
  6. 다국어 세로 쓰기 모드(writing-mode)에서의 정렬 주의점: 일본어나 몽골어처럼 writing-mode: vertical-rl이 적용된 세로 쓰기 레이아웃에서는 물리적인 상하좌우가 아니라 논리적(Logical)인 블록 축과 인라인 축을 기준으로 align-items와 justify-content가 작동하므로 축 개념을 논리 방향으로 생각해야 합니다.
  7. 실시간 인터랙티브 시뮬레이터 활용: 여러 방식 중 헷갈리는 속성이 있다면 상단의 도구 링크를 통해 4가지 방식을 직접 스위칭하며 브라우저 실시간 렌더링을 비교 분석하세요.

🎯 세로 정렬 기법을 위한 최종 Decision Tree (의사결정 트리)

어떤 상황에서 어떤 코드를 짜야 할지 망설여진다면 아래의 트리 구조를 따라가세요.

  • 질문 1: 정렬할 아이템이 문서 흐름(Flow) 위에 떠 있어야(Overlay) 하는가?
    • YES ➔ Absolute + Transform 방식 사용 (모달창, 툴팁, 뱃지)
    • NO ➔ 아래로 진행
  • 질문 2: 1차원(선형) 배치인가, 2차원(격자형) 배치인가?
    • 2차원이거나 오직 자식 하나를 완벽한 정중앙에 놓고 싶다 ➔ CSS Grid (place-content: center)
    • 1차원 나열이면서 아이템들의 배치와 간격을 디테일하게 제어해야 한다 ➔ 아래로 진행
  • 질문 3: 텍스트가 무조건 한 줄(Single-line)로 고정되어 있는가?
    • YES ➔ Line-height 트릭 (버튼 라벨, 단일 텍스트 메뉴)
    • NO (줄바꿈이 생길 수 있다) ➔ Flexbox (align-items: center)
  • 특별 케이스: 지원해야 하는 브라우저가 IE9 등 극단적인 구형 환경인가?
    • YES ➔ Table-cell (vertical-align: middle)

📑 핵심 CSS 레이아웃 정렬 용어 (Terminology Cheatsheet)

  • 세로 정렬 (Vertical Alignment): 요소나 텍스트를 부모 컨테이너의 상하 공간 기준 중앙에 배치하는 작업.
  • 주축 (Main Axis) & 교차축 (Cross Axis): Flexbox에서 아이템이 나열되는 주 방향을 주축이라 하고, 그에 수직으로 교차하는 축을 교차축이라 부름. 방향(row/column)에 따라 물리적 방향이 동적으로 바뀜.
  • 인라인 서식 컨텍스트 (Inline Formatting Context, IFC): 인라인 레벨 상자들이 줄(Line) 안에 배치되는 규칙. vertical-align이 유일하게 동작하는 영역.
  • place-content: CSS Grid에서 align-content와 justify-content를 한 번에 설정하는 초간단 단축 속성.
  • transform: translate(-50%, -50%): 절대 위치(Absolute) 배치 시, 요소 기준점이 좌측 상단(0,0)에 있는 것을 요소 내부의 정중앙으로 보정(Calibration)해주는 필수 연산 기법.
  • dvh (Dynamic Viewport Height): 모바일 브라우저 툴바의 확장 및 축소를 동적으로 감지하여 항상 정확한 화면 가시영역 높이를 반환하는 모던 CSS 단위.

자주 묻는 질문

Q1. 왜 vertical-align: middle 은 <div> 같은 일반 블록 요소에서 전혀 작동하지 않나요?

vertical-align은 텍스트의 '기준선(Baseline)'을 기반으로 폰트 크기나 줄 높이(Line Box)에 맞춰 상하 위치를 조정하는 인라인 서식 전용 속성입니다. <div><section> 같은 블록 서식 컨텍스트(BFC)는 텍스트 라인 박스라는 렌더링 개념을 갖지 않고 부모의 남은 너비를 100% 점유하는 박스 모델 규칙을 따르기 때문에, 인라인 정렬용인 vertical-align 명령어를 마주쳐도 해석하지 못하고 무시하게 됩니다.

Q2. flex-direction: column 으로 바꾸면 왜 align-items 가 아니라 justify-content 로 세로 정렬을 제어해야 하나요?

Flexbox 속성들은 물리적인 위(Top)/아래(Bottom)/왼(Left)/오른쪽(Right)을 기준으로 설계되지 않고, 데이터가 흐르는 '논리적 축(Logical Axis)'을 기준으로 설계되었습니다.

  • 기본값인 row에서는 데이터가 가로로 흐르므로 주축=가로, 교차축=세로가 됩니다. 이때 align-items는 언제나 교차축을 담당합니다.
  • 방향을 column으로 바꾸면 데이터가 세로로 흐르므로 주축=세로, 교차축=가로로 90도 회전(Swap)합니다. 세로 방향이 메인인 주축이 되었으므로, 주축의 정렬을 담당하는 justify-content 속성이 세로 정렬을 제어하게 되는 것입니다.

Q3. 부모 컨테이너의 높이(height)를 알 수 없을 때(가변 높이)는 어떤 세로 정렬 방식을 써야 완벽한가요?

부모 안에 담기는 데이터에 따라 높이가 유동적으로 변하는 동적 레이아웃 환경에서는 FlexboxGrid를 사용하는 것이 가장 안전하고 완벽합니다. display: flex; align-items: center;를 지정해두면, 브라우저가 렌더링하는 그 순간 부모 상자의 최종 계산된 높이를 파악하고 자동으로 상하 여백 공간을 균등 계산(Math)하여 분배합니다. Line-height 기법이나 명시적인 높이 선언이 필요한 방식은 가변 높이 환경에서는 즉각 레이아웃 붕괴를 유발하므로 피해야 합니다.

가격 보기카톡 무료 상담