Stas Melnikov, o autor do curso HTML HTML Layout, falou sobre as nuances que podem complicar o trabalho com propriedades CSS personalizadas.Regras de sintaxe de nome de propriedade personalizada
Estamos acostumados ao fato de que as propriedades CSS embutidas não diferenciam maiúsculas de minúsculas. Portanto, os seguintes métodos de declarar uma propriedade de 
border fornecerão o mesmo resultado: 
 button { BORDER: 2px solid  
As propriedades personalizadas, por outro lado, diferenciam maiúsculas de minúsculas; portanto, o exemplo a seguir cria duas propriedades personalizadas diferentes:
 button { --NETOLOGY-BRAND-COLOR:  

Agora, o quadro tornou-se # 800080 (roxo) e o texto tornou-se # 27ae60 (verde).
Valores válidos para propriedades personalizadas
Para uma propriedade CSS regular, você pode definir apenas os valores permitidos pelo padrão. De acordo com o padrão de propriedade customizada, qualquer valor CSS válido existente pode ser usado como um valor. Por exemplo, como todas as seguintes propriedades customizadas:
 .element::before { --color: rgba(0, 0, 0, 1); --hex:  
Por exemplo, vamos definir o quadro com a cor # 800080 para o botão:
 button { --netologyBrandColor:  

Além dos valores padrão, você pode definir uma propriedade customizada como um valor para outro.
 button { --netologyBrandColor:  
O resultado não é diferente do anterior e o botão ainda possui um quadro com a cor # 800080.
Se a propriedade personalizada 
--netologyBrandColor tiver um valor incorreto para a propriedade 
border-color , por exemplo 18px, o quadro ficará preto.
 button { --netologyBrandColor: 18px;  --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); } 

O fato é que, antes que o navegador aplique o valor da propriedade do usuário para a propriedade interna, ele verificará se está correto. Se o valor estiver disponível para a propriedade embutida, o navegador o aplicará. Caso contrário, ele definirá o valor padrão para a propriedade interna.
No nosso caso, 18px é um valor incorreto para a propriedade de 
border-color interna e, portanto, o navegador definirá o valor padrão, ou seja, 
currentColor . Isso é muito fácil de verificar, definindo a propriedade de 
color como # 800080:
 button { --netologyBrandColor: 18px;  --buttonBorderColor: var(--netologyBrandColor); border-width: 2px; border-style: solid; border-color: var(--buttonBorderColor); color:  

Como você pode ver, o navegador aplicou o valor # 800080 para o quadro. Neste exemplo, usei a sintaxe completa para definir o quadro. Mas podemos usar uma pequena, a propriedade da 
border .
 button { --netologyBrandColor: 18px;  --buttonBorderColor: var(--netologyBrandColor); border: 2px solid var(--buttonBorderColor); color:  

Aqui estamos esperando por outra nuance. Há uma seção separada no padrão que descreve o comportamento das propriedades customizadas em tal situação. Segundo ele, se uma propriedade do usuário tem um valor incorreto para uma propriedade embutida, essa propriedade é inválida, portanto o navegador ignorará a propriedade embutida.
Em nosso exemplo, a propriedade de 
border interna possui um dos valores configurados para a propriedade personalizada 
--buttonBorderColor com um valor inválido de 18px. De acordo com o algoritmo descrito, o navegador simplesmente ignorou a propriedade 
border , de modo que o elemento perdeu a borda.
O valor padrão para propriedades customizadas
Quando analisamos o exemplo da função 
var , usamos apenas um parâmetro - o nome da propriedade customizada.
 button { --netologyBrandColor:  
Mas além disso, a função 
var pode aceitar o segundo - o valor padrão. Para declarar um valor padrão, é necessário colocar uma vírgula após o nome da propriedade customizada e escrever o próprio valor.

Quando o navegador percebe que o desenvolvedor não declarou um valor para a propriedade customizada, ele usa o valor padrão. Por exemplo, o valor # 800080 (roxo) para uma propriedade personalizada é 
--netologyBrandColor .
 button { border: 2px solid var(--netologyBrandColor,  


Vemos o quadro e o texto ficarem roxos. Mas se você mover o botão, eles ficarão verdes. Isso indica que o navegador aplicou o valor # 27ae60 à propriedade do usuário, substituindo o valor padrão.
Mas essas não são todas as possibilidades da função 
var . No exemplo anterior, a propriedade customizada 
--netologyBrandColor usada duas vezes, respectivamente, portanto, defino o valor padrão duas vezes.
Mas isso pode ser feito de maneira diferente. A função 
var permite passar outra função 
var , para que você possa definir outra propriedade customizada como o valor padrão. Reescreverei o exemplo anterior usando a propriedade customizada 
--defaultButtonColor :
 button { --defaultButtonColor:  
Externamente, o resultado não será alterado. Mas agora para alterar o valor padrão, você precisa fazer isso apenas em um lugar, e não em vários, como antes.
Herança de propriedades customizadas
O CSS possui um mecanismo de herança que permite que os elementos herdem propriedades dos elementos pai. Nesse sentido, as propriedades customizadas não são diferentes delas. Por exemplo, escreverei o código no qual a propriedade customizada 
--netologyBrandColor herdada do elemento do 
body pai.
 body { --netologyBrandColor:  

Observando o inspetor, você pode observar a inscrição "Herdado do corpo", que mostra que a propriedade personalizada foi obtida do elemento do 
body . Mas se adicionarmos a propriedade customizada 
--netologyBrandColor ao elemento 
button , ela já substituirá a propriedade do elemento 
body .
 body { --netologyBrandColor:  

O inspetor mostra que a propriedade customizada 
--netologyBrandColor elemento 
button substitui a propriedade 
--netologyBrandColor , especificada para o elemento 
body .
Valores globais
No padrão CSS, as Propriedades personalizadas introduziram uma pseudo- 
root especial que permite especificar propriedades personalizadas que se aplicam ao elemento raiz do documento. Por exemplo, em um documento HTML para um elemento 
html .
 :root { --netologyBrandColor:  

No inspetor, podemos ver que a propriedade customizada declarada é aplicada ao elemento html. Mas, além do documento HTML, a pseudo- 
root funciona em documentos SVG. Por exemplo, declararei propriedades personalizadas na tag 
style .
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 28" width="50" height="50">   <style>       :root{           --iconColor:  

E aqui vemos que a pseudo 
root raiz foi adicionada ao elemento raiz SVG. Portanto, isso prova que a pseudo classe raiz se aplica não apenas à tag 
html , mas a qualquer elemento raiz.
Conclusão
Neste artigo, nos deparamos com armadilhas de propriedades personalizadas que podem ser confusas. E, portanto, podemos começar a usá-los. Portanto, no próximo artigo, falarei sobre truques práticos que utilizo em meus projetos.
Dos editores
Cursos de netologia sobre o tema: