Layout em Grade do CSS e Quadrinhos (explicado por Barry o Gato)
() translation by (you can also view the original English article)
A Grade do CSS é bem bacana para projetar histórias em quadrinhos online, especialmente se quisermos que sejam flexíveis. Nesse tutorial, usaremos Barry, o gato, para demonstrar como criar um quadrinho responsivo.
Barry o Gato
Para o tutorial, peguei algumas artes no GraphicRiver. Sleepy Fat Cat é uma fonte de exibição, mas vem com adoráveis vetores de gatos–perfeito para essa demo!
Preparando o Navegador
Não esqueçamos que é preciso um navegador de ponta para ver a Grade do CSS em ação, então, leia Layout em Grade do CSS: Um Guia de Início Rápido se o seu não suportar. Eis o que tentaremos criar:
Veja a demo completa no CodePen e como ela responde aos diferentes tamanhos de tela.
1. Marcação HTML
Comecemos criando algum HTML:
1 |
<section class="grid-1"> |
2 |
|
3 |
<div class="panel panel-title"> |
4 |
<h1>Barry’s Cushion</h1> |
5 |
<p>A tale of lethargy and soft furnishings</p> |
6 |
</div>
|
7 |
<div class="panel panel-1"></div> |
8 |
<div class="panel panel-2"></div> |
9 |
<div class="panel panel-3"> |
10 |
<p>“I should probably get up–things to do.”</p> |
11 |
</div>
|
12 |
<div class="panel panel-4"></div> |
13 |
<div class="panel panel-5"></div> |
14 |
<div class="panel panel-6"></div> |
15 |
<div class="panel panel-7"> |
16 |
<p>“Naaah.”</p> |
17 |
</div>
|
18 |
<div class="panel panel-8"></div> |
19 |
<div class="panel panel-9"></div> |
20 |
<div class="panel panel-copyright"> |
21 |
<p>Sleepy Fat Cat by messenj4h<br>© Copyright happily ever after <a href="https://webdesign.tutsplus.com">Envato Tuts+</a> |
22 |
</div>
|
23 |
</section>
|
Aqui temos um <section>
agindo como nossa grade e vários <div class="panel">
sendo nossos itens de grade.
Alguns paineis tem texto neles, mas o resta será para as imagens dos quadrinhos. Temos duas opções: podemos adicionar nossas imagens em linha, dentro dos painéis, ou através do CSS. Faremos o último porque o controle é maior no posicionamento e dimensionamento dos gráficos, mas há quem diga que imagens em linha são mais acessíveis. Faça sua escolha.
2. Estilos Básicos
Para a bola (de pelos) continuar rolando, adicionemos alguns estilos, cobrindo a tipografia e cores:
1 |
/* basics */
|
2 |
body { |
3 |
background: #f8f7f2; |
4 |
padding: 0 10%; |
5 |
font: 100%/1.5 'Kalam', cursive; |
6 |
}
|
7 |
|
8 |
h1 { |
9 |
margin: 0; |
10 |
line-height: 1; |
11 |
padding: 10px; |
12 |
color: #251b19; |
13 |
}
|
14 |
|
15 |
p { |
16 |
margin: 0; |
17 |
padding: 10px; |
18 |
color: #251b19; |
19 |
font-size: 1.2em; |
20 |
|
21 |
a { |
22 |
color: #e56633; |
23 |
}
|
24 |
|
25 |
a:hover { |
26 |
text-decoration: none; |
27 |
}
|
Vamos de Kalam, uma fonte web do Google, para nosso texto–estilo escrita à mão é perfeito para quadrinhos. Precisamos adicioná-la no CSS ou em um link no cabeçalho do documento:
1 |
<link href="https://fonts.googleapis.com/css?family=Kalam" rel="stylesheet"> |



3. Nossa Grade
Começando pelo mobile, posicionaremos as coisas em uma coluna com um único painel em cada linha:
1 |
.grid-1 { |
2 |
display: grid; |
3 |
width: 100%; |
4 |
max-width: 770px; |
5 |
margin: 10% auto; |
6 |
grid-template-columns: 1fr; |
7 |
grid-template-rows: auto 200px 200px auto 200px 200px 200px auto 200px 200px auto; |
8 |
grid-gap: 25px; |
9 |
}
|
Olhando nossos tutoriais anteriores sobre Grade, talvez lembre que grid-template-columns
diz quantas colunas teremos e o quão largas serão. grid-template-rows
faz o mesmo para linhas e definiremos onze delas. As que contem imagens terão 200px de altura e as contendo texto serão dimensionadas automaticamente pelo conteúdo. Por fim, grid-gap
definirá nosso espaçamento.
Adicionemos estilos gerais aos nossos painéis:
1 |
.panel { |
2 |
color: white; |
3 |
background-repeat: no-repeat; |
4 |
background-position: center center; |
5 |
background-size: cover; |
6 |
box-shadow: 0px 0px 0px 5px #251b19; |
7 |
}
|
As propriedades background
não causam qualquer impacto visual ainda, mas causarão assim que adicionarmos as imagens. E a box-shadow
agem como borda. Também podemos usar a propriedade border
, mas a box-shadow costuma dar mais flexibilidade.
Vejamos o que temos até agora!
4. Imagens de Gatos
A internet existe para que mesmo, não é? Preparei alguns imagens SVG para adicionar aos painéis, uma-a-uma:
1 |
.panel-1 { |
2 |
background-image: url(cat-1.svg); |
3 |
}
|
Parece bom!
Mas não queremos bordas ao redor de todos os painéis. Removeremo-nos (usando box-shadow: none;
) dos que contem texto, além do da primeira e última imagens.
5. Consultas de Mídia
Essas imagens ainda não estão perfeitas... Pobre Barry, ficando todo cortado. É hora de ir além do mobile e alterar nossa grade para áreas de visualização maiores. Adicionemos alguns consultas de mídia: uma em 400px e outra em 600px (valores arbitrários, use os que quiser):
1 |
/* media query 1 */
|
2 |
@media only screen and (min-width: 400px) { |
3 |
|
4 |
}
|
5 |
|
6 |
/* media query 2 */
|
7 |
@media only screen and (min-width: 600px) { |
8 |
|
9 |
}
|
Nós os usaremos pra alterar o layout da grade em cada caso.
1 |
/* media query 1 */
|
2 |
@media only screen and (min-width: 400px) { |
3 |
|
4 |
.grid-1 { |
5 |
grid-template-columns: repeat(2, 1fr); |
6 |
grid-template-rows: auto 200px auto 200px 200px auto 200px auto; |
7 |
}
|
8 |
|
9 |
}
|
10 |
|
11 |
/* media query 2 */
|
12 |
@media only screen and (min-width: 600px) { |
13 |
|
14 |
.grid-1 { |
15 |
grid-template-columns: repeat(3, 1fr); |
16 |
grid-template-rows: auto 200px 200px 200px auto; |
17 |
}
|
18 |
|
19 |
}
|
Usaremos duas colunas e dez linhs para telas um pouco maiores e três colunas e cinco linhas para ainda maiores.
Abrangendo
Agora que não estão presos a uma única coluna, podemos ser mais criativos. Precisamos, por exemplo, que o título tome toda a largura do quadrinho. O mesmo é verdadeiro do texto dos painéis e da nota sobre direitos de cópia. Mesmo algumas imagens seriam melhor com toda a largura dos painéis. Assim, adicionaremos esses detalhes à primeira consulta de mídia:
1 |
.panel-title, |
2 |
.panel-3, |
3 |
.panel-6, |
4 |
.panel-7, |
5 |
.panel-copyright { |
6 |
grid-column: span 2; |
7 |
}
|
Mudamos a tipografia em alguns lugares, também. No final, temos isso:



Nosso layout de duas colunas está ótimo! Porém, o de três precisa de ajustes.



6. Ajustando o Layout de Três Colunas
Como colocamos o mobile primeiro, as regras aplicadas à nossa primeira consulta de mídia ainda se aplicam a telas maiores. Precisamos trabalhar os painéis e resetar alguns estilos.
Comecemos fazendo .panel-title
tomar três colunas ao invés de duas. Assim, .panel-3
(com texto) pode voltar para grid-column: span 1;
ou grid-column: auto;
O mesmo se aplica a .panel-6
. Com mais algumas mudanças, devemos ter algo assim:
Um Pouquinho de Flexbox
Queremos que o primeiro diálogo seja centralizado verticalmente, então usamos flexbox para isso. Adicionemos isso à segunda consulta de mídia:
1 |
.panel-3 { |
2 |
display: flex; |
3 |
align-items: center; |
4 |
}
|



7. Sobrepondo Painéis
A Grade não nos restringe a blocos equidistantes seguindo o fluxo da página. Também podemos sobrepor os painéis. Tornaremos o texto final um pouco mais interessante, atribuindo à mesmo localização da grade que o próximo painel:
1 |
.panel-7 { |
2 |
grid-column: 1; |
3 |
grid-row: 4; |
4 |
z-index: 1; |
5 |
}
|
6 |
|
7 |
.panel-8 { |
8 |
grid-column: 1 / span 2; |
9 |
grid-row: 4; |
10 |
}
|
Aqui, posicionamos ambos .panel-7
e .panel-8
em grid-column: 1;
e grid-row: 4;
. Isso significa que ambos ocupam o mesmo espaço e o que vem por último no DOM aparece em cima do primeiro.
Podemos usar z-index para alterar a ordem de pilhagem, assim, dando z-index: 1;
para .panel-7
, ele vem para frente:



Nota: como removemos uma linha, precisamos checar se grid-template-rows
está certa.
Adicionemos mais um pouco de estilo ao "Naaah". De novo, os itens de grade não são tão restritos quanto se pensa–podemos mexê-los com margens negativas e até transformações, sem problemas. Adicionando mais alguns estilos ao painel e parágrafos dentro dele, obtemos:



Conclusão
Muito bem–eis o que construímos!
Um exercício legal para usar a Grade do CSS além de introduzir alguns novos conceitos ao mesmo tempo. Espero que tenha curtido–se não se importar, tirarei um cochilo agora.
Leitura Adicional
- Entendendo o Layout em Grade do CSS série para iniciante
- Fonte Sleepy Fat Cat no GraphicRiver
- As Mecânicas dos Quadrinhos
- Entendendo Quadrinhos por Scott McCloud