O que são CSS Custom Properties e como elas funcionam?

Propriedades personalizadas CSS, também conhecidas como variáveis CSS, são entidades definidas por autores de CSS que contêm valores específicos para serem reutilizados ao longo de um documento. Eles são um recurso poderoso que permite folhas de estilo mais eficientes, fáceis de manter e flexíveis. A sintaxe para declarar uma propriedade customizada é simples. Começa com dois traços (--) seguidos pelo nome da propriedade:
:root {
  --main-color: #3498db;
}
Neste exemplo, estamos declarando uma propriedade personalizada chamada --main-color com um valor de #3498db. A pseudo-classe :root é comumente usada para declarar propriedades personalizadas globais, pois ela representa o elemento pai de nível mais alto na árvore DOM. Para usar uma propriedade personalizada, você utiliza a função var():
<link rel="stylesheet" href="styles.css">
<button class="button">Click Me</button>
:root {
  --main-color: #3498db;
}

.button {
  background-color: var(--main-color);
}
Isso define a cor de fundo dos elementos com a classe button para o valor armazenado em --main-color. Uma das principais características das propriedades customizadas é que elas seguem a cascata do CSS. Isso significa que você pode redefini-los para elementos ou contextos específicos:
<link rel="stylesheet" href="styles.css">
<div class="alert">This is an alert message.</div>
.alert {
  --main-color: #e74c3c;
  background-color: var(--main-color);
}
Neste caso, elementos com a classe alert usarão um valor diferente de --main-color, sobrescrevendo a definição global. Propriedades personalizadas também suportam valores de fallback. Se uma propriedade personalizada não estiver definida ou for inválida, você pode fornecer um valor de fallback:
<link rel="stylesheet" href="styles.css">
<div class="text">This is some text.</div>
:root {
  --text-color: green;
}

.text {
  color: var(--text-color, green);
}
Aqui, se --text-color não estiver definido, o color será padrão para green. Propriedades personalizadas são particularmente úteis na criação de designs temáticos. Você pode definir um conjunto de propriedades para diferentes temas:
<link rel="stylesheet" href="styles.css">
<div class="light-theme">
  <p>This is some light themed text.</p>
</div>
:root {
  --bg-color: black;
}

body {
  background-color: var(--bg-color);
}

.light-theme {
  --bg-color: white;
  --text-color: black;
  background-color: var(--bg-color);
  color: var(--text-color);
  padding: 10px;
}
Mudar temas se torna tão simples quanto adicionar ou remover uma classe do elemento body. Propriedades customizadas também podem ser usadas com media queries para criar designs responsivos:
<link rel="stylesheet" href="styles.css">

<div class="card">
  <h2>Responsive Design</h2>
  <p>Resize the window to see the card adapt!</p>
</div>
:root {
  --card-width: 90%;
  --card-bg: #f0f0f0;
  --card-padding: 1rem;
  --text-color: #333;
}

/* Tablet screens and up */
@media (min-width: 600px) {
  :root {
    --card-width: 70%;
    --card-bg: #e8f5e9;
    --card-padding: 1.5rem;
  }
}

/* Desktop screens and up */
@media (min-width: 1024px) {
  :root {
    --card-width: 50%;
    --card-bg: #d0f0ff;
    --card-padding: 2rem;
  }
}

body {
  font-family: system-ui, sans-serif;
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  background-color: #fafafa;
}

.card {
  width: var(--card-width);
  background-color: var(--card-bg);
  padding: var(--card-padding);
  color: var(--text-color);
  border-radius: 8px;
  box-shadow: 0 2px 6px rgba(0,0,0,0.1);
  text-align: center;
  transition: all 0.3s ease;
}
Essa abordagem permite layouts responsivos mais fáceis de manter, pois você pode alterar valores em um único lugar em vez de em todo o seu stylesheet. Isso pode reduzir significativamente a repetição em suas folhas de estilo, especialmente para valores complexos usados com frequência. Propriedades personalizadas também podem referenciar outras propriedades personalizadas:
<link rel="stylesheet" href="styles.css">
<button class="button">Click Me</button>
:root {
  --primary-color: #3498db;
  --button-bg: var(--primary-color);
}

button {
  background-color: var(--button-bg);
}
Isso permite criar relacionamentos entre diferentes aspectos de estilo, facilitando a manutenção de temas consistentes em seu site. Embora as propriedades customizadas ofereçam muitas vantagens, é importante estar ciente do suporte delas pelos navegadores. Eles são bem suportados em navegadores modernos, mas navegadores mais antigos podem não reconhecê-los. Sempre tenha um plano de contingência ao usar recursos de ponta. Em conclusão, as propriedades personalizadas do CSS oferecem uma maneira poderosa de criar folhas de estilo mais dinâmicas, flexíveis e fáceis de manter. Eles permitem a criação de designs tematizáveis, simplificam layouts responsivos e possibilitam a manipulação de estilos em tempo de execução. À medida que o desenvolvimento web continua a evoluir, as propriedades customizadas estão se tornando uma ferramenta cada vez mais importante no conjunto de ferramentas de um desenvolvedor, oferecendo novas possibilidades para criar CSS adaptável e eficiente.
Este módulo não possui perguntas. Marque como concluído.