CSS, 2024년에 드디어 "세로 중앙 정렬"이 추가됨
(build-your-own.org)- CSS는 마침내
align-content
를 디폴트 레이아웃에 추가하여 단 한 줄의 CSS 속성으로 수직 정렬이 가능해짐- 지원 버전 Chrome 123, Firefox 125, Safari: 17.4
- 현재는 기본 레이아웃(flow)에서
align-content
가 동작하지 않으므로 flexbox 나 grid로 전환해야함- 2024년 드디어 브라우저들이 Flow 레이아웃에
align-content
를 구현함 - 이제 flexbox, grid 없이 그냥 CSS 속성 1개 만으로 정렬 됨
- 따라서, 콘텐츠를 div로 감쌀 필요가 없음
- 2024년 드디어 브라우저들이 Flow 레이아웃에
수직 정렬의 역사
- 브라우저에서 수직 정렬은 오랫동안 간단한 방법이 없었음
방법 1: 테이블 셀
- Sanity(제정신인가?): ★★★☆☆
- flow(기본값), table, flexbox, grid 등 4가지 주요 레이아웃이 있고, 콘텐츠 정렬은 레이아웃에 따라 다름
- flexbox와 grid가 늦게 추가되었기에 처음엔 table이 사용됨
<div style="display: table;">
<div style="display: table-cell; vertical-align: middle;">
Content.
</div>
</div>
방법 2: 절대 위치
- Sanity: ☆☆☆☆☆
- flow 레이아웃이 도움이 안 되므로 절대 위치를 사용해 우회함
<div style="position: relative;">
<div style="position: absolute; top: 50%; transform: translateY(-50%);">
Content.
</div>
</div>
방법 3: 인라인 컨텐츠
- Sanity: ☆☆☆☆☆
- flow 레이아웃은 콘텐츠 정렬에 도움이 안됨. 한 라인 내에서의 수직 정렬을 허용함
- 그럼 콘테이너 높이 만큼 줄을 만들면 어떨까 ?
<div class="container">
::before
<div class="content">Content.</div>
</div>
.container::before {
content: '';
height: 100%;
display: inline-block;
vertical-align: middle;
}
.content {
display: inline-block;
vertical-align: middle;
}
- 뭔가 이상해지기 좋음
방법 4: 한 줄 flexbox
- Sanity: ★★★☆☆
- Flexbox는 웹이 시작된 지 20년이 지난 후 널리 사용되기 시작
- 한 줄 모드(기본값)에서 라인이 수직 공간을 채우고,
align-items
로 라인 내 항목을 정렬함
<div style="display: flex; align-items: center;">
<div>Content.</div>
</div>
- 또는 줄을 세로로 만들고 justify-content를 사용하여 항목을 정렬
<div style="display: flex; flex-flow: column; justify-content: center;">
<div>Content.</div>
</div>
방법 5: 여러 줄 flexbox
- Sanity: ★★★☆☆
- 여러 줄 flexbox에서는
align-content
로 라인을 정렬 가능
<div style="display: flex; flex-flow: row wrap; align-content: center;">
<div>Content.</div>
</div>
방법 6: grid 컨텐츠
- Sanity: ★★★★☆
- grid는 더 나중에 나왔기 때문에, 정렬이 좀 간단해짐
<div style="display: grid; align-content: center;">
<div>Content.</div>
</div>
방법 7: grid 셀
- Sanity: ★★★★☆
-
align-content
는 셀을 컨테이너에 정렬하고,align-items
는 컨텐츠를 셀에 정렬함
<div style="display: grid; align-items: center;">
<div>Content.</div>
</div>
방법 8: auto 마진
- Sanity: ★★★☆☆
- flow 레이아웃에서
margin:auto
는 수평으로는 중앙 정렬되지만 수직으로는 안 됨 - flexbox와 grid는 이런 불합리성을 공유하지 않음
<div style="display: grid;">
<div style="margin-block: auto;">
Content.
</div>
</div>
방법 9: 2024년의 이 글
- Sanity: ★★★★★
- 애초에 브라우저가 이걸 추가했어야 함
<div style="align-content: center;">
<code>align-content</code> just works!
</div>
저는 앱개발을 주로 하다보니 웹 개발 도와줄때 아무 생각 없이 검색해서 나온 flexbox 쓰고 이게 중앙 정렬이겠거니 했는데... 여태 없던거였군요 충격쓰.....