Search buenodc

Nesta página
  1. Contextualização
  2. Arquivos base da atividade
  3. Fase 1 — Variáveis
  4. Fase 2 — Nesting
  5. Fase 3 — Mixins
  6. Fase 4 — Partials
  7. Desafio (opcional)
  8. Fase 5 — Entrega

Atividade PBL — Pré-processadores CSS

Disciplina: Programação Web 2
Professor: Me. Danilo Bueno
Duplas: 2 integrantes
Duração: 4 aulas de 50 minutos (em sala)


Contextualização

Você recebeu o código de um site funcional escrito em CSS puro.

O código funciona, mas está difícil de manter: valores se repetem, seletores são longos e qualquer mudança exige editar o arquivo todo.

Sua tarefa é refatorar esse CSS para SCSS, aproveitando os recursos do Sass para deixar o código mais organizado, reutilizável e fácil de manter.


Arquivos base da atividade

O site base

<!DOCTYPE html>
<html lang="pt-BR">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ana Souza — Dev Profile</title>
    <link rel="stylesheet" href="./_task-base.css">
</head>

<body>

    <header class="topbar">
        <span class="brand">@anasouza</span>
        <nav class="nav">
            <a href="#">Sobre</a>
            <a href="#">Projetos</a>
            <a href="#">Contato</a>
        </nav>
    </header>

    <section class="hero">
        <h1 class="name">Ana Souza</h1>
        <p class="role">Desenvolvedora Front-end</p>
        <p class="bio">
            Apaixonada por interfaces acessíveis e código limpo.
            Sempre aprendendo, sempre construindo.
        </p>
        <div class="actions">
            <a href="#" class="btn-primary">Ver projetos</a>
            <a href="#" class="btn-secondary">Entrar em contato</a>
        </div>
    </section>

    <section class="skills">
        <h2 class="heading">Habilidades</h2>
        <div class="grid">

            <article class="card">
                <h3 class="title">HTML &amp; CSS</h3>
                <p class="desc">Semântica, acessibilidade e layouts modernos com Flexbox e Grid.</p>
                <span class="tag">Intermediário</span>
            </article>

            <article class="card">
                <h3 class="title">JavaScript</h3>
                <p class="desc">DOM, eventos, fetch API e manipulação assíncrona de dados.</p>
                <span class="tag">Básico</span>
            </article>

            <article class="card">
                <h3 class="title">Ferramentas</h3>
                <p class="desc">Git, VS Code, Figma e linha de comando para o fluxo diário.</p>
                <span class="tag">Básico</span>
            </article>

        </div>
    </section>

    <footer class="footer">
        <div class="links">
            <a href="#">GitHub</a> ·
            <a href="#">LinkedIn</a> ·
            <a href="#">E-mail</a>
        </div>
    </footer>

</body>

</html>

o CSS que você vai refatorar

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  font-family: 'Segoe UI', Tahoma, sans-serif;
  background: #f8fafc;
  color: #1e293b;
}

/* TOPBAR */

.topbar {
  background: #2563eb;
  padding: 16px 32px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.topbar .brand {
  color: #fff;
  font-weight: 600;
  font-size: 1.1rem;
}

.topbar .nav {
  display: flex;
  gap: 24px;
}

.topbar .nav a {
  color: #fff;
  text-decoration: none;
}

.topbar .nav a:hover {
  text-decoration: underline;
}

/* HERO */

.hero {
  padding: 64px 32px;
  max-width: 720px;
  margin: 0 auto;
}

.hero .name {
  font-size: 2.5rem;
  color: #2563eb;
  margin-bottom: 8px;
}

.hero .role {
  font-size: 1.1rem;
  color: #64748b;
  margin-bottom: 16px;
}

.hero .bio {
  line-height: 1.7;
  margin-bottom: 32px;
}

.hero .actions {
  display: flex;
  gap: 16px;
}

/* BOTOES */

.btn-primary {
  background: #2563eb;
  color: #fff;
  padding: 12px 24px;
  border-radius: 8px;
  text-decoration: none;
  font-weight: 600;
}

.btn-secondary {
  background: transparent;
  color: #2563eb;
  padding: 12px 24px;
  border-radius: 8px;
  border: 2px solid #2563eb;
  text-decoration: none;
  font-weight: 600;
}

/* HABILIDADES */

.skills {
  max-width: 720px;
  margin: 0 auto 64px;
  padding: 0 32px;
}

.skills .heading {
  font-size: 1.4rem;
  color: #1e293b;
  margin-bottom: 24px;
}

.skills .grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}

/* CARDS */

.card {
  background: #fff;
  border: 1px solid #e2e8f0;
  border-radius: 8px;
  padding: 24px;
}

.card .title {
  font-size: 1rem;
  font-weight: 600;
  color: #1e293b;
  margin-bottom: 8px;
}

.card .desc {
  font-size: 0.9rem;
  color: #64748b;
  margin-bottom: 16px;
  line-height: 1.5;
}

.card .tag {
  display: inline-block;
  background: #eff6ff;
  color: #2563eb;
  padding: 4px 12px;
  border-radius: 999px;
  font-size: 0.8rem;
  font-weight: 600;
}

/* FOOTER */

.footer {
  background: #1e293b;
  padding: 24px 32px;
  text-align: center;
}

.footer .links a {
  color: #94a3b8;
  text-decoration: none;
  margin: 0 12px;
}

.footer .links a:hover {
  color: #fff;
}

Você vai criar os arquivos SCSS. Para compilar, instale o Sass e rode:

sass --watch estilo.scss estilo.css

Caso não consiga realizar a instalação, utilize a alternativa online sem instalação: Sass Playground


Fase 1 — Variáveis

Leia a documentação de variáveis do Sass.

Avalie o CSS base e identifique onde o recurso de variáveis pode ser aplicado para melhorar a manutenibilidade do código.

Aplique as variáveis no seu arquivo SCSS.


Fase 2 — Nesting

Leia a documentação de aninhamento (nesting) do Sass, incluindo o uso do &.

Avalie o CSS base e reorganize os seletores usando nesting onde fizer sentido.


Fase 3 — Mixins

Leia a documentação de mixins do Sass.

Avalie o SCSS que você criou até agora e identifique padrões que poderiam ser abstraídos em um ou mais mixins.


Fase 4 — Partials

Leia a documentação de partials e do sistema de módulos do Sass (@use).

Divida seu SCSS em arquivos modulares e use @use para importá-los em um arquivo principal.


Desafio (opcional)

Leia sobre @extend e placeholders (%).

Avalie se há situações no seu SCSS onde @extend faria mais sentido do que um mixin. Aplique onde julgar adequado e registre no relatório.


Fase 5 — Entrega

Faça o questionário e entregue os arquivos refatorados na atividade do Moodle, conforme instruído. Todos os integrantes do grupo devem fazer a entrega individualmente.

  1. scss-refatorado.zip — todos os arquivos .scss criados pelo grupo