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-columns
pode 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-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 "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-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 "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
gap
pode 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.