CSS 서브 그리드

CSS 그리드는 매우 강력한 레이아웃 엔진이지만 상위 그리드에 만들어진 행 및 열 트랙은 그리드 컨테이너의 직접 하위 요소를 배치하는 데만 사용할 수 있습니다. 작성자가 정의한 이름이 지정된 그리드 영역 및 선이 직접 하위 요소가 아닌 다른 요소에서 손실되었습니다. subgrid를 사용하면 트랙 크기 조정, 템플릿 및 이름을 중첩된 그리드와 공유할 수 있습니다. 이 도움말에서는 수익 창출의 작동 방식을 설명합니다.

서브그리드 전에는 이와 같이 비정형 레이아웃을 방지하기 위해 콘텐츠를 직접 맞춤설정하는 경우가 많았습니다.

세 개의 카드가 나란히 표시되며 각 카드에는 헤더, 단락, 링크와 같은 세 비트의 콘텐츠가 있습니다. 각각 텍스트 길이가 다르기 때문에 카드가 나란히 놓일 때 약간의 정렬이 어색해집니다.

서브 그리드 이후에는 다양한 크기의 콘텐츠를 정렬할 수 있습니다.

세 개의 카드가 나란히 표시되며 각 카드에는 헤더, 단락, 링크와 같은 세 비트의 콘텐츠가 있습니다. 각각 텍스트 길이는 다르지만 Subgrid는 가장 큰 각 콘텐츠 항목의 행 높이를 설정할 수 있도록 하여 정렬을 수정함으로써 모든 정렬 문제를 해결했습니다.

브라우저 지원

  • 117
  • 117
  • 71
  • 16

소스

하위 그리드 기본사항

다음은 CSS subgrid의 기본사항을 소개하는 간단한 사용 사례입니다. 그리드는 두 개의 이름이 지정된 열로 정의되며, 첫 번째는 너비가 20ch이고 두 번째는 1fr 공간의 '나머지'입니다. 열 이름은 필수는 아니지만 설명 및 교육용으로 유용합니다.

.grid {
  display: grid;
  gap: 1rem;
  grid-template-columns: [column-1] 20ch [column-2] 1fr;
}

그러면 이 그리드의 하위 요소가 이 두 열에 걸쳐 있고, 그리드 컨테이너로 설정되고, grid-template-columnssubgrid로 설정하여 상위 요소의 열을 채택합니다.

.grid > .subgrid {
  grid-column: span 2;

  display: grid;
  grid-template-columns: subgrid; /* 20ch 1fr */
}
두 개의 열이 나란히 있고 열 줄 시작 부분에 이름이 표시된 CSS 그리드 DevTools의 스크린샷
https://codepen.io/web-dot-dev/pen/NWezjXv

이제 상위 그리드의 열이 한 레벨에서 서브 그리드로 효과적으로 전달되었습니다. 이제 이 하위 그리드는 이러한 열 중 하나에 하위 요소를 할당할 수 있습니다.

도전과제 grid-template-rows에도 동일한 데모를 반복합니다.

페이지 수준 '매크로' 그리드 공유하기

디자이너는 공유 그리드를 사용하여 작업하면서 전체 디자인에 선을 그리고 원하는 요소를 정렬하는 경우가 많습니다. 이제 웹 개발자도 가능합니다. 이제 이 정확한 워크플로를 구현할 수 있을 뿐만 아니라 더 많은 작업을 수행할 수 있습니다.

매크로 그리드에서 완성된 디자인까지 그리드 이름이 지정된 영역이 미리 생성되고 나중에 구성요소가 원하는 대로 배치됩니다.

가장 일반적인 디자이너 그리드 워크플로를 구현하면 subgrid의 기능, 워크플로, 잠재력에 관한 유용한 정보를 얻을 수 있습니다.

다음은 모바일 페이지 레이아웃 매크로 그리드의 Chrome DevTools에서 가져온 스크린샷입니다. 행에 이름이 있고 구성요소 배치를 위한 명확한 영역이 있습니다.

빠른 식별을 위해 행과 열의 이름이 지정된 모바일 크기의 그리드 레이아웃을 보여주는 Chrome CSS 그리드 DevTools의 스크린샷(fullbleed, system-status, primary-nav, primary-header, main, footer, system-gesture)

다음 CSS는 기기 레이아웃에 사용할 이름이 지정된 행과 열을 사용하여 이 그리드를 만듭니다. 각 행과 열에는 크기가 있습니다.

.device {
    display: grid;
    grid-template-rows:
      [system-status] 3.5rem
      [primary-nav] 3rem
      [primary-header] 4rem
      [main] auto
      [footer] 4rem
      [system-gestures] 2rem
    ;
    grid-template-columns: [fullbleed-start] 1rem [main-start] auto [main-end] 1rem [fullbleed-end];
}

몇 가지 추가 스타일은 다음과 같은 디자인을 제공합니다.

이전과 동일한 CSS DevTools 그리드 오버레이이지만 이번에는 모바일 시스템 UI와 그림자, 색상이 약간 있습니다. 디자인이 어떻게 진행될지
확인할 수 있습니다.

이 상위 요소 안에는 중첩된 여러 요소가 있습니다. 디자인에서는 nav 및 헤더 행 아래에 전체 너비 이미지가 필요합니다. 맨 왼쪽과 오른쪽 열 줄 이름은 fullbleed-startfullbleed-end입니다. 이러한 방식으로 그리드 선의 이름을 지정하면 하위 요소가 fullbleed배치 약식을 사용하여 각각에 맞게 동시에 정렬할 수 있습니다. 곧 알게 되실 것이므로 매우 편리합니다.

DevTools에서 제공하는 그리드 오버레이의 확대 스크린샷. 특히 fullbleed-start 및 fullbleed-end 열 이름에 중점을 둡니다.

잘 이름이 지정된 행과 열로 전체 기기 레이아웃이 생성되었을 때 subgrid를 사용하여 잘 이름이 지정된 행과 열을 중첩된 그리드 레이아웃에 전달합니다. subgrid의 멋진 순간입니다. 기기 레이아웃은 이름이 지정된 행과 열을 앱 컨테이너로 전달한 다음 앱 컨테이너에 이를 모든 하위 요소에 전달합니다.

.device > .app,
.app > * {
    display: grid;
    grid: subgrid / subgrid;

    /* same as */
    grid-template-rows: subgrid;
    grid-template-columns: subgrid;
}

CSS 서브 그리드는 그리드 트랙 목록 대신 사용되는 값입니다. 요소가 상위 요소에서 확장되는 행과 열은 이제 요소가 제공하는 행과 열이 동일합니다. 이렇게 하면 .app만 아닌 .app의 하위 요소가 .device 그리드의 줄 이름을 사용할 수 있습니다. .app 내부의 요소는 서브그리드 전에 .device에서 만든 그리드 트랙을 참조할 수 없었습니다.

이를 모두 정의하면 이제 subgrid 덕분에 중첩된 이미지를 레이아웃에서 풀 블리드로 만들 수 있습니다. 음수 값이나 요령이 없으며 대신 '내 레이아웃은 fullbleed-start에서 fullbleed-end까지'라는 멋진 한 줄로 표시됩니다.

.app > main img {
    grid-area: fullbleed;
}
기본 탐색 및 헤더 행 아래에 배치된 전체 너비의 중첩 이미지가 풀블리드 이름의 각 열 줄까지 확장되는 완성된 매크로 레이아웃입니다.
https://codepen.io/web-dot-dev/pen/WNLyjzX

여기 있습니다. 디자이너가 사용하는 매크로 그리드를 CSS로 구현합니다. 이 개념은 필요에 따라 확장되고 확장될 수 있습니다.

지원 여부 확인

CSS 및 서브 그리드를 사용한 점진적 개선은 익숙하고 간단합니다. @supports를 사용하고 괄호 안에서 브라우저에 서브그리드를 템플릿 열 또는 행의 값으로 인식하는지 묻습니다. 다음 예에서는 grid-template-columns 속성이 subgrid 키워드를 지원하는지 확인합니다. true인 경우 서브그리드를 사용할 수 있음을 의미합니다.

@supports (grid-template-columns: subgrid) {
  /* safe to enhance to */
}

Devtools

Chrome, Edge, Firefox, Safari에는 모두 훌륭한 CSS 그리드 DevTools가 있으며 Chrome, Edge, Firefox에는 서브그리드를 지원하는 특정 도구가 있습니다. Firefox는 1년 이상 이 도구를 보유하고 있는 반면 Chrome은 115년에 자체 도구를 발표했습니다.

요소 패널의 요소에 있는 서브 그리드 배지 스크린샷 미리보기

하위 그리드 배지는 그리드 배지처럼 작동하지만 어떤 그리드가 하위 그리드인지 시각적으로 구분합니다.

자료

이 목록은 Subgrid 문서, 데모, 전반적인 시작 아이디어를 모아 놓은 것입니다. 서브그리드 교육을 위한 다음 단계를 찾고 있다면 이 모든 유용한 리소스를 살펴보세요.

새로운 상호 운용 가능한 시리즈에 포함됨