Grids
Gris são componentes que usam a API das grids CSS para prover estruturas de organização consistentes.
Quando usar
- Para criar layouts responsivos e consistentes em toda a aplicação.
- Para alinhar elementos em linhas e colunas de forma uniforme.
- Na construção de Dashboards, Bento Grids, Galerias, etc.
- Em estruturas nas quais for necessário especificar a estrutura dos elementos de forma bidimensional, tanto em linhas quanto em colunas;
Quando não usar
- Quando o design requer posicionamento absoluto ou fixo de elementos;
- Em componentes pequenos e auto-contidos que não necessitam de um sistema de grid;
- Em situações nas quais for necessário alinhar elementos apenas em uma das dimensões e não nas duas ao mesmo tempo. Para esses casos, utilize FlexBox.
Observações
- O
<CdsGrid>funciona em conjunto com o componente<CdsGridItem>. Por questões de simplicidade a documentação dos dois componentes está representada nessa página. - O componente
<CdsGridItem>não tem aplicabilidade prática sem o<CdsGrid>, são componentes dependentes. - ⚠️ Apesar de essa página explicar o uso de cada propriedade da API do
<CdsGridItem>, acesse a página do componente caso queira obter a lista completa de props.
Como usar
Colunas
A prop cols abstrai a propriedade grid-template-columns permitindo definir a configuração de colunas do layout grid diretamente no componente. São aceitos qualquer valor válido para grid-template-columns no CSS, passado como uma String. Caso nenhum valor seja fornecido para a prop cols, o valor padrão será "1fr", o que significa que a grid terá uma única coluna que ocupa todo o espaço disponível de forma proporcional.
Valores Aceitos
A prop cols aceita os seguintes tipos de valor:
- String: Qualquer valor CSS válido para
grid-template-columnspode ser fornecido como uma string. - Number: Se um número for passado, ele será automaticamente convertido para uma string representando o fracionamento da grid. Por exemplo: 3 será interpretado como "1fr 1fr 1fr", criando 3 colunas de tamanho igual.
- Array: Também é possível passar um array contendo strings, onde cada elemento representará uma coluna. Por exemplo: ['200px', '6rem', '50%'].
<CdsGrid
:cols="3"
gap="20px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">1fr</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">1fr</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">1fr</div>
</CdsGridItem>
</CdsGrid><CdsGrid
cols="minmax(auto, 50%) 1fr minmax(100px, 300px)"
gap="20px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">minmax(auto, 50%)</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">1fr</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">minmax(100px, 300px)</div>
</CdsGridItem>
</CdsGrid><CdsGrid
:cols="['200px', '6rem', '50%']"
gap="20px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">200px</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">6rem</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">50%</div>
</CdsGridItem>
</CdsGrid>Mesclagem de Colunas
A prop col-span abstrai a propriedade grid-column e permite indicar quantas colunas da grid o componente <CdsGridItem> (e seus filhos) irá ocupar.
Comportamento padrão
Se a propriedade col-start não for definida, especificar um col-span de, por exemplo, 3, será equivalente a definir grid-column: auto / span 3, fazendo o item ocupar três colunas começando da posição padrão (automática) na grid.
Valores Aceitos
A prop col-span aceita Numbers e Strings Se a propriedade col-start não for definida, atribuir um col-span de, por exemplo, 3, será equivalente a definir grid-column: auto / span 3, fazendo o item ocupar três colunas começando da posição padrão (automática) na grid.
<CdsGrid
:cols="6"
gap="20px"
class="grid-background"
>
<CdsGridItem colSpan="1">
<div class="docs-grid-cell">col-span="1"</div>
</CdsGridItem>
<CdsGridItem :colSpan="3">
<div class="docs-grid-cell">col-span="2"</div>
</CdsGridItem>
<CdsGridItem colSpan="2">
<div class="docs-grid-cell">col-span="3"</div>
</CdsGridItem>
</CdsGrid>Posição inicial das colunas
A prop col-start abstrai a propriedade CSS grid-column-start e permite definir em qual coluna a renderização do componente <CdsGridItem> (e seus elementos filhos) irá começar.
Comportamento padrão
Se col-start não for definida, seu valor padrão é "auto", permitindo que o navegador decida a posição inicial do item na grid.
Valores Aceitos
A prop col-start aceita Numbers e Strings Se a propriedade col-span não for definida, especificar um col-span de, por exemplo, 3, será equivalente a definir grid-column: 3 / span 1, fazendo o item ocupar uma coluna começando na terceira posição da Grid.
<CdsGrid
:cols="6"
gap="20px"
class="grid-background"
>
<CdsGridItem colStart="3">
<div class="docs-grid-cell">col-start="3"</div>
</CdsGridItem>
<CdsGridItem colStart="5">
<div class="docs-grid-cell">col-start="5"</div>
</CdsGridItem>
<CdsGridItem colSpan="2" colStart="4">
<div class="docs-grid-cell">col-start="4"</div>
</CdsGridItem>
</CdsGrid>Linhas
A prop rows abstrai a propriedade grid-template-rows, permitindo definir a configuração de linhas do layout grid diretamente no componente. São aceitos qualquer valor válido para grid-template-rows no CSS, passado como uma String. Caso nenhum valor seja fornecido para a prop rows, o valor padrão será "auto", o que significa que cada linha terá uma altura automática, baseada no conteúdo.
Comportamento padrão
Se grid-template-rows não for definida, seu valor padrão é 1fr.
Valores Aceitos
A prop cols aceita os seguintes tipos de valor:
- String: Qualquer valor CSS válido para grid-template-rows pode ser fornecido como uma string. Exemplos: "100px 200px auto", "repeat(3, 1fr)", "minmax(100px, auto)";
- Number: Se um número for passado, ele será automaticamente convertido para uma string representando o fracionamento da grid. Por exemplo: 2 será interpretado como "1fr 1fr", criando 2 linhas de tamanho igual.
- Array: Também é possível passar um array contendo strings, onde cada elemento representará uma linha. Por exemplo: ['32px', '3.2rem', '40%'].
<CdsGrid
:cols="1"
:rows="['32px', '3.2rem', '40%']"
gap="4px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">32px</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">3.2rem</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">40%</div>
</CdsGridItem>
</CdsGrid>Tamanho das linhas automáticas
A prop auto-rows abstrai a propriedade CSS grid-auto-rows e permite definir a altura das linhas criadas automaticamente pelo layout grid. Por exemplo, se o conteúdo da propriedade rows for definido como "50px 50px" e auto-rows for definido como "120px" as duas linhas da grid terão 50px de altura, enquanto qualquer linha adicional terá 120px.
Comportamento padrão
Se auto-rows não for definida, seu valor padrão é "1fr",
Valores Aceitos
A prop cols aceita os seguintes tipos de valor:
- String: Qualquer valor CSS válido para
grid-auto-rowspode ser fornecido como uma string. Exemplos: "100px 200px auto", "repeat(3, 1fr)", "minmax(100px, auto)"; - Number: Se um número for passado, ele será automaticamente convertido para uma string representando o fracionamento da grid. Por exemplo: 2 será interpretado como "2fr".
<CdsGrid
rows="50px 50px"
autoRows="120px"
gap="20px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">50px</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">50px</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">120px</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">120px</div>
</CdsGridItem>
</CdsGrid>Mesclagem de Linhas
De modo equivalente à col-span, mas para linhas, a prop row-span abstrai a propriedade CSS grid-row permitindo indicar quantas linhas da grid o componente <CdsGridItem> (e seus filhos) irá ocupar.
Comportamento padrão
Se a propriedade row-start não for definida, especificar um row-span de, por exemplo, 3, será equivalente a definir grid-row: auto / span 3, fazendo o item ocupar três linhas começando da posição padrão (automática) na grid.
Valores Aceitos
A prop cols aceita os seguintes tipos de valor:
- String: Qualquer valor CSS válido para
grid-auto-rowspode ser fornecido como uma string. Exemplos: "100px 200px auto", "repeat(3, 1fr)", "minmax(100px, auto)"; - Number: Se um número for passado, ele será automaticamente convertido para uma string representando o fracionamento da grid. Por exemplo: 2 será interpretado como "2fr".
<CdsGrid
:cols="3"
:rows="2"
gap="20px"
class="grid-background"
>
<CdsGridItem rowSpan="2">
<div class="docs-grid-cell">row-span="2"</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">--</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">--</div>
</CdsGridItem>
</CdsGrid>Posição inicial das linhas
A prop row-start abstrai a propriedade CSS grid-row-start e permite definir em qual linha a renderização do componente <CdsGridItem> (e seus elementos filhos) irá começar.
Comportamento padrão
Se row-start não for definida, seu valor padrão é "auto", permitindo que o navegador decida a posição inicial do item na grid.
Valores Aceitos
A prop row-start aceita Numbers e Strings Se a propriedade row-span não for definida, especificar um row-span de, por exemplo, 3, será equivalente a definir grid-row: 3 / span 1, fazendo o item ocupar um espaço na terceira linha da Grid.
<CdsGrid
:rows="6"
gap="20px"
class="grid-background"
>
<CdsGridItem rowStart="2">
<div class="docs-grid-cell">row-start="2"</div>
</CdsGridItem>
<CdsGridItem rowStart="3">
<div class="docs-grid-cell">row-start="3"</div>
</CdsGridItem>
<CdsGridItem rowStart="6">
<div class="docs-grid-cell">row-start="6"</div>
</CdsGridItem>
</CdsGrid>Gap
O espaçamento entre os elementos do <CdsGrid> pode ser definido através das props gap. O número ou expressão passados para a prop determinam um espaçamento homogêneo na grid, sendo o mesmo valor aplicado tanto horizontal quanto verticalmente.
Comportamento padrão
O valor default da propriedade é 0, valor que deixa todos os elementos juntos, sem espaçamento horizontal ou vertical.
Valores Aceitos
A prop gap aceita os seguintes tipos de valor:
- String: Qualquer valor CSS válido para
gappode ser fornecido como uma string. Exemplos: "100px", "4%", "5rem"; ⚠️ Importante: se nenhuma unidade for fornecida, a string informada se comportará como número e terá seu valor multiplicado por 4, com adição da unidade "px". Ex.: paragap="3"o espaçamento adotado será de "12px". - Number: Se um número for passado, ele será multiplicado por 4 para se adequar ao padrão de espaçamento adotado no Cuida e em seguida será convertido para pixels. Ex.: para
:gap="2"o espaçamento adotado será de "8px".
<CdsGrid
:cols="2"
gap="2"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">04</div>
</CdsGridItem>
</CdsGrid>
`RowGap e ColGap
Caso precise especificar um espaçamento horizontal diferente do vertical, ou indicar apenas um deles, é possível usar as props row-gap e col-gap. row-gap modifica o espaçamento entre as linhas da grid, enquanto col-gap modifica o espaçamento entre as colunas.
Comportamento padrão
O valor default de ambas as propriedades é 0, valor que deixa todos os elementos juntos, sem espaçamento horizontal ou vertical.
Valores Aceitos
Assim como a prop gap, row-gap quanto col-gap aceitam Numbers e Strings e funcionam do mesmo modo:
- String: Qualquer valor CSS válido pode ser fornecido para as props como uma string. Exemplos: "100px", "4%", "5rem"; ⚠️ Importante: se nenhuma unidade for fornecida, a string informada se comportará como número e terá seu valor multiplicado por 4, com adição da unidade "px". Ex.: para
row-gap="3"o espaçamento entre linhas será de "12px". O mesmo vale paracol-gap; - Number: Se um número for passado, ele será multiplicado por 4 para se adequar ao padrão de espaçamento adotado no Cuida e em seguida será convertido para pixels. Ex.: para
:col-gap="2"o espaçamento entre colunas será de "8px". O mesmo vale pararow-gap;
<CdsGrid
:cols="2"
rowGap="30px"
colGap="120px"
class="grid-background"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">04</div>
</CdsGridItem>
</CdsGrid>
`Alihamento Horizontal
A prop justify controla o alinhamento horizontal dos itens dentro do <CdsGrid>, abstraindo a propriedade justify-content do CSS Grid.
Comportamento padrão
O valor default da propriedade é "stretch", o que faz com que os itens dentro da grid ocupem toda a largura disponível no container.
Valores Aceitos
Qualquer valor CSS válido que controle o alinhamento horizontal no grid pode ser fornecido como uma string para personalizar o layout conforme necessário, como por exemplo space-between, start, center e end.
<CdsGrid
cols="100px 100px 100px"
gap="20px"
class="grid-background"
justify="space-between"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`<CdsGrid
cols="100px 100px 100px"
gap="20px"
class="grid-background"
justify="center"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`<CdsGrid
cols="100px 100px 100px"
gap="20px"
class="grid-background"
justify="end"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`Alinhamento Vertical
A prop align controla o alinhamento vertical dos itens dentro do <CdsGrid>, abstraindo a propriedade align-items do CSS Grid.
Comportamento padrão
O valor default da propriedade é "stretch", o que faz com que os itens dentro da grid ocupem toda a altura disponível no container.
Valores Aceitos
Qualquer valor CSS válido que controle o alinhamento vertical no grid pode ser fornecido como uma string para personalizar o layout conforme necessário, como por exemplo start, center e end.
<CdsGrid
cols="100px 100px 100px"
rows="100px"
gap="20px"
class="grid-background"
align="start"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`<CdsGrid
cols="100px 100px 100px"
rows="100px"
gap="20px"
class="grid-background"
align="center"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`<CdsGrid
cols="100px 100px 100px"
rows="100px"
gap="20px"
class="grid-background"
align="end"
>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">02</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">03</div>
</CdsGridItem>
</CdsGrid>
`Alinhamento Horizontal do Grid Item
A prop justify no <CdsGridItem> controla o alinhamento horizontal individual de um item dentro de uma célula do grid, abstraindo a propriedade CSS justify-self.
Comportamento padrão
O valor default da propriedade é "auto", o que faz com que o item siga o comportamento de alinhamento definido pelo justify-content do container, a menos que um valor diferente seja especificado.
Ao definir a prop justify em um <CdsGridItem>, o alinhamento do item individual é ajustado conforme o valor fornecido, sobrescrevendo o alinhamento horizontal definido pelo justify-content do container. Isso permite que o item tenha um comportamento de alinhamento independente dos outros itens no grid.
Valores Aceitos
Qualquer valor CSS válido para justify-self pode ser utilizado para personalizar o alinhamento horizontal de itens individualmente dentro do grid, como por exemplo os valores start, center, end e stretch.
<CdsGrid
cols="200px"
gap="20px"
class="grid-background"
>
<CdsGridItem justify="start">
<div class="docs-grid-cell">justify="start"</div>
</CdsGridItem>
<CdsGridItem justify="center">
<div class="docs-grid-cell">justify="center"</div>
</CdsGridItem>
<CdsGridItem justify="end">
<div class="docs-grid-cell">justify="end"</div>
</CdsGridItem>
<CdsGridItem justify="stretch">
<div class="docs-grid-cell">justify="stretch"</div>
</CdsGridItem>
</CdsGrid>
`Alinhamento Vertical do Grid Item
A prop align no <CdsGridItem> controla o alinhamento vertical individual de um item dentro de uma célula do grid, abstraindo a propriedade CSS align-self.
Comportamento padrão
O valor default da propriedade é "auto", o que faz com que o item siga o comportamento de alinhamento definido pelo align-items do container, a menos que um valor diferente seja especificado.
Ao definir a prop align em um <CdsGridItem>, o alinhamento do item individual é ajustado conforme o valor fornecido, sobrescrevendo o alinhamento vertical definido pelo align-items do container. Isso permite que o item tenha um comportamento de alinhamento vertical independente dos outros itens no grid.
Valores Aceitos
Qualquer valor CSS válido para align-self pode ser utilizado para personalizar o alinhamento vertical de itens individualmente dentro do grid, como por exemplo os valores start, center, end e stretch.
<CdsGrid
cols="200px 200px 200px 200px"
rows="200px"
gap="20px"
class="grid-background"
>
<CdsGridItem align="start">
<div class="docs-grid-cell">align="start"</div>
</CdsGridItem>
<CdsGridItem align="center">
<div class="docs-grid-cell">align="center"</div>
</CdsGridItem>
<CdsGridItem align="end">
<div class="docs-grid-cell">align="end"</div>
</CdsGridItem>
<CdsGridItem align="stretch">
<div class="docs-grid-cell">align="stretch"</div>
</CdsGridItem>
</CdsGrid>
`SubGrid
A prop subgrid no <CdsGridItem> permite transformar um item em um grid, possibilitando a construção de layouts mais complexos, com grids aninhadas.
Comportamento padrão
O valor default da propriedade é false, o que significa que o <CdsGridItem> se comporta como um item normal dentro de um grid, sem definir um novo grid interno.
Quando a prop subgrid é definida como true, o display do CSS é alterado para grid, permitindo que o item contenha seus próprios itens de grid.
Valores Aceitos
A prop subgrid é uma propriedade booleana que aceita os seguintes valores:
- true: ativa o modo subgrid, permitindo a definição de um layout interno.
- false (padrão): O item se comporta como um item de grid normal, sem criar um novo grid interno.
Direção do Subgrid
Quando um <CdsGridItem> está se comportando como subgrid, é possível conrolar a organização padrão dos elementos com a prop direction. Essa prop implementa a propriedade CSS grid-auto-flow.
Comportamento padrão
O valor default da propriedade é "row", o que faz com que os itens dentro do subgrid sejam organizados em linhas.
Valores Aceitos
A prop direction aceita os seguintes valores:
- row (padrão): os itens são organizados em linhas, ocupando a largura do container antes de avançar para a próxima linha.
- column: os itens são organizados em colunas, ocupando a altura do container antes de avançar para a próxima coluna.
<CdsGrid
cols="250px 250px 250px"
rows="100px"
gap="20px"
class="grid-background"
justify="space-between"
>
<CdsGridItem subGrid direction="column">
<div class="docs-grid-cell">I</div>
<div class="docs-grid-cell">II</div>
<div class="docs-grid-cell">III</div>
</CdsGridItem>
<CdsGridItem subGrid>
<div class="docs-grid-cell">A</div>
<div class="docs-grid-cell">B</div>
</CdsGridItem>
<CdsGridItem>
<div class="docs-grid-cell">01</div>
</CdsGridItem>
</CdsGrid>
`Tag renderizada
A prop tag permite definir a tag que o componente renderiza. Essa propriedade é utilizada para permitir que o componente seja utilizado em diferentes contextos, como por exemplo, em um footer ou em um header.
Comportamento padrão
O valor default da propriedade é div, o que significa que o componente renderiza uma div.
Valores Aceitos
A prop tag é uma propriedade string que aceita os seguintes valores:
- div (padrão): renderiza uma div.
- span: renderiza uma span.
- main: renderiza um main.
- footer: renderiza um footer.
- form: renderiza um form.
- header: renderiza um header.
- aside: renderiza um aside.
- ul: renderiza uma ul.
- li: renderiza uma li.