Flexbox (Parte 2): Cartões Responsivos, Quebra de Linhas e Itens Flexíveis
Olá, equipa! Bem-vindos de volta à segunda parte do nosso mergulho no Flexbox.
Na primeira parte, aprendemos a ser o "maestro" da orquestra, dizendo ao contentor (display: flex) como organizar os músicos (os nossos itens). Aprendemos a alinhá-los com justify-content e align-items. Mas o que acontece quando os músicos são muitos e o palco é pequeno? E se quisermos que um músico específico tenha mais destaque que os outros?
Hoje, vamos dar instruções individuais a cada músico. Vamos aprender a controlar como os itens crescem, encolhem e se comportam quando o espaço acaba, permitindo-nos criar layouts complexos e responsivos como galerias de cartões.
Parte 1: flex-wrap - O Que Acontece Quando o Espaço Acaba?
Por defeito, os itens flex tentam caber todos na mesma linha, mesmo que isso signifique espremerem-se até ficarem ilegíveis. Para resolver isto, temos a propriedade flex-wrap no nosso contentor.
flex-wrap: wrap;
Esta simples linha de código diz ao contentor: "Quando os teus filhos já não couberem na mesma linha, podes deixá-los 'quebrar' para a linha de baixo". É a base para criar galerias que se adaptam a qualquer tamanho de ecrã!
Parte 2: Controlando os Itens Flexíveis (A Propriedade flex)
Esta é a parte mais poderosa. Enquanto display: flex se aplica ao pai, a propriedade flex aplica-se aos filhos (flex-items). Ela é um atalho para três propriedades: flex-grow, flex-shrink e flex-basis.
flex-grow(Crescer): Define a capacidade de um item crescer se houver espaço extra. Um valor de0(o padrão) significa "não cresças". Um valor de1significa "agarra em todo o espaço livre que conseguires e divide-o por igual com os outros itens que também querem crescer".flex-shrink(Encolher): Define a capacidade de um item encolher se não houver espaço suficiente.flex-basis(Tamanho Base): Define o tamanho inicial do item antes de qualquer cálculo de crescimento ou encolhimento. Podes pensar nisto como uma versão mais inteligente da propriedadewidth.
Parte 3: Mão na Massa! Criando uma Galeria de Cartões Responsiva
Vamos aplicar este conhecimento para construir algo prático. Apaga o exemplo anterior do teu index.html e substitui-o por este:
HTML:
<h2>A Nossa Equipa</h2>
<div class="card-container">
<div class="card">
<h3>Programador 1</h3>
<p>Especialista em HTML e CSS. Focado em criar estruturas sólidas.</p>
</div>
<div class="card">
<h3>Programador 2</h3>
<p>Apaixonado por CSS e design. Transforma o código em algo bonito.</p>
</div>
<div class="card">
<h3>Programador 3</h3>
<p>O futuro especialista em JavaScript e interatividade.</p>
</div>
<div class="card">
<h3>Programador 4</h3>
<p>Responsável por garantir que os layouts funcionam em todos os ecrãs.</p>
</div>
</div>
CSS (adiciona isto ao teu estilos.css):
.card-container {
display: flex;
flex-wrap: wrap; /* Permite que os cartões quebrem para a linha de baixo */
justify-content: center; /* Centra os cartões na página */
gap: 16px; /* Espaço entre os cartões */
padding: 20px;
}
.card {
background-color: white;
border: 1px solid #ddd;
border-radius: 8px;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
padding: 20px;
/* A MAGIA ACONTECE AQUI */
flex-basis: 300px; /* Cada cartão tenta ter 300px de largura */
flex-grow: 1; /* Mas se houver espaço extra, ele pode crescer! */
}
Guarda e vê o resultado! Redimensiona a janela do teu navegador. Vais ver que os cartões se reorganizam perfeitamente, quebrando para a linha de baixo em ecrãs mais pequenos e crescendo para preencher o espaço em ecrãs maiores. Mágico!
Conclusão
Uau! Dominámos o Flexbox. Agora tens uma das ferramentas mais poderosas do CSS moderno no teu arsenal. Com flex-wrap e a propriedade flex (flex-grow, flex-basis), consegues criar layouts dinâmicos e responsivos que antes exigiriam cálculos e truques complicados.
O Flexbox é incrível para alinhar itens numa única dimensão (uma linha ou uma coluna). Mas e se quisermos controlar o layout de uma página inteira, com linhas E colunas ao mesmo tempo? Para isso, existe uma ferramenta ainda mais poderosa: o CSS Grid. Na próxima aula, vamos construir o esqueleto da nossa página com ele.
Comentários
Enviar um comentário