Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Projeto] deu muito trabalho, mas consegui ajustar o meu css ao figma

Dominando o Flexbox: Como o max-width no Container Pai Salvou o Meu Layout Responsivo

Construir interfaces fidedignas aos protótipos do Figma é uma das etapas mais enriquecedoras no aprendizado de Front-End — e também uma das que mais nos fazem "bater a cabeça". Recentemente, enfrentei um desafio interessante ao estruturar a seção de Categories Cards de um projeto web, e o processo me trouxe um aprendizado técnico valioso sobre CSS.


O Desafio e a Tentativa Inicial

Inicialmente, cometi um erro comum de abordagem: tentei replicar a estrutura dos cards de ofertas reutilizando a mesma marcação de componentes sem considerar as peculiaridades do fluxo dos novos elementos.

Após revisar a aula e comparar minuciosamente meu HTML e CSS com as medidas e regras do Figma, percebi que a quebra de layout não estava nos elementos filhos em si, mas em como o layout se comportava nas transições de viewports (de 768px para 1024px e, finalmente, para 1440px).

Foram dois dias de testes, pesquisas e refatoração, mas o resultado final valeu cada minuto.


O Ponto de Virada: A Abordagem Container-First

O grande aprendizado do dia foi compreender a responsabilidade do elemento pai (.categories-cards) na física do Flexbox.

Em vez de tentar engessar o comportamento de cada card individualmente em cada tamanho de tela, a chave foi aplicar uma trava no container pai utilizando a propriedade max-width.

1. A Matriz 2x2 em Viewports de 1024px

Para a tela de 1024px, os cards precisavam ter uma largura expandida de 430px. No entanto, se o container ocupasse 100% da largura, o Flexbox tentaria encaixar 3 cards na mesma linha antes de quebrar o layout, deixando a grade desproporcional (3 cards no topo e 1 isolado embaixo).

A solução foi limitar o container pai em max-width: 900px:

  • Card 1: 430px
  • Gap: 24px
  • Card 2: 430px
  • Soma da Linha: $430\text{px} + 24\text{px} + 430\text{px} = 884\text{px}$

Como $884\text{px} \le 900\text{px}$, apenas dois cards cabem perfeitamente por linha. O terceiro card estoura o limite do pai e desce automaticamente graças ao flex-wrap: wrap, formando a matriz 2x2 ideal.

2. A Transição para 1440px (Desktop Grande)

Quando a viewport atinge 1440px, o objetivo muda: os 4 cards devem se alinhar em uma única fileira horizontal com 281.25px cada (conforme especificado no Figma).

Para isso, bastou resetar a trava do container para max-width: 100% e redefinir a largura dos cards filhos.


O Código Final

.categories .section-title {
  margin-top: 88px;
  width: 312px;
  height: 98px;
  text-align: center;
  margin-left: auto;
  margin-right: auto;
}

.categories-cards {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  margin-top: 32px;
}

.categories-cards a.card {
  color: var(--text-primary-color);
  background-color: var(--background-secondary-color);
  width: 312px;
  height: 220px;
  box-sizing: border-box;
  padding: 41px 16px;
  border-radius: 8px;
  text-align: center;
  text-decoration: none;
}

.categories-cards a.card.pacotes-internacionais {
  padding: 24px 16px;
}

.categories-cards a.card h3 {
  font-size: 28px;
  font-weight: var(--title-weight);
}

/* Tablet (>= 768px) */
@media screen and (min-width: 768px) {
  .categories-cards {
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
  }
}

/* Laptop / Desktop Intermediário (>= 1024px) */
@media screen and (min-width: 1024px) {
  .categories-cards {
    max-width: 900px; /* Trava o container pai para forçar 2 colunas */
    margin-left: auto;
    margin-right: auto;
  }
  .categories-cards a.card {
    width: 430px;
  }
}

/* Desktop Grande (>= 1440px) */
@media screen and (min-width: 1440px) {
  .categories-cards {
    max-width: 100%; /* Libera a largura total para 4 colunas em linha */
  }
  .categories-cards a.card {
    width: 281.25px;
  }
}
2 respostas

Fala, Esperidião! Tudo bom?

Agradeço por trazer sua solução para o fórum!

Curti demais como apresentou o uso do flexbox para estruturar os cards, destacou a importância do container pai na organização do layout e ainda mostrou como o max-width foi decisivo para manter a responsividade. Esse tipo de explicação é excelente porque conecta teoria com prática e ajuda a entender como pequenas propriedades podem salvar um layout complexo.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Testar em múltiplos dispositivos: garantir que o comportamento do layout se mantenha em diferentes resoluções e navegadores.
  • Documentar decisões: registrar por que certas propriedades foram aplicadas, facilitando manutenção futura.
  • Modularização: separar estilos em componentes reutilizáveis para evitar repetição e facilitar ajustes.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Ah, uma pergunta: você prefere resolver desafios de layout focando em propriedades específicas do CSS, como fez com o max-width, ou gosta mais de explorar frameworks que já trazem soluções prontas para responsividade?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

você prefere resolver desafios de layout focando em propriedades específicas do CSS, como fez com o max-width, ou gosta mais de explorar frameworks que já trazem soluções prontas para responsividade?

Por enquanto eu estou focando em propriedades específicas do CSS, mas eu espero aprender no futuro react para saber o que é mais fácil e oportuno: utilizar as propriedades do CSS ou explorar mais diferentes frameworks à medida que os aprendo.

No momento eu sigo no CSS, porque é até onde eu sei. Mas espero progredir nessa carreira **desenvolvimento front-end react **.