diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/pt-br/web/css/using_css_custom_properties | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/pt-br/web/css/using_css_custom_properties')
-rw-r--r-- | files/pt-br/web/css/using_css_custom_properties/index.html | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/files/pt-br/web/css/using_css_custom_properties/index.html b/files/pt-br/web/css/using_css_custom_properties/index.html new file mode 100644 index 0000000000..ac311cec06 --- /dev/null +++ b/files/pt-br/web/css/using_css_custom_properties/index.html @@ -0,0 +1,346 @@ +--- +title: Utilizando variáveis CSS +slug: Web/CSS/Using_CSS_custom_properties +translation_of: Web/CSS/Using_CSS_custom_properties +--- +<div>{{cssref}}</div> + +<p><strong>Variáveis CSS</strong> são entidades definidas por desenvolvedores, contendo valores específicos para serem reutilizados ao longo do documento. São configuradas usando esta notação (ex: <strong><code>--cor-principal: black;</code></strong> ) e são acessadas usando a funcão {{cssxref("var", "var()")}} (ex: <code>color: <strong>var(--cor-principal)</strong>;</code> )</p> + +<p>Websites complexos tem uma quantidade muito grande de CSS, com uma quantidade de repetição de valores muito frequente. Por exemplo, a mesma cor pode ser usada em centenas de lugares diferentes, requerindo uma pesquisa global e substituição caso esta cor necessite ser trocada. Variáveis CSS permite um valor ser guardado em um lugar, então ser referenciado em muitos outros lugares. Um benefício adicional é a semântica dos identificadores. Por exemplo <code>--cor-principal-texto</code> é mais facil de ser entendido do que <code>#00ff00</code>, especialmente se esta cor também é usada em outro contexto.</p> + +<p>Variáveis CSS estão sujeitas ao efeito cascata do css e herdam seus valores de seus pais.</p> + +<h2 id="Uso_básico">Uso básico</h2> + +<p>Declaração de variável:</p> + +<pre class="brush: css notranslate">elemento { + --cor-bg-principal: brown; +} +</pre> + +<p>Utilizando a variável:</p> + +<pre class="brush:css; highlight:[2] notranslate">elemento { + background-color: var(--cor-bg-principal); +} +</pre> + +<h2 id="Primeiros_Passos_com_Variáveis_CSS">Primeiros Passos com Variáveis CSS</h2> + +<p>Vamos começar com este simples CSS que colore elementos de diferentes classes com a mesma cor:</p> + +<pre class="brush:css; highlight:[3,20,26,32] line-numbers notranslate">.um { + color: white; + background-color: brown; + margin: 10px; + width: 50px; + height: 50px; + display: inline-block; +} + +.dois { + color: white; + background-color: black; + margin: 10px; + width: 150px; + height: 70px; + display: inline-block; +} +.tres { + color: white; + background-color: brown; + margin: 10px; + width: 75px; +} +.quatro { + color: white; + background-color: brown; + margin: 10px; + width: 100px; +} + +.cinco { + background-color: brown; +}</pre> + +<p>Nos aplicaremos isto ao HTML:</p> + +<pre class="brush:html line-numbers notranslate"><div> + <div class="one">1:</div> + <div class="two">2: Text <span class="five">5 - more text</span></div> + <input class="three"> + <textarea class="four">4: Lorem Ipsum</textarea> +</div></pre> + +<p>Que nos leva a isto:</p> + +<p>{{EmbedLiveSample("sample1",600,180)}}</p> + +<p>Note a repetição no CSS. O <em>bacgkround-color</em> (cor de fundo) foi definida como <code>brown</code> em diversos lugares. Para algumas declarações CSS, é possível declarar isso no topo e deixar a herança CSS resolver esse problema naturalmente. Para projetos não triviais, isto nem sempre é possível. Ao declarar uma variável na pseudo-classe :root, um desenvolvedor pode interromper algumas das repetições usando variavel.</p> + +<pre class="brush:css; highlight:[2, 7, 24,30,36] line-numbers notranslate"><code class="">:root { + --main-bg-color: brown; +} + +.um { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 50px; + height: 50px; + display: inline-block; +} + +.dois { + color: white; + background-color: black; + margin: 10px; + width: 150px; + height: 70px; + display: inline-block; +} +.tres { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 75px; +} +.quatro { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 100px; +} + +.cinco { + background-color: var(--main-bg-color); +}</code></pre> + +<p>Isso leva ao mesmo resultado do exemplo anterior e permite uma declaração canônica da propriedade desejada.</p> + +<h2 id="Herançamento_de_Variáveis_CSS">Herançamento de Variáveis CSS</h2> + +<p>Propriedades personalizadas herdam. O que significa que, se algum valor for definido para uma propriedade customizada, o valor de seu pai será usado:</p> + +<pre class="brush: html line-numbers notranslate"><code class=""><div class="one"> + <div class="two"> + <div class="three"></div> + <div class="four"></div> + </div> +</div></code></pre> + +<pre class="brush: css line-numbers notranslate"><code class="">.two { + --test: 10px; +} + +.three { + --test: 2em; +}</code></pre> + +<p>Neste caso, o resultado de <code>var(--test)</code> são:</p> + +<ul> + <li>Para <code>class="two"</code> <code>10px</code></li> + <li>Para <code>class="three"</code> <code>2em</code></li> + <li>Para <code>class="four"</code> <code>10px</code> (herdado de seu pai)</li> + <li>Para <code>class="one"</code> <em>invalid value </em>(valor invalido), que é o valor padrão de qualquer propriedade customizada.</li> +</ul> + +<p>Tenha em mente que estas são propriedades customizadas, não são variáveis CSS reais. O valor é computado onde é necessário, não guardado para usar em outras regras. Por exemplo, você não pode definir uma propriedade á um elemento e esperar recuperar na regra de um <em>irmão descendente</em>. A propriedade é definida somente para o seletor correspondente e seus descendentes, como qualquer CSS normal.</p> + +<h2 id="Valores_de_Fallback_da_propriedade_customizada">Valores de Fallback da propriedade customizada</h2> + +<p>Usando {{cssxref("var", "var()")}} você pode definir multiplos valores de fallback (quando um falha) quando a variável dada não foi definida ainda, isto pode ser útil quando trabalhar com elementos customizados e Shadow DOM.</p> + +<p>O primeiro argumento para a função é o nome da propriedade customizada para ser subistituida.</p> + +<h2 id="Problemas_a_serem_resolvidos">Problemas a serem resolvidos</h2> + +<p>Ao construir sites de grande porte, geralmente os autores têm problemas relacionados à manutenção do CSS. Nestes sites o tamanho do CSS costuma ser consideravel e muitas informações podem ser repetidas em vários lugares. Por exemplo, manter um esquema de cor coerente em um documento requer a reutilização de algumas cores em inúmeras posições nos arquivos CSS. Destas forma modificar o esquema de cores se torna uma tarefa complexa pois nem sempre um simples "Buscar e substituir" é o suficiente.</p> + +<p>A situação se agrava com <a href="http://pt.wikipedia.org/wiki/Frameworks_CSS">Frameworks CSS</a>, onde uma pequena mudança de cores requer a edição do framework em si. Pré-processadores como LESS e SASS são muito úteis nestas situações, mas podem aumentar a complexidade do projeto, pois adiciona um passo extra de processamento. Variáveis CSS ajudam ao agregar alguns benefícios de um pré-processador, sem a necessidade de compilação.</p> + +<p>Uma segunda vantagem destas variáveis é a informação semântica que elas carregam em seu nome. Os arquivos CSS se tornam mais fáceis de serem lidos e compreendidos: <code>cor-principal-texto</code> é de mais fácil entendimento e re-uso que #00ff00, especialmente se a mesma cor for usada em outro contexto.</p> + +<h2 id="Como_Variáveis_CSS_podem_ajudar">Como Variáveis CSS podem ajudar</h2> + +<p>Em linguagens de programação imperativas, como Java, C++ ou mesmo JavaScript, o estado pode ser [do programa] rastreado através da noção de variáveis. Variáveis são nomes simbólicos que guardam um valor atribuído que pode variar com o tempo.</p> + +<p>Em linguagens declarativas como CSS, valores que mudam com o tempo não são comuns e o conceito de variáveis também.</p> + +<p>Porém, o CSS introduz a noção de "variáveis em cascata" para ajudar a solucionar o desafio da manutenção do código. Isto permite a referência simbólica a um valor em toda a árvore do CSS.</p> + +<h2 id="O_que_são_Variáveis_CSS">O que são Variáveis CSS</h2> + +<p>Variáveis CSS atualmente têm duas formas:</p> + +<ul> + <li>variáveis, que são uma associação entre um indentificador e um valor que pode ser usado em substituição a valores comuns, usando a notação funcional <code>var(): var(--variavel-exemplo) </code>retorna o valor de <code>--variavel-exemplo</code>.</li> + <li>propriedades customizadas, que são propriedades especiais na forma de <code>--* </code>onde * representa o nome da variável. Estas variáveis são usadas para definir os valores de uma certa variável: <code>--variavel-exemplo: 20px;</code> é uma declaração CSS, usando a propriedade customizada <code>--*</code> para definir o valor da variável CSS <code>--variavel-exemplo</code> para <code>20px</code>.</li> +</ul> + +<div class="note"><strong>Nota:</strong> O prefixo de propriedade customizada era <code>var-</code> na especificação anterior, porém mudou posteriormente para <code>--</code>. O Firefox 31 e superior seguem a nova especificação. ({{ bug(985838) }})</div> + +<p>Propriedades customizadas são similares a propriedades comuns: elas estão sujeitas ao "efeito cascata" e herdam seu valor da propriedade pai se não forem redefinidas.</p> + +<h2 id="Primeiros_passos_com_Variáveis_CSS">Primeiros passos com Variáveis CSS</h2> + +<p>Vamos começar com este simples CSS que colore elementos de diferentes classes com a mesma cor:</p> + +<div id="sample1"> +<pre class="brush:css; highlight:[3,20,26,32] notranslate">.one { + color: white; + background-color: brown; + margin: 10px; + width: 50px; + height: 50px; + display: inline-block; +} + +.two { + color: white; + background-color: black; + margin: 10px; + width: 150px; + height: 70px; + display: inline-block; +} +.three { + color: white; + background-color: brown; + margin: 10px; + width: 75px; +} +.four { + color: white; + background-color: brown; + margin: 10px; + width: 100px; +} + +.five { + background-color: brown; +} + +</pre> + +<p>Aplicaremos neste HTML:</p> + +<pre class="brush:html notranslate"><div> + <div class="one"></div> + <div class="two">Texto <span class="five">- mais texto</span></div> + <input class="three"> + <textarea class="four">Lorem Ipsum</textarea> +</div> +</pre> + +<p>que resultará em:</p> + +<p>{{EmbedLiveSample("sample1",600,180)}}</p> +</div> + +<p>Perceba a repetição no CSS. A cor do background foi definida como marrom em diversos lugares. Para algumas declarações CSS é possível declarar isto em um elemento superior na cascata e deixar a propriedade ser herdada para resolver o problema. Porém em alguns projetos, isto nem sempre é possível. Ao declarar uma variável na pseudo-classe :root, o autor do CSS pode eliminar algumas repetições utilizando uma variável.</p> + +<div id="sample2"> +<pre class="brush:css; highlight:[2, 7, 24,30,36] notranslate">:root { + --main-bg-color: brown; +} + +.one { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 50px; + height: 50px; + display: inline-block; +} + +.two { + color: white; + background-color: black; + margin: 10px; + width: 150px; + height: 70px; + display: inline-block; +} +.three { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 75px; +} +.four { + color: white; + background-color: var(--main-bg-color); + margin: 10px; + width: 100px; +} + +.five { + background-color: var(--main-bg-color); +} + +</pre> + +<div style="display: none;"> +<pre class="brush:html notranslate"><div> + <div class="one"></div> + <div class="two">Text <span class="five">- more text</span></div> + <input class="three"> + <textarea class="four">Lorem Ipsum</textarea> +</div> +</pre> +</div> + +<p>Isto leva ao mesmo resultado dos exemplos anteriores e ainda permite a declaração da propriedade em um só lugar.</p> + +<h2 id="Hierarquia_das_Variáveis_CSS">Hierarquia das Variáveis CSS</h2> + +<p>Propriedades customizadas herdam os valores. Isto significa que, se nenhum valor for declarado para uma propriedade customizada em um dado elemento, o valor do elemento pai é usado:</p> + +<pre class="brush: html notranslate"><div class="one"> + <div class="two"> + <div class="three"> + </div> + <div class="four"> + </div> + <div> +</div></pre> +</div> + +<p>com o seguinte CSS:</p> + +<pre class="brush: css notranslate">.two { --test: 10px; } +.three { --test: 2em; } +</pre> + +<p>Neste caso o valor de <code>var(--test)</code> são:</p> + +<ul> + <li>para o elemento <code>class="two"</code>: <code>10px</code></li> + <li>para o elemento <code>class="three"</code>: <code>2em</code></li> + <li>para o elemento <code>class="four"</code>: <code>10px</code> (herdado do elemento pai)</li> + <li>para o elemento <code>class="one"</code>: <em>valor inválido</em>, que é o valor padrão de qualquer propriedade customizada.</li> +</ul> + +<h2 id="Validade_e_valores">Validade e valores</h2> + +<p>O conceito clássico de validade, ligado a cada propriedade, não é muito útil em relação a propriedades customizadas. Quando os valores das propriedades customizadas são analizados, o <em>browser </em>não sabe onde a mesma será usada, logo, deve considerar quase todos os valores como <em>válidos</em>.</p> + +<p>Infelizmente estes valores podem ser usados, via a notação funcional <code>var(),</code> em um contexto em que não façam sentido. Propriedades e variáveis customizadas podem levar a declações CSS inválidas, criando um novo conceito de <em>válido no momento da computação</em>.<em> </em></p> + +<h2 id="Compatibilidade_com_browsers">Compatibilidade com browsers</h2> + +<p>{{Compat("css.properties.custom-property")}}</p> + +<div class="note"> +<p><strong>Note:</strong> The custom property prefix was <code>var-</code> in the earlier spec, but later changed to <code>--</code>. Firefox 31 and above follow the new spec. ({{bug(985838)}})</p> +</div> + +<h2 id="See_also">See also</h2> + +<ul> + <li>{{cssxref("--*", "Custom properties")}}</li> +</ul> |