Stas Melnikov, o autor do curso HTML HTML Layout, explicou o que são propriedades CSS personalizadas e por que vale a pena explorar.O padrão CSS Custom Properties mudou CSS. Surgiram oportunidades malucas, com as quais só poderíamos sonhar antes. Nós dizemos exatamente o que e por que os iniciantes devem estudá-los o mais rápido possível.
O que é uma propriedade customizada
Uma propriedade customizada é uma propriedade CSS que o próprio desenvolvedor criou. O navegador não sabe nada sobre essa propriedade até que ela seja anunciada.
A declaração de uma propriedade customizada começa com um hífen duplo, seguido por um nome, dois pontos e um valor.

Por exemplo, declare uma propriedade customizada
--netologyBrandColor
com um valor
purple
para o elemento
button
:
button { --netologyBrandColor: purple; }
Agora, o navegador conhece nossa propriedade, mas qual é a sua utilidade?
Recursos de propriedades personalizadas
O primeiro truque é a função
var
. Com essa função, podemos dizer ao navegador para pegar o valor da propriedade customizada declarada e adicioná-lo à propriedade inline.
Para que o navegador faça isso, o desenvolvedor precisa declarar uma propriedade interna, por exemplo,
color
e adicionar a função
var
a ela como um valor, cujo argumento passa o nome da propriedade do usuário.

Por exemplo, adicione uma propriedade personalizada para as propriedades internas de
border
e
color
:
button { --netologyBrandColor: purple; border: 2px solid var(--netologyBrandColor); color: var(--netologyBrandColor); }
No navegador, o botão ficará assim:

Por que estudar propriedades personalizadas se existem variáveis no Sass e elas estão completamente corretas?
Variáveis em pré-processadores como LESS e Sass ajudam a organizar o código, para que seja mais fácil mantê-lo. Por exemplo, no código a seguir, eu uso a variável
$netologyBrandColor
, que armazena a cor principal da marca:
$netologyBrandColor: purple; button { border: 2px solid $netologyBrandColor; color: $netologyBrandColor; }
Depois de converter o código no navegador, veremos o seguinte código:
button { border: 2px solid purple; color: purple; }
Com base no exemplo, fica claro que, depois de converter o código de Sass para CSS, em vez de variáveis, o compilador inseriu seus valores; portanto, podemos dizer que não há variáveis Sass no navegador.
O segundo recurso das propriedades personalizadas é que elas moram em um navegador, para que possamos alterá-las diretamente nele. Por exemplo, altere o valor da propriedade do usuário
--netologyBrandColor
ao passar o mouse sobre o botão.
button { --netologyBrandColor: purple; border: 2px solid var(--netologyBrandColor); color: var(--netologyBrandColor); } button:hover { --netologyBrandColor:

Agora, se o botão tiver um estado de
hover
, os valores das propriedades da
border
e da
color
serão alterados. É por causa desse recurso que as propriedades personalizadas são chamadas de "ativas": elas podem ser alteradas diretamente no navegador e, portanto, alteram os valores das propriedades internas às quais são aplicadas.
Como outro exemplo, alterarei o valor de uma propriedade personalizada com o estado de
focus
.
button { --netologyBrandColor:

A capacidade de alterar dinamicamente as propriedades do usuário pode ser combinada com variáveis Sass ou variáveis MENOS.
Propriedades personalizadas e expressões de mídia
Outra possibilidade de propriedades personalizadas é que seus valores possam ser alternados usando consultas de mídia.
Por exemplo, crie duas propriedades customizadas:
—mq
e
—textColor
. Usando a primeira, exibimos o nome da função de mídia na página e a segunda é necessária para mudar a cor. Em telas com largura de até 768 px, o texto será magenta e, a partir de 769 px, será vermelho.
body::before { content: var(--mq); color: var(--textColor); } @media (max-width: 768px) { body::before { --mq: "max-width: 768px"; --textColor: purple; } } @media (min-width: 769px) { body::before { --mq: "min-width: 769px"; --textColor: red; } }


Propriedades personalizadas e função calc
CSS possui uma função
calc
com a qual você pode executar operações aritméticas. Também pode trabalhar com propriedades personalizadas. Por exemplo, podemos controlar o número de filhos em uma linha:
.child { width: calc(100% / var(--childCount)); }
Se adicionarmos um valor de 5 para a propriedade customizada
--childCount
no navegador, veremos a seguinte imagem:

Para variar, mudarei de 5 para 7 e os elementos serão reconstruídos.

Propriedades personalizadas e SVG
Outra possibilidade de propriedades personalizadas é que elas podem ser usadas para definir valores para propriedades SVG como
fill
,
stroke
,
stroke-width
e outros. Existem duas maneiras de fazer isso.
No primeiro método, usaremos os atributos
fill
,
stroke
e
stroke-width
, para os quais definimos propriedades definidas pelo usuário como o valor.
<svg class="svg-with-attr" viewBox="0 0 26 28"> <path stroke="var(--iconStroke)" stroke-width="var(--iconStrokeWidth)" fill="var(--iconFill)" d="..."> </svg>
E adicione valores para propriedades customizadas ao CSS:
.svg-with-attr{ --iconFill:

O ícone à esquerda é sem estilização e à direita com nossas configurações. Tão simples que podemos personalizar os gráficos.
A segunda maneira é remover seus atributos e substituí-los por propriedades CSS.
<svg class="svg-with-props" viewBox="0 0 26 28"> <path d="..."> </svg>
.svg-with-props { --iconFill:

Eu adicionei especificamente outros valores para as propriedades de
fill
,
stroke
e
stroke-width
para que a diferença entre os exemplos seja visualmente perceptível.
Suporte do navegador
Segundo o
caniuse.com , as propriedades personalizadas funcionam nos navegadores mais modernos, exceto no IE11.

Se o seu projeto tiver muitos usuários com o IE11, não use propriedades personalizadas. Eu poderia dizer como fazer fallbacks, mas com base na minha experiência, acho melhor não usá-los.
Se você não precisar oferecer suporte ao IE11, sinta-se à vontade para usar todos os recursos das propriedades personalizadas.
Conclusão
Espero ter conseguido lhe interessar em propriedades personalizadas. Neste artigo, toquei apenas nas possibilidades e omiti a parte técnica e prática, mas abordarei isso e escreverei mais alguns artigos sobre os princípios do trabalho e dos casos.
Dos editores
Cursos de netologia sobre o tema: