1
resposta

Grid-area e display-flex

Pq foi adicionado um grid e um display:flex no mesmo elemento? não poderia ser somente display:flex no cabeçalho ?

1 resposta

Olá Afrânio, tudo bem?

A primeira vista, parece que está sendo aplicado dois displays diferentes para o mesmo elemento container que é o cabeçalho, mas não é isso que está ocorrendo de fato. Vamos entender!

Container Body

O display grid está sendo aplicado no elemento <body>, onde ele possui o grid-template-areas para dispor as áreas do seu container com seus 3 elementos filhos, ou seja, o cabecalho, o conteudo e o rodape. Veja:

.app {
    background: #f1f1f1;
    display: grid;  
    font-family: Arial, Helvetica, sans-serif;
    grid-template-areas: 
        "cabecalho"
        "conteudo"
        "rodape";
    grid-template-columns: auto;
    grid-template-rows: 50px auto auto; 
}

Para que o cabeçalho preencha essa área do <body>, ele precisa ter um grid-area que leve o mesmo nome descrito no grid-template-areas e é por isso que foi adicionar na classe .cabecalho o código grid-area: cabecalho;.

A relação é entre o container body e o seu elemento filho cabecalho.

Container Cabecalho

O cabeçalho, por sua vez, também atua como um container e para dispor o seu elemento filho <nav> em linha, é aplicado o display: flex em .cabecalho.

A relação é entre o container cabecalho e o seu elemento filho nav

A propriedade display é uma propriedade que obrigatoriamente é colocada para fazer com que um elemento atue como container ou pai. Já a propriedade grid-area, é uma propriedade de um elemento item ou filho. Dessa forma, não existe um elemento que está atuando como um container de flex e de grid ao mesmo tempo aqui, mas sim, como container de flex e item de grid.

Espero ter ajudado, em caso de dúvida ou dificuldades, estamos por aqui.

Abraços e bons estudos!