CSS Grid 사용 가이드
Last updated
Last updated
Grid와 Flexbox는 모던 레이아웃 모듈의 대표 주자로 다양한 레이아웃을 구현할 수 있습니다. 하지만 각각 특성이 있어 전문으로 하는 분야가 달라 상황에 따라 적합한 방법을 사용하면 됩니다.
Grid 레이아웃은 박스 및 콘텐츠의 크기와 위치를 제어 할 수 있는 강력한 기능을 가진 새로운 레이아웃 모델입니다. X 또는 Y 중 하나의 축을 통해 요소를 배치하는 Flexbox와 달리, Grid는 2차원 축을 모두 사용해 요소를 배치할 수 있어 보다 강력합니다.
Grid 레이아웃은 요소를 그리드에 자유롭게 배치 할 수 있기 때문에 HTML 마크업 순서와 상관 없이 시각적으로 레이아웃 구조를 변형하는데 제약이 없습니다. 뿐만 아니라 미디어 쿼리와 그리드를 함께 사용하면 다양한 디바이스에 최적화된 인터페이스를 사용자에게 제공할 수 있습니다.
Grid는 2차원 방향으로 배치 또는 정렬이 가능하고, 레이아웃에 대한 하향식(Top-Down) 접근법을 사용합니다. 요소를 명시적으로 겹치거나, 강력한 스패닝(Span) 기능을 제공합니다.
Flexbox는 축(Axis) 내의 공간 분배에 중점을 두고 레이아웃에 대한 간단한 상향식 접근법을 사용합니다. 컨텐츠 크기 기반의 줄 바꿈 시스템을 사용하여 보조 축을 제어하고 기본 마크업 계층을 사용하여 보다 복잡한 레이아웃을 작성합니다.
2가지 방법 모두 CSS 제작자에게 가치 있고 상호 보완적인 도구가 될 것으로 기대됩니다.
웹 사이트가 단순한 문서에서 복잡한 인터랙션을 수행하는 애플리케이션으로 발전함에 따라, 문서 레이아웃 기술만으로 애플리케이션 레이아웃을 구현하기 어려워졌습니다. 기존의 레이아웃 기술을 총 동원하여 애플리케이션 레이아웃을 구현했으나, 다양한 문제가 발생했고, 많은 애플리케이션이 제약된 레이아웃 방법을 선택하는 것으로 타협했습니다.
그리드 레이아웃은 이러한 문제를 해결하기 위해 고안되었습니다. 레이아웃에 사용 가능한 공간을 행과 열에 맞춰 배치할 수 있는 메커니즘을 제공합니다. 제작자는 애플리케이션의 빌딩 블록 요소를 정의된 그리드 영역에 정확하게 배치하거나, 크기를 설정할 수 있습니다.
그리드 레이아웃은 웹 페이지 내의 요소를 스마트하게 크기 조정하는데 사용할 수 있습니다. 아래 그림은 게임 제목(Game Title), 통계(Stats) 게임 보드(Board), 점수(Score) 및 컨트롤(Controls) 영역으로 레이아웃을 구성하는 5가지 컴포넌트가 있는 게임 애플리케이션 인터페이스입니다. 제작자는 게임 인터페이스를 구성하는 공간을 다음과 같이 나눕니다.
"통계" 영역은 항상 "게임 제목" 바로 아래에 나타납니다.
"게임 보드"는 "통계" 및 "제목" 오른쪽에 나타납니다.
"게임 제목"의 상단과 "게임 보드"는 항상 정렬 되어야 합니다.
"게임 보드"의 하단과 "통계" 영역의 하단은 게임이 최소 높이에 도달하면 정렬됩니다. 다른 모든 경우에 "게임 보드"는 사용할 수 있는 모든 공간을 활용하기 위해 늘어납니다.
"컨트롤"은 게임 보드 중앙에 위치합니다.
"스코어" 영역의 상단은 "컨트롤" 영역의 상단에 정렬됩니다.
"점수" 영역은 "통계" 영역 아래에 있습니다.
"점수" 영역은 "통계" 영역 아래의 "컨트롤"에 정렬됩니다.
요구 조건에 따라 그리드를 사용해 게임 인터페이스를 레이아웃 하는 코드를 살펴보세요.
이전 예제를 계속 하면서 게임 인터페이스가 다양한 크기의 화면에서 최적화 되길 원합니다. 뿐만 아니라 세로 또는 가로 방향으로 화면을 볼 때 컴포넌트 레이아웃을 적절하게 배치할 수 있어야 합니다 (아래 그림 참고). 그리드 레이아웃과 미디어 쿼리를 결합 함으로써 제작자는 동일한 시맨틱 마크업으로 코드의 순서와 상관없이 요소의 레이아웃을 재배치 하여 각 방향의 화면 모드에서 원하는 레이아웃을 얻을 수 있습니다.
요구 조건에 따라 그리드를 사용해 게임 인터페이스를 다양한 화면에서 레이아웃 하는 코드는 다음과 같습니다.
그리드 레이아웃의 순서 재배치 기능은 시각적인 화면 렌더링 만 영향을 주며, 소스 순서에 따라 음성 출력 및 내비게이션 합니다. 이를 통해 제작자는 시멘틱 마크업을 그대로 유지한 채, 다양한 화면에서 최적화 된 레이아웃을 제작할 수 있습니다.
그리드 요소 레이아웃 및 재배치를 사용할 경우, 마크업 순서대로 화면에 그려지는 것이 아니기에 문서 접근성 문제가 발생할 수 있음을 주의해야 합니다.