A grade CSS é um mecanismo de layout muito eficiente, mas a linha e
as faixas de coluna criadas em uma grade principal só podem ser usadas para posicionar
filhos do contêiner da grade. Qualquer autor definiu áreas de grade nomeadas e
linhas foram perdidas em qualquer outro elemento que não um
filho direto. Com o subgrid
, é possível compartilhar modelos, nomes e tamanhos de faixas
com grades aninhadas. Este artigo explica como isso funciona.
Antes da subgrade, o conteúdo era geralmente personalizado à mão para evitar layouts irregulares, como a este.
Depois da subgrade, é possível alinhar o conteúdo de tamanho variado.
Noções básicas sobre subgrades
Este é um caso de uso simples que apresenta os conceitos básicos de subgrid
do CSS. Um
a grade é definida com duas colunas nomeadas, a primeira tem largura de 20ch
e a segunda
é "o resto" do espaço 1fr
. Os nomes das colunas não são obrigatórios, mas são
ótimos para fins ilustrativos e educacionais.
.grid {
display: grid;
gap: 1rem;
grid-template-columns: [column-1] 20ch [column-2] 1fr;
}
Em seguida, um filho dessa grade abrange essas duas colunas, é definido como um contêiner de grade,
e adota as colunas do pai definindo grid-template-columns
como
subgrid
.
.grid > .subgrid {
grid-column: span 2;
display: grid;
grid-template-columns: subgrid; /* 20ch 1fr */
}
É isso, as colunas da grade pai foram efetivamente transferidas por um nível para em uma subgrade. Agora, essa subgrade pode atribuir filhos a qualquer uma dessas colunas.
Desafio! Repita a mesma demonstração, mas para grid-template-rows
.
Compartilhar uma grade "macro" no nível da página
Os designers geralmente trabalham com grades compartilhadas, desenhando linhas sobre um design inteiro, alinhando qualquer elemento que eles quiserem. Agora os desenvolvedores da Web também podem! Essa exatamente fluxo de trabalho agora pode ser alcançado, e muito mais.
Implementar o fluxo de trabalho de grade de designer mais comum pode fornecer excelentes
insights sobre os recursos, fluxos de trabalho e potenciais do subgrid
.
Esta é uma captura de tela do Chrome DevTools de uma macro de layout de página para dispositivos móveis rede. As linhas têm nomes e há áreas claras para posicionamento de componentes.
O CSS a seguir cria essa grade, com linhas e colunas nomeadas para o dispositivo. o mesmo layout organizacional. Cada linha e coluna tem um tamanho.
.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];
}
Alguns estilos adicionais têm o design a seguir.
Dentro desse pai, há vários elementos aninhados. O design requer uma
abaixo das linhas de navegação e de cabeçalho. As colunas mais à esquerda e à direita
os nomes das linhas são fullbleed-start
e fullbleed-end
. Nomear linhas de grade dessa forma
permite que os filhos se alinhem simultaneamente com a posição
abreviação
de fullbleed
. Isso é muito conveniente, como você verá em breve.
Com o layout geral do dispositivo criado com boas linhas e colunas nomeadas, use
subgrid
para transmitir as linhas e colunas bem nomeadas para layouts de grade aninhados. Isso
é aquele momento mágico do subgrid
. O layout do dispositivo transmite as linhas e
colunas nomeadas para o contêiner do app, que as transmite para cada um dos
elementos filhos.
.device > .app,
.app > * {
display: grid;
grid: subgrid / subgrid;
/* same as */
grid-template-rows: subgrid;
grid-template-columns: subgrid;
}
A subgrade de CSS é um valor usado no lugar de uma lista de faixas de grade. As linhas e
do elemento pai, agora são as mesmas linhas e
colunas que ele oferece. Isso disponibiliza os nomes das linhas da grade .device
.
para filhos de .app
, em vez de apenas .app
. Os elementos dentro de .app
foram
não foi capaz de fazer referência às faixas de grade criadas por .device
antes da subgrade.
Com tudo definido, a imagem aninhada pode ficar sem margens na
layout, graças ao subgrid
. Nenhum valor negativo ou truque, mas uma boa
texto simples que diz “meu layout abrange de fullbleed-start
a fullbleed-end
”.
.app > main img {
grid-area: fullbleed;
}
Aí está, uma grade macro como os designers usam, implementada em CSS. Isso pode ser escalonada e crescer com você, conforme necessário.
Procurar suporte
O aprimoramento progressivo com CSS e subgrade é familiar e objetivo.
Use @supports
e, dentro dos parênteses, pergunte ao navegador se ele entende
como um valor para colunas ou linhas de modelo. O exemplo a seguir verifica se
a propriedade grid-template-columns
oferece suporte à palavra-chave subgrid
, que,
"true", significa que a subgrade pode ser usada
@supports (grid-template-columns: subgrid) {
/* safe to enhance to */
}
Devtools
O Chrome, o Edge, o Firefox e o Safari têm ótimas ferramentas de desenvolvimento de grade CSS, e o Chrome, o Edge e o Firefox têm ferramentas específicas para ajudar com a subgrade. Anunciado o Chrome as ferramentas 115 enquanto O Firefox já os tem há um ano ou mais.
O selo da subgrade funciona como o selo da grade, mas distingue visualmente qual são subgrades e quais não são.
Recursos
Esta lista é uma compilação de artigos, demonstrações e inspiração geral para começar a usar o subgrid. Se você está procurando a próxima etapa para sua subgrade educação, divirta-se explorando todos esses ótimos recursos!
- MDN
- Rachel Andrew com legendas alinhadas
- Rachel Andrew com 10 ótimos exemplos
- Rachel Andrew com um site de exemplos
- Artigo de Ahmad Shaded
- Michelle Barker no CSS Day 2022
- Cartas
- Chris Coyier com formulários
- Facundo Corradini com alinhamento de formulário
- Chris Coyier com o alinhamento de marcadores de itens da lista (em inglês)
- Michelle Barker saindo do contêiner para alinhar com a grade principal
- Miriam Suzanne mostrando nomes de linhas nomeadas e interações de subgrade
- Kevin Powell, noções básicas sobre áreas nomeadas
- Kevin Powell com listas alinhadas
- Shannon Moeller com listas alinhadas
- Kevin Powell com uma grade no nível da página transmitida para os componentes
- Elad Shechter com sobreposição e substituto do devtool
- Aaron Iker com um bom uso tipográfico da subgrade para alinhamento de referência de notas de rodapé
- Adam Argyle com uma imagem sem margens dentro de um artigo