원문: Adam Argyle, https://web.dev/centering-in-css/
여러가지 테스트를 통해 5가지 중앙 정렬 방법 중 어떤 것이 가장 변화에 탄력적으로 대응하는지 확인해보자.
CSS로 중앙 정렬하는 것은 농담과 조롱으로 가득찬 악명 높은 도전이다. 2020 CSS는 많이 발전했고 이제 우리는 이 농담을 순수하게 즐길 수 있다.
만약 비디오를 선호한다면 유튜브로 이 글을 볼 수도 있다. https://youtu.be/ncYzTvEMCyE
중앙 정렬에는 사용 사례, 중앙 정렬을 해야 하는 요소의 수 등에 따라 달라지는 다양한 유형이 있다. 어떤 중앙 정렬 방법이 "우승"했는지 근거를 설명하기 위해 필자는 탄력성 고리(Resilience Ringer)를 만들었다. 이는 중앙 정렬 방법에 대한 스트레스 테스트로, 각각 다른 방법들이 어떻게 균형을 맞추는지 성능을 관찰할 수 있다. 필자는 마지막에는 가장 높은 점수를 받은 방법과 "가장 가치 있는" 방법을 공개할 것이다. 이제 새로운 중앙 정렬의 세상으로 떠나보자.
탄력성 고리란, 중앙 정렬 방법이라면 국제 레이아웃, 가변 크기 뷰포트, 텍스트 편집 및 동적 콘텐츠에 대해 탄력적이어야 한다는 필자의 신념을 표현한 것이다. 이러한 원칙은 중앙 정렬 방법이 견뎌야 하는 탄력성 테스트의 기반을 잡는데 도움을 주었다.
우승한 방법은 가로/세로로 짓누르고, 복제하고, 편집하고, 다양한 언어와 문서 방향을 변경했을 때 콘텐츠를 중앙에 유지하는 탄력성을 보여야 한다. 이를 증명해야 신뢰할 수 있고 탄력적이며 안전한 중앙 정렬이다.
필자는 메타 정보를 이해하는데 도움이 되도록 시각적 색상 힌트를 사용했다.
중앙 정렬 방법 5가지가 탄력성 고리 테스트에 입장했다. 그 중 단 한가지만 탄력성 왕관을 받을 수 있다 👸.
display: grid
와 place-content
의 간결함을 이기기는 쉽지 않을 것이다. 이 방법은 자식 요소를 일괄적으로 중앙 정렬하기 때문에 그룹 요소들을 견고히 중앙 정렬하는 기술이다.
.content-center {
display: grid;
place-content: center;
gap: 1ch;
}
단락과 표제, 프로토타입, 또는 간결한 중앙 정렬이 필요한 매크로 레이아웃에 적합하다.
place-content
는display: grid
에서만 사용할 수 있는 건 아니다.display: flex
에서도place-content
와place-item
의 이점을 얻을 수 있다.
이 방법은 진정한 중앙 정렬이다. place-content: center
와는 달리 중앙 정렬을 하는 중에도 자식 요소의 크기가 변경되지 않기 때문에 부드럽다. 가능한 부드럽게 모든 항목을 쌓고 가운데에 배치한다.
.gentle-flex {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1ch;
}
매크로 레이아웃과 마이크로 레이아웃 모두 적합하다.
매크로 레이아웃이란 한 국가의 주 또는 영토와 같이 매우 높은 수준의 넓은 범위의 영역이다. 매크로 레이아웃으로 만들어진 영역은 많은 레이아웃을 포함하고 있는 경향이 있다. 레이아웃이 적용되는 표면이 적을 수록 매크로 레이아웃도 줄어든다. 이렇게 계속 줄어들면 마이크로 레이아웃이 된다.
컨테이너는 정렬 스타일이 없는 flex로 설정되고, 하위 자식 요소는 여백을 자동으로 설정한다. 요소의 모든 면에서 작동하는 margin: auto
는 이전부터 익숙하게 사용하던 방법이다.
.autobot {
display: flex;
}
.autobot > * {
margin: auto;
}
아이콘이나 가상 요소(pseudo-elements)를 중앙 정렬하는데 적합하다.
이 방법은 전적으로 자식 요소에만 영향을 끼치면서 중앙 정렬을 할 수 있는 유일한 방법이다. 분홍색 테두리가 내부 요소에만 있는 걸 확인할 수 있다.
.fluffy-center {
padding: 10ch;
}
단어, 구문 중심의 정렬, 태그, 알약(pills), 버튼, 칩 등에 적합하다.
요소 위치를 절대적으로 지정하여 요소가 정상적인 흐름에서 튀어나오기 때문에 "펑"하고 튄다. 그리고 다른 요소들 위에 "퐁당"하고 빠진다. 이 부분은 필자가 가장 유용하다고 생각하는 부분이다. 고전적이고 편리한 오버레이 중앙 정렬 기술로, 콘텐츠 크기에 유연하고 동적으로 대처한다. 때때로 다른 UI 위에 UI를 배치하야 하는 경우가 생기기도 한다.
position: relative
가 필요하다.모달, 토스트, 메세지, 스택, 깊이 효과, 팝 오버에 적합하다.
만약 내가 섬에 있고, 오직 하나의 중앙 정렬만 가질 수 있다면...
[두구두구두구]
부드러운 Flex 🎉
.gentle-flex {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 1ch;
}
매크로 및 마이크로 레이아웃에서 모두 유용하기 때문에 필자의 스타일 시트에는 항상 이 방법이 쓰인다. 부드러운 Flex는 필자의 기대를 충족시키고 신뢰할 수 있는 만능 해결책이다. 또한 필자는 본질적인 크기 배열 중독자이기 때문에, 이 방법으로 마무리짓는 경향이 있다. 타이핑해야 할 코드가 많은 것은 사실이지만, 이로 인해 얻는 이점이 더 많다.
폭신폭신한 중앙
.fluffy-center {
padding: 2ch;
}
이 방법은 너무 작은 기술이라서 간과하기 쉽지만, 필자의 중앙 정렬 기술의 필수 요소이다. 너무 작아서 가끔 사용하고 있다는 사실을 잊어버리곤 한다.
중앙 정렬 전략을 망가뜨리는 것은 어떤 것일까? 탄력성 고리에 추가할 수 있는 다른 도전은 무엇일까? 필자는 번역과 컨테이너의 자동 높이 조절을 고려했는데... 또 다른 건 무엇이 있을까?
이제 필자가 어떻게 했는지 알았으니 당신은 어떻게 구현할 것인가? 접근 방식을 다양화하고 웹에서 구현할 수 있는 모든 방법을 배우자. 이 글에 나와있는 중앙 정렬 방법처럼 당신만의 중앙 정렬 방법을 만들기 위해 이 글의 코드랩을 따라해보자. 당신이 만든 중앙 정렬 방법을 필자에게 트윗해주면 아래의 [독자의 의견] 섹션에 추가하겠다.
아직 아무 것도 없다!