1
resposta

Minha solução

index.jsx (CardPost)

export const CardPost = ({ post }) => {
  return (
    <article className={styles.card}>
      <header>
        <figure>
          <Image
            src={post.cover}
            width={438}
            height={133}
            alt={`Capa do post de titulo: ${post.title}`}   
            className={styles.imagemCard}         
          />
        </figure>
      </header>
      <section>
        <h2>{post.title}</h2>
        <p>{post.body}</p>
      </section>
      <footer>
        <Avatar imageSrc={post.author.avatar} name={post.author.username} />
      </footer>
    </article>
  );
};

CardPost.module.css

.card {
  max-width: 486px;
  border-radius: 8px;
  display: flex;
  flex-direction: column;
}

.card header {
  background-color: #888888;
  width: 100%;
  border-radius: 8px 8px 0 0;
}

.card figure {
  padding: 24px;
  display: flex;
  justify-content: center;
  align-items: center;
  margin: 0;
}

.imagemCard {
  border-radius: 8px;
}

.card section {
  color: #bcbcbc;
}

.card section h2 {
  font-size: 18px;
  font-weight: 600;
  margin: 0;
}

.card section p {
  font-size: 15px;
  margin: 8px 0px 0px 0px;
}

.card section,
.card footer {
  background-color: #171d1f;
  padding: 16px;
}

.card footer {
    border-radius: 0 0 8px 8px;
}

index.jsx (Avatar)

export const Avatar = ({ name, imageSrc }) => {
  return (
    <ul className={styles.lista}>
      <li>
        <Image
          src={imageSrc}
          height={32}
          width={32}
          alt={`Avatar do(a) ${name}`}
        />
      </li>
      <li>@{name}</li>
    </ul>
  );
};

Avatar.module.css

.lista {
    list-style-type: none;
    display: flex;
    justify-content: end;
    align-items: center;
    gap: 4.5px;
    color: #888888;
    margin: 0;
    padding: 0;
}

Resultado:

Print solução alura

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá, Miguel!

Sua solução está excelente! Obrigado por compartilhar o seu código.

Você implementou os componentes CardPost e Avatar de forma muito profissional e demonstrou um ótimo domínio das tecnologias envolvidas:

  1. Next.js e Otimização: Você utilizou o componente nativo do Next.js, especificando corretamente as propriedades width, height, e alt. Isso é fundamental para a performance da sua aplicação.

  2. Modularização: O uso de CSS Modules (styles.card, styles.lista) está perfeito, garantindo que os estilos de um componente não interfiram em outros.

  3. Estrutura Semântica: A escolha das tags HTML (

    , , , ,
    • ) está semanticamente correta e é uma ótima prática de desenvolvimento.

O seu código está limpo e muito bem organizado. Parabéns pelo seu trabalho!