<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ CSS - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ CSS - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 08:43:26 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/css/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ A maneira 100% correta de se fazer breakpoints em CSS ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: David Gilbertson Pelos próximos minutos, quero que você esqueça o CSS, esqueça o desenvolvimento para a web e esqueça as interfaces digitais de usuário. À medida que você esquece essas coisas, quero que permita sua mente vagar. Voltar no tempo. De volta à sua juventude. De volta ao ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/a-maneira-100-correta-de-se-fazer-breakpoints-em-css/</link>
                <guid isPermaLink="false">66faaa989d6e9804088f1084</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 01 Oct 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/the-100-correct-way-to-do-css-breakpoints-88d6a5ba1862/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The 100% correct way to do CSS breakpoints</a>
      </p><p>Escrito por: David Gilbertson</p><p>Pelos próximos minutos, quero que você esqueça o CSS, esqueça o desenvolvimento para a web e esqueça as interfaces digitais de usuário.</p><p>À medida que você esquece essas coisas, quero que permita sua mente vagar. Voltar no tempo. De volta à sua juventude. De volta ao seu primeiro dia de escola.</p><p>Era um tempo mais simples, quando tudo com o que você precisava se preocupar era com desenhar formas e manter sua incontinência sob controle.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png" class="kg-image" alt="1_XoDgRc5GXaxo7j47ClsIgw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_XoDgRc5GXaxo7j47ClsIgw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="49" loading="lazy"></figure><p>Dê uma olhada nos pontos acima. Percebe como alguns deles estão agrupados e outros estão espalhados? O que eu quero que você faça é dividi-los em cinco grupos para mim, da maneira que achar melhor.</p><p>Vá em frente. Após verificar que ninguém está olhando, desenhe um círculo ao redor de cada um dos cinco grupos com seu dedinho infantil.</p><p>Você, provavelmente, chegou a algo semelhante ao que está abaixo, certo? Seja o que for que você fizer, não me diga que rolou a página sem fazer o exercício. 😒</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png" class="kg-image" alt="1_cZcTR2tVMzYg1U1h3cqdNg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_cZcTR2tVMzYg1U1h3cqdNg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="69" loading="lazy"></figure><p>Claro, aqueles dois pontos à direita poderiam ir para qualquer um dos lados. Se você os agrupou juntos, tudo bem, eu acho. Dizem que não há resposta errada, mas eu nunca estive errado, então nunca estive do lado receptor desse ditado específico.</p><p>Antes de continuar, você desenhou algo assim?</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png" class="kg-image" alt="1_RZryP0xAyOy1_WRpBdPIog" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_RZryP0xAyOy1_WRpBdPIog.png 800w" sizes="(min-width: 720px) 720px" width="800" height="67" loading="lazy"></figure><p>Provavelmente, não, certo?</p><p>É basicamente isso que você estaria fazendo se definisse seus <em>breakpoints</em> em posições correspondentes à largura exata dos dispositivos populares (320px, 768px, 1024px).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_pwC0py16i-sQr1agaP26QQ.png" class="kg-image" alt="1_pwC0py16i-sQr1agaP26QQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_pwC0py16i-sQr1agaP26QQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_pwC0py16i-sQr1agaP26QQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="67" loading="lazy"></figure><p>Já ouviu ou disse algo do tipo?</p><blockquote>"O breakpoint médio vai <em>até</em> 768px, ou inclui 768? Entendi... e isso é o modo paisagem do iPad, ou 'grande'? Ah, grande é de 768px <em>e acima</em>. Entendi. E pequeno é 320px? O que é essa faixa de 0 a 319px? Um breakpoint <em>para formigas</em>?"</blockquote><p>Eu poderia seguir em frente e mostrar os breakpoints corretos e deixar por isso mesmo, mas acho muito curioso que o método acima ("agrupamento bobo") seja tão disseminado.</p><p>Por que isso acontece?</p><p>Acho que a resposta para esse problema, como tantos outros problemas, se resume a terminologia desalinhada.</p><p>Acho que confundimos "limites" e "faixas" em nossas discussões e implementações de <em>breakpoints</em>.</p><p>Me diga, se você faz <em>breakpoints</em> no Sass, você tem uma variável chamada <code>$large</code> que é, digamos, 768px?</p><p>É o limite inferior da faixa que você chama de grande, ou o limite superior? Se for o inferior, então você não deve ter <code>$small</code> porque o valor deste deveria ser <code>0</code>, certo?</p><p>Se for o limite superior, então como você definiria um <em>breakpoint</em> <code>$extra-large</code>? Deve ser uma consulta de mídia com um <code>min-width</code> de <code>$medium</code>, certo?</p><p>Se você estiver se referindo apenas a um limite quando diz grande, então teremos confusão mais tarde porque uma consulta de mídia é sempre uma <em>faixa</em>.</p><p>Essa situação é uma bagunça e estamos perdendo tempo pensando nisso. Então, tenho três sugestões:</p><ol><li>Obtenha seus <em>breakpoints</em> corretamente</li><li>Nomeie suas <em>faixas</em> de maneira sensata</li><li>Seja declarativo</li></ol><h3 id="dica-n-1-obtenha-seus-breakpoints-corretamente">Dica nº 1: obtenha seus <em>breakpoints</em> corretamente</h3><p>Então, quais são os <em>breakpoints</em> corretos?</p><p>Seu "eu" de jardim de infância já desenhou os círculos. Eu apenas os transformarei em retângulos para você.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png" class="kg-image" alt="1_-ldpo5wcYVnuyRFbO24WPQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_-ldpo5wcYVnuyRFbO24WPQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="60" loading="lazy"><figcaption>600px, 900px, 1200px e 1800px, se você planeja dar algo especial para as pessoas com monitores gigantes.</figcaption></figure><p>Aqueles pontos com os quais seu "eu" jovem se divertiu representam na verdade os 14 tamanhos de tela mais comuns:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png" class="kg-image" alt="1_199KbL2oM2P5d4pFMBXYxQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_199KbL2oM2P5d4pFMBXYxQ.png 774w" sizes="(min-width: 720px) 720px" width="774" height="500" loading="lazy"><figcaption>Crédito da imagem: <a href="http://gs.statcounter.com/#desktop+mobile+tablet-resolution-ww-monthly-201608-201610-bar">http://gs.statcounter.com/#desktop+mobile+tablet-resolution-ww-monthly-201608-201610-bar</a></figcaption></figure><p>Então, podemos fazer uma imagem bonita que permita o fácil fluxo de palavras entre as pessoas vestidas como empresários, designers, desenvolvedores e testadores.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png" class="kg-image" alt="1_7YeOvzoYgUEDJdfQy2ERXg--1-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_7YeOvzoYgUEDJdfQy2ERXg--1-.png 800w" sizes="(min-width: 720px) 720px" width="800" height="291" loading="lazy"><figcaption><em>Estou arrependido de minha escolha de laranja e verde, mas não vou refazer todas essas imagens agora.</em></figcaption></figure><h3 id="dica-n-2-nomeie-suas-faixas-de-maneira-sensata">Dica nº 2: nomeie suas faixas de maneira sensata</h3><p>Claro, você poderia nomear seus <em>breakpoints </em>de <a href="https://css-tricks.com/naming-media-queries/">papai urso e bebê urso</a>, se quiser. Se eu for me sentar com um designer, porém, e discutir como o site deve parecer em dispositivos diferentes, quero que seja o mais rápido possível. Se nomear um tamanho de <em>tablet em retrato</em> facilita isso, então ótimo. Aliás, até perdoaria você por chamar de "iPad em retrato".</p><p>O CSS do seu site, porém, tem uma vida útil de cerca de três anos (a menos que seja o Gmail). O iPad está conosco há o dobro desse tempo e ainda não foi destronado. Sabemos que a Apple não faz mais novos produtos, eles apenas removem coisas dos existentes (botões, buracos etc).</p><p>Então, o 1024 x 768 veio para ficar, pessoal. Vamos não enterrar nossas cabeças na areia. Fato curioso: avestruzes não vivem em cidades porque não há areia e, portanto, nenhum lugar para se esconder dos predadores.</p><p>Conclusão: a comunicação é importante. Não se desligue propositalmente de vocabulário útil.</p><h3 id="dica-n-3-seja-declarativo">Dica nº 3: seja declarativo</h3><p>Eu sei, eu sei, essa palavra "declarativo" de novo. Vou colocar de outra maneira: seu CSS deve definir <em>o que</em> ele quer que aconteça, não <em>como</em> deve acontecer. O "como" deve ficar escondido em algum tipo de <em>mixin</em>.</p><p>Como discutido anteriormente, parte da confusão em torno dos <em>breakpoints</em> é que as variáveis que definem um <em>limite</em> de um intervalo são usadas como o <em>nome</em> do intervalo. <code>$large: 600px</code> simplesmente não faz sentido se <code>large</code> é um intervalo. É o mesmo que dizer <code>var coordenadas = 4;</code>.</p><p>Podemos esconder esses detalhes dentro de um <em>mixin</em> em vez de expô-los para serem usados no código. Podemos fazer melhor e não usar variáveis de todo.</p><p>No início, eu fiz o trecho abaixo como um exemplo simplificado. Eu realmente acho que cobre todos os aspectos. Para vê-lo em ação, <a href="http://codepen.io/davidgilbertson/pen/aBpJzO">veja este pen</a>. Estou usando Sass porque não consigo imaginar construir um site sem ele. A lógica se aplica ao CSS ou Less da mesma maneira.</p><figure class="kg-card kg-code-card"><pre><code>@mixin for-phone-only {
  @media (max-width: 599px) { @content; }
}
@mixin for-tablet-portrait-up {
  @media (min-width: 600px) { @content; }
}
@mixin for-tablet-landscape-up {
  @media (min-width: 900px) { @content; }
}
@mixin for-desktop-up {
  @media (min-width: 1200px) { @content; }
}
@mixin for-big-desktop-up {
  @media (min-width: 1800px) { @content; }
}

// uso
.my-box {
  padding: 10px;

  @include for-desktop-up {
    padding: 20px;
  }
}
</code></pre><figcaption>Observe que estou forçando o desenvolvedor a especificar os sufixos <code>-up</code> ou <code>-only</code>.</figcaption></figure><blockquote>A ambiguidade gera confusão.</blockquote><p>Uma crítica óbvia pode ser que isso não lida com <em>media queries</em> personalizadas. Bem, boas notícias, pessoal. Se você quiser uma <em>media query</em> personalizada, escreva uma <em>media query</em> personalizada. Na prática, se eu precisasse de mais complexidade do que o acima, cortaria minhas perdas e correria para o abraço amoroso do kit de ferramentas <a href="http://susydocs.oddbird.net/en/latest/toolkit/#breakpoint">Susy</a>.</p><p>Outra crítica pode ser que eu tenho oito <em>mixins</em> aqui. Com certeza um único <em>mixin</em> seria a decisão mais sensata, para então passar o tamanho necessário, assim:</p><pre><code>@mixin for-size($size) {
  @if $size == phone-only {
    @media (max-width: 599px) { @content; }
  } @else if $size == tablet-portrait-up {
    @media (min-width: 600px) { @content; }
  } @else if $size == tablet-landscape-up {
    @media (min-width: 900px) { @content; }
  } @else if $size == desktop-up {
    @media (min-width: 1200px) { @content; }
  } @else if $size == big-desktop-up {
    @media (min-width: 1800px) { @content; }
  }
}

// uso
.my-box {
  padding: 10px;

  @include for-size(desktop-up) {
    padding: 20px;
  }
}
</code></pre><p>Claro, funciona. Porém, você não terá erros em tempo de compilação se passar um nome não suportado. Passar uma variável sass significa expor 8 variáveis só para passar para um <em>switch</em> em um <em>mixin</em>.</p><p>Sem mencionar que a sintaxe <code>@include for-desktop-up {...}</code> é muito mais bonita do que <code>@include for-size(desktop-up) {...}</code>.</p><p>Uma crítica de ambos esses trechos de código pode ser que estou digitando 900px duas vezes, e também 899px. Certamente eu deveria apenas usar variáveis e subtrair 1 quando necessário.</p><p>Se você quiser fazer isso, sinta-se à vontade, mas há duas razões pelas quais eu não o faria:</p><ol><li>Estas não são coisas que mudam frequentemente. Também não são números que são usados em outro lugar na base de código. Nenhum problema é causado pelo fato de que eles <em>não são</em> variáveis — a menos que você queira expor seus pontos de interrupção Sass para um script que injeta um objeto JS com essas variáveis na sua página.</li><li>A sintaxe é <em>horrível</em> quando você quer transformar números em strings com Sass. Abaixo está o preço que você paga por acreditar que repetir um número duas vezes é o pior de todos os males:</li></ol><pre><code>@mixin for-size($range) {
  $phone-upper-boundary: 600px;
  $tablet-portrait-upper-boundary: 900px;
  $tablet-landscape-upper-boundary: 1200px;
  $desktop-upper-boundary: 1800px;

  @if $range == phone-only {
    @media (max-width: #{$phone-upper-boundary - 1}) { @content; }
  } @else if $range == tablet-portrait-up {
    @media (min-width: $phone-upper-boundary) { @content; }
  } @else if $range == tablet-landscape-up {
    @media (min-width: $tablet-portrait-upper-boundary) { @content; }
  } @else if $range == desktop-up {
    @media (min-width: $tablet-landscape-upper-boundary) { @content; }
  } @else if $range == big-desktop-up {
    @media (min-width: $desktop-upper-boundary) { @content; }
  }
}

// uso
.my-box {
  padding: 10px;

  @include for-size(desktop-up) {
    padding: 20px;
  }
}
</code></pre><p>Ah, e já que adotei um tom de desabafo nos últimos parágrafos... eu sinto pena do tolo que faz algo mágico como armazenar <em>breakpoints</em> em uma lista do Sass e iterar sobre eles para gerar consultas de mídia, ou algo igualmente ridículo que futuros desenvolvedores terão dificuldade em decifrar.</p><p>Finalmente, você pode estar pensando "eu não deveria estar baseando meus pontos de interrupção no conteúdo, e não nos dispositivos?". Bem, estou maravilhado que você tenha chegado até aqui e a resposta é sim... para sites com um layout único. Ou se você tiver múltiplos layouts e estiver feliz em ter um conjunto diferente de <em>breakpoints</em> para cada layout. Ah, e também se o design do seu site não mudar com frequência, ou se você estiver feliz em atualizar seus <em>breakpoints</em> quando seus designs forem atualizados, já que você vai querer <em>mantê-los</em> baseados no conteúdo, certo?</p><p>Para sites complexos, a vida é muito mais fácil se você escolher alguns pontos de interrupção para usar em todo o site.</p><p>Terminamos! Este artigo não foi tão cheio de bichinhos quanto eu gostaria que fosse – deixe-me ver se consigo pensar em uma desculpa para incluir alguns...</p><p>Ah, já sei!</p><h3 id="dicas-b-nus-para-o-desenvolvimento-de-breakpoints">Dicas bônus para o desenvolvimento de <em>breakpoints</em></h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png" class="kg-image" alt="1_ClU6ZZNLtd0ux8nqRPfhng" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/1_ClU6ZZNLtd0ux8nqRPfhng.png 800w" sizes="(min-width: 720px) 720px" width="800" height="460" loading="lazy"><figcaption><em>Sim, até mesmo o Flickr tem pontos de interrupção em 768 e 1400</em></figcaption></figure><ol><li>Se você precisar experimentar com <em>breakpoints</em> de CSS para tamanhos de tela maiores do que o monitor que você está usando, utilize o modo 'responsivo' nas ferramentas de desenvolvedor do Chrome e digite qualquer tamanho gigante que você quiser.</li><li>A barra azul mostra <em>media queries</em> com "largura máxima" (max-width), a barra laranja mostra <em>media queries</em> com "largura mínima" (min-width), e a barra verde mostra <em>media queries</em> com tanto uma largura mínima quanto uma máxima.</li><li>Clicar em uma <em>media query</em> ajusta a largura da tela para aquela largura. Se você clicar em uma <em>media query</em> verde mais de uma vez, ela alterna entre as larguras máxima e mínima.</li><li>Clique com o botão direito em uma <em>media query</em> na barra de <em>media queries</em> para ir à definição dessa regra no CSS.</li></ol><p>Ei, agradeço a leitura! Compartilhe o artigo, se acha que eu mereço, ou deixe ele no esquecimento, como ficará minha autoestima se você não o compartilhar. 😳</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tamanho de fonte em HTML – como alterar o tamanho do texto usando estilo em CSS em linha ]]>
                </title>
                <description>
                    <![CDATA[ Em HTML, a fonte que você escolhe desempenhará um papel importante na aparência de suas páginas da web. Você pode escolher a cor, o peso, o tamanho da fonte e assim por diante. Todas essas características fazem com que seus sites e aplicações para a web fiquem melhores e mais ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/tamanho-de-fonte-em-html-como-alterar-o-tamanho-do-texto-usando-estilo-em-css-em-linha/</link>
                <guid isPermaLink="false">66e72a5d275cfd040913578f</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 18 Sep 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/fontsize-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/html-font-size-how-to-change-text-size-using-inline-css-style/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">HTML Font Size – How to Change Text Size Using Inline CSS Style</a>
      </p><p>Em HTML, a fonte que você escolhe desempenhará um papel importante na aparência de suas páginas da web.</p><p>Você pode escolher a cor, o peso, o tamanho da fonte e assim por diante. Todas essas características fazem com que seus sites e aplicações para a web fiquem melhores e mais apresentáveis para o usuário.</p><p>Com a propriedade <code>font-size</code> no CSS, você pode mudar o tamanho do texto que está na página da web. Você pode usar essa propriedade em qualquer tipo de CSS que estiver escrevendo – externo, interno ou em linha.</p><p>Neste artigo, eu vou mostrar como mudar o tamanho do texto com a propriedade <code>font-size</code> no CSS em linha.</p><h2 id="o-que-css-em-linha">O que é CSS em linha?</h2><p>CSS em linha (em inglês, <em>inline</em>) é uma das três maneiras diferentes que você pode usar para estilizar qualquer elemento do HTML.</p><p>Em vez de direcionar o elemento com um atributo de classe ou id, ou o próprio elemento como o seletor e estilizá-lo dessa maneira, você coloca todos os estilos do CSS na tag de abertura do elemento.</p><p>Além disso, você precisa garantir que todas as propriedades e valores dos estilos estejam dentro do atributo <code>style</code>. Esse atributo <code>style</code> é um dos inúmeros atributos aceitos por todas as tags do HTML.</p><p>No exemplo abaixo, eu mudo a cor do fundo do texto para <code>crimson</code>, a cor do texto para <code>#f1f1f1</code> (cinza-claro) e o peso da fonte para <code>bold</code> com CSS em linha.</p><pre><code>&lt;p style="background-color: crimson; color: #f1f1f1; font-weight: bold"&gt;
      Hello Campers...
&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inline-styling-example.png" class="kg-image" alt="inline-styling-example" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/inline-styling-example.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/inline-styling-example.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inline-styling-example.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="765" loading="lazy"></figure><p>A propósito, meu navegador está com zoom de 400%, por isso tudo aparece tão grande. Eu não apliquei nenhum estilo adicional para conseguir isso. 🙂</p><h2 id="como-mudar-o-tamanho-do-texto-usando-css-em-linha">Como mudar o tamanho do texto usando CSS em linha</h2><p>Para mudar o tamanho do seu texto com CSS em linha, você precisa fazer isso com o atributo <code>style</code>. Você digita a propriedade <code>font-size</code> e, então, atribui a ela um valor.</p><p>Existem valores embutidos como <code>large</code>, <code>larger</code>, <code>medium</code>, <code>small</code>, <code>x-large</code> e assim por diante:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/inbuilt-properties.png" class="kg-image" alt="inbuilt-properties" width="436" height="244" loading="lazy"></figure><p>No trecho de código abaixo, eu mudo o tamanho do texto "Hello Campers…" para <code>x-large</code>, um dos valores embutidos da propriedade <code>font-size</code>.</p><pre><code>&lt;p style="font-size: x-large"&gt;Hello Campers...&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-inbuilt-value.png" class="kg-image" alt="font-style-with-inbuilt-value" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/font-style-with-inbuilt-value.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/font-style-with-inbuilt-value.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-inbuilt-value.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="764" loading="lazy"></figure><p>Você também pode definir o valor da propriedade <code>font-size</code> usando um número com qualquer unidade, como pixels (px), rem ou em.</p><p>É melhor usar valores numerados porque eles dão mais liberdade para escolher qualquer tamanho de fonte que você quiser.</p><p>No trecho de código abaixo, eu mudei o tamanho do texto para <code>30px</code> com CSS em linha:</p><pre><code>&lt;p style="font-size: 30px"&gt;Hello Campers...&lt;/p&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-numbered-value.png" class="kg-image" alt="font-style-with-numbered-value" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/09/font-style-with-numbered-value.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2024/09/font-style-with-numbered-value.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2024/09/font-style-with-numbered-value.png 1280w" sizes="(min-width: 720px) 720px" width="1280" height="767" loading="lazy"></figure><h2 id="conclus-o">Conclusão</h2><p>Neste artigo, você aprendeu como mudar o tamanho do texto com CSS em linha e a propriedade <code>font-size</code>. Você também viu como pode atribuir valores à propriedade <code>font-size</code>.</p><p>Apenas um aviso: o CSS em linha é ótimo para estilizar, mas você não deve depender muito dele, pois dificulta a leitura do seu HTML, especialmente se você estiver trabalhando em equipe. Você não quer ser o único capaz de ler seu próprio código.</p><p>Esteja ciente de que o CSS em linha também sobrescreve qualquer estilização definida com estilo interno ou externo. Você deve usar estilo externo ou estilo interno, pois eles separam seus códigos HTML e CSS, o que é melhor para a legibilidade.</p><p>Ao atribuir valores à propriedade <code>font-size</code>, é melhor atribuir os valores em unidades <code>rem</code> ou <code>em</code> em vez de <code>px</code>, por exemplo. Isso porque, quando você usa <code>rem</code>, o navegador será capaz de fazer ajustes no tamanho da fonte conforme o usuário aproxima ou afasta o texto usando o zoom, o que não acontece quando você usa <code>px</code>.</p><p>Agradecemos pela leitura! Siga programando! 😀</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Flexbox – a ficha informativa perfeita de flexbox no CSS (com diagramas animados) ]]>
                </title>
                <description>
                    <![CDATA[ Esta ficha informativa abrangente do flexbox para o CSS tratará de tudo o que você precisa saber para começar a usar o flexbox em seus projetos para a web. O layout do flexbox permite que você faça a formatação do HTML facilmente. O flexbox simplifica o alinhamento de itens, tanto ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/flexbox-a-ficha-informativa-perfeita-de-flexbox-no-css-com-diagramas-animados/</link>
                <guid isPermaLink="false">66aa341997bcd50408769b77</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 31 Jul 2024 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/chuttersnap-fyaTq-fIlro-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/flexbox-the-ultimate-css-flex-cheatsheet/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Flexbox - The Ultimate CSS Flex Cheatsheet (with animated diagrams!)</a>
      </p><p>Esta ficha informativa abrangente do <code>flexbox</code> para o CSS tratará de tudo o que você precisa saber para começar a usar o flexbox em seus projetos para a web.</p><p>O layout do flexbox permite que você faça a formatação do HTML facilmente. O flexbox simplifica o alinhamento de itens, tanto na vertical como na horizontal, usando linhas (em inglês, <em>rows</em>) e colunas. Os itens se ajustarão a tamanhos diferentes com <em><strong>flex</strong>ibilidade</em> para preencher o espaço. Isso torna mais fácil criar um design responsivo.</p><p>O <code>flexbox</code> é ótimo para o uso &nbsp;em um layout mais geral em seu site ou aplicação para a web. Ele é fácil de aprender, tem o suporte de todos os navegadores mais modernos e não leva muito tempo para que você aprenda o básico. Ao final deste guia, você estará pronto para começar a usar o <code>flexbox</code> em seus projetos para a web.</p><p>O artigo inclui <a href="https://www.freecodecamp.org/news/an-animated-guide-to-flexbox-d280cf6afc35/">gifs animados feitos por Scott Domes</a>, que ajudarão você a entender e visualizar o flexbox com maior facilidade.</p><h2 id="todas-as-propriedades-do-flexbox"><strong>Todas as propriedades do flexbox</strong></h2><p>Aqui temos uma lista de todas as propriedades do flexbox que podem ser usadas para posicionar elementos no CSS. Em seguida, veremos como elas funcionam.</p><h3 id="o-css-que-pode-ser-aplicado-ao-cont-iner"><strong><strong>O <strong>CSS </strong>que pode ser aplicado ao <strong>cont</strong>ê<strong>iner</strong></strong></strong></h3><figure class="kg-card kg-code-card"><pre><code class="language-css">display: flexbox | inline-flex;
flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow: &lt;'flex-direction'&gt; || &lt;'flex-wrap'&gt;
justify-content: flex-start | flex-end | center | space-between | space-around;
align-items: flex-start | flex-end | center | baseline | stretch;
align-content: flex-start | flex-end | center | space-between | space-around | stretch;</code></pre><figcaption>Lista de propriedades e seus valores</figcaption></figure><h3 id="o-css-que-pode-ser-aplicado-aos-itens-elementos-no-cont-iner"><strong><strong>O <strong>CSS </strong>que pode ser aplicado aos <strong>ite</strong>n<strong>s/element</strong>o<strong>s </strong>no<strong> cont</strong>â<strong>iner</strong></strong></strong></h3><pre><code class="language-css">order: &lt;número inteiro&gt;;
flex-grow: &lt;número&gt;; /* padrão 0 */
flex-shrink: &lt;número&gt;; /* padrão 1 */
flex-basis: &lt;comprimento&gt; | auto; /* padrão auto */
flex: none | [ &lt;'flex-grow'&gt; &lt;'flex-shrink'&gt;? || &lt;'flex-basis'&gt; ]
align-self: auto | flex-start | flex-end | center | baseline | stretch;</code></pre><h2 id="terminologia"><strong>Terminologia</strong></h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/image-32-1.png" class="kg-image" alt="image-32-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2024/07/image-32-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2024/07/image-32-1.png 665w" width="665" height="277" loading="lazy"><figcaption>Diagrama de terminologia do flexbox da <a href="https://www.w3.org/TR/css-flexbox-1/">especificação oficial do W3C</a>.</figcaption></figure><p>Antes de aprender o que fazem as propriedades do flexbox, é importante entender a terminologia associada a ele. Aqui temos as definições de termos-chave do flexbox, vindas diretamente da <a href="https://www.w3.org/TR/css-flexbox-1/">especificação oficial do W3C</a> (em inglês) para o flexbox.</p><ul><li><strong><strong><strong><strong>main-axis</strong></strong></strong></strong>: esse é o eixo principal do contêiner <em>flex</em>. É o eixo primário, ao longo do qual os itens <em>flex</em> são dispostos. A direção tem como base a propriedade <code>flex-direction</code>.</li><li><strong><strong><strong><strong>main-start | main-end</strong></strong></strong></strong>:<strong><strong> </strong></strong>os itens <em>flex</em> são colocados no contêiner começando do lado de <em>main-start</em> (início principal) e indo até o lado de <em>main-end</em> (final principal).</li><li><strong><strong><strong><strong>main size</strong></strong></strong></strong>: o comprimento ou altura de um contêiner <em>flex</em> ou de um item <em>flex</em>, o que estiver na dimensão principal (a do eixo principal), é o comprimento principal (<em>main size</em>) de uma caixa. Sua propriedade <code>main-size</code> é, portanto, sua propriedade de largura (<em>width</em>) ou de altura (<em>height</em>), o que estiver na dimensão principal.</li><li><strong><strong><strong><strong>cross axis</strong></strong></strong></strong>: o eixo perpendicular ao eixo principal é chamado de <em>cross axis</em>. Sua direção depende da direção do eixo principal.</li><li><strong><strong><strong><strong>cross-start | cross-end</strong></strong></strong></strong>: as linhas do flex são preenchidas com itens e colocadas no contêiner começando do lado do <em>cross-start</em> do contêiner <em>flex</em> e indo na direção do lado do <em>cross-end</em>.</li><li><strong><strong><strong><strong>cross size</strong></strong></strong></strong>: a largura ou altura de um item <em>flex</em>, o que estiver na dimensão do eixo perpendicular, é o <em>cross size </em>de um item. A propriedade <code>cross-size</code> é a largura (<em>width</em>) ou a altura (<em>height</em>) do item, o que estiver na dimensão perpendicular.</li></ul><h2 id="display-flex-no-css"><strong>Display flex no CSS</strong></h2><p><code>display: flex</code> informa ao navegador que você "deseja usar o flexbox com aquele contêiner".</p><p>Um elemento <code>div</code> tem como padrão <code>display:block</code>. Um elemento com essa configuração para a propriedade <code>display</code> toma a largura total de uma linha onde se encontra. Aqui temos um exemplo de quatro divs coloridas dentro de uma div 'pai' com a configuração padrão de <code>display</code>:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/ChnkgUaWEN6dmtS4EQCG60uqIjZVphsErq91.gif" class="kg-image" alt="ChnkgUaWEN6dmtS4EQCG60uqIjZVphsErq91" width="800" height="355" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><p>Para usar o flexbox em uma seção de sua página, primeiramente, converta o contêiner 'pai' em um contêiner flex, adicionando <code>display: flex;</code> ao CSS do contêiner 'pai'.</p><p>Isso inicializará esse contêiner como um contêiner <em>flex </em>e aplicará algumas propriedades <em>flex</em> padrão.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/6WwoIEc45lUHUcFQCmD8GmziiISm2lO64Y1-.gif" class="kg-image" alt="6WwoIEc45lUHUcFQCmD8GmziiISm2lO64Y1-" width="800" height="345" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><h2 id="flex-direction"><strong>flex-direction</strong></h2><p><code>flex-direction</code> (a direção do <em>flex</em>) permite que você controle como os itens são exibidos no contêiner. Você deseja que eles sejam exibidos da esquerda para a direita, da direita para esquerda, de cima para baixo ou de baixo para cima? Você pode configurar isso facilmente definindo <code>flex-direction</code> no contêiner.</p><p>O arranjo padrão após a aplicação de <code>display: flex</code> é a de os itens ficarem dispostos ao longo do eixo principal e da esquerda para a direita. A animação abaixo mostra o que acontece quando <code>flex-direction: column</code> é adicionado ao elemento do contêiner.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/wEg7wdKEfv9-bqaiB-t9hzOapBPiqZVYNFIh.gif" class="kg-image" alt="wEg7wdKEfv9-bqaiB-t9hzOapBPiqZVYNFIh" width="800" height="345" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><p>Você também pode definir <code>flex-direction</code> como <code>row-reverse</code> ou <code>column-reverse</code><em><em><em><em>.</em></em></em></em></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/zYdQGSmhtMyqcAbEUDoEehohC8E-gtgvQx6b.gif" class="kg-image" alt="zYdQGSmhtMyqcAbEUDoEehohC8E-gtgvQx6b" width="800" height="345" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><h2 id="justify-content"><strong>justify-content</strong></h2><p><code>justify-content</code> é uma propriedade para alinhar os itens ao longo do eixo principal (confira o diagrama de terminologia acima). Isso pode mudar, dependendo de como o conteúdo é exibido. Essa propriedade permite que preenchamos qualquer espaço vazio nas linhas e que possamos definir como queremos 'justificá-la'.</p><p>Aqui estão as opções mais comuns usadas para justificar o conteúdo: <code>flex-start | flex-end | center | space-between | space-around</code>.</p><p>Essas são algumas das diferentes opções:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/OBGVr-DdHiQ2y9VOWuhXqXeGnFnyDSBTx7hv.gif" class="kg-image" alt="OBGVr-DdHiQ2y9VOWuhXqXeGnFnyDSBTx7hv" width="800" height="179" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><p><code>space-between</code> distribui os itens de modo que o primeiro item fica 'grudado' ao início e o último fica 'grudado' ao final. <code>space-around</code> é semelhante, mas os itens têm um espaço equivalente a metade do tamanho de ambos os lados.</p><h2 id="align-items"><strong>align-items</strong></h2><p><code>align-items</code> nos permite alinhar os itens ao longo do eixo perpendicular (veja o diagrama de terminologia acima). Isso permite que o conteúdo seja posicionado de vários modos diferentes, combinando <code>justify-content</code> e <code>align-items</code>.</p><p>Estas são as opções de uso mais comuns de <code>align-items</code>: <code>flex-start | flex-end | center | baseline | stretch</code></p><p>Para <code>stretch</code> funcionar da maneira esperada, a altura dos elementos deve ser definida como <code>auto</code> em vez de se especificar uma altura qualquer.</p><p>A animação a seguir mostra a aparência de cada uma das opções:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/UgsULw0Kk49l-l1wSzeurYNJKCmcA-01oE8a.gif" class="kg-image" alt="UgsULw0Kk49l-l1wSzeurYNJKCmcA-01oE8a" width="800" height="280" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><p>Agora, usaremos <code>justify-content</code> e <code>align-items</code>. Abaixo, veremos a diferença entre os eixos principal e perpendicular (<em>main axis</em> e <em>cross axis</em>, respectivamente).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/u9tCV-zRt3qpgSyNQt53e-eRz0-HIrsqqOk-.gif" class="kg-image" alt="u9tCV-zRt3qpgSyNQt53e-eRz0-HIrsqqOk-" width="800" height="417" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><h2 id="align-self"><strong>align-self</strong></h2><p><code>align-self</code> permite que você ajuste o alinhamento de um único item.</p><p>Essa propriedade recebe os mesmos valores de <code>align-items</code>.</p><p>Na animação a seguir, a div 'pai' tem como CSS <code>align-items: center</code> e <code>flex-direction: row</code>. As primeiras duas caixas percorrem diferentes valores de <code>align-self</code>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/HbnMZT330ylw5idocqrjOfp9DrlZt9JrJm9o.gif" class="kg-image" alt="HbnMZT330ylw5idocqrjOfp9DrlZt9JrJm9o" width="800" height="251" loading="lazy"><figcaption>Crédito da imagem: Scott Domes</figcaption></figure><h2 id="flex-wrap"><strong>flex-wrap</strong></h2><p>O flexbox, por padrão, tentará ajustar todos os elementos em uma única linha. No entanto, você pode mudar isso com a propriedade <code>flex-wrap</code>. Existem três valores que você pode usar para determinar quando os elementos passam para outra linha.</p><p>O valor padrão é <code>flex-wrap: nowrap</code>. Ele fará com que tudo fique em uma única linha, da esquerda para a direita.</p><p><code>flex-wrap: wrap</code> &nbsp;permitirá que os itens saltem para a próxima linha se não houver espaço suficiente na linha anterior. Os itens ainda serão exibidos da esquerda para a direita.</p><p><code>flex-wrap: wrap-reverse</code> também permitirá que os itens saltem para a próxima linha, mas, desta vez, os itens serão exibidos da direita para a esquerda.</p><h2 id="flex-flow"><strong>flex-flow</strong></h2><p><code>flex-flow</code> combina o uso de <code>flex-wrap</code> e <code>flex-direction</code> em uma única propriedade. Ele é usado, primeiramente, configurando a direção e, depois, o a passagem ou não para a outra linha. Exemplo: <code>flex-flow: column wrap;</code></p><h2 id="align-content"><strong>align-content</strong></h2><p><code>align-content</code> é usado para alinhar itens com diversas linhas. Essa propriedade server para alinhar no eixo perpendicular e não terá efeito se o conteúdo estiver em uma única linha.</p><p>Estas são as opções de valores: <code>align-content: flex-start | flex-end | center | space-between | space-around | stretch;</code></p><h2 id="centralizar-na-vertical-com-o-flexbox"><strong>Centralizar na vertical com o flexbox</strong></h2><p>Se você quiser centralizar itens na vertical para todo o conteúdo que estiver dentro de um elemento 'pai', use <code>align-items</code>. Este é o código a ser usado:</p><pre><code class="language-css">.elemento-pai {
    display: flex;
    align-items: center;
}</code></pre><h2 id="games-e-aplica-es"><strong><strong><strong>Games </strong>e aplicações</strong></strong></h2><p>Se você quiser praticar o uso de <code>flexbox</code>, experimente estes jogos e aplicações abaixo. Eles ajudarão você a dominar o flexbox.</p><ul><li><a href="http://www.flexboxdefense.com/" rel="nofollow">Flexbox Defense</a> é um jogo da web onde você aprende flexbox ao tentar evitar que inimigos atravessem suas defesas.</li><li><a href="http://flexboxfroggy.com/" rel="nofollow">Flexbox Froggy</a> é um jogo onde você ajuda um sapinho e seus amigos a escreverem CSS.</li><li><a href="http://the-echoplex.net/flexyboxes/" rel="nofollow">Flexyboxes</a> é uma aplicação que permite que você veja exemplos de código e altere parâmetros para ver como o flexbox funciona visualmente.</li><li><a href="http://www.flexboxpatterns.com/" rel="nofollow">Flexbox Patterns</a> é um site da web que mostra exemplos de uso do flexbox.</li></ul><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Tratamos da maioria das propriedades mais comuns do flexbox para o CSS. Seu próximo passo é: praticar! Tente criar alguns projetos com o flexbox para se acostumar com o funcionamento dele.</p><p>Boa programação para você! 😉</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Z-index explicado: como sobrepor elementos usando o CSS ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Veronika Ivhed Eu sempre tive dificuldade com a propriedade z-index [https://developer.mozilla.org/en-US/docs/Web/CSS/z-index] do CSS (texto em inglês). Parecia muito fácil inicialmente. Elementos com um valor de z-index maior são exibidos na frente daqueles com um valor de z-index menor. Ainda assim, diversas vezes, acabei em situações onde parecia que ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/z-index-explicado-como-sobrepor-elementos-usando-o-css/</link>
                <guid isPermaLink="false">66a97b8897bcd50408769a77</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 31 Jul 2024 00:25:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/1_TGyQ2F-PxAhKWA6p6b6rYA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/z-index-explained-how-to-stack-elements-using-css-7c5aa0f179b3/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Z-Index Explained: How to Stack Elements Using CSS</a>
      </p><p>Escrito por: Veronika Ivhed</p><p>Eu sempre tive dificuldade com a propriedade <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/z-index" rel="noopener">z-index</a> do CSS (texto em inglês). Parecia muito fácil inicialmente. Elementos com um valor de z-index maior são exibidos na frente daqueles com um valor de z-index menor. Ainda assim, diversas vezes, acabei em situações onde parecia que o valor de z-index não tinha efeito algum.</p><p>Decidi que estava na hora de acabar com a tentativa e erro com o z-index e que eu queria entendê-lo melhor. Espero que este artigo ajude você para que nunca mais você precise se perguntar o motivo pelo qual o z-index não estava fazendo aquilo que você esperava que fizesse.</p><h3 id="ordem-de-sobreposi-o-padr-o"><strong>Ordem de sobreposição padrão</strong></h3><p>Vamos, primeiro, mencionar a ordem padrão que o navegador utiliza para sobrepor elementos quando a propriedade z-index não está aplicada:</p><ol><li>Elemento raiz (o elemento <code>&lt;html&gt;</code>)</li><li>Elementos não posicionados na ordem em que são definidos</li><li>Elementos posicionados na ordem em que são definidos</li></ol><p>Um elemento <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/position">não posicionado</a> é um elemento com o valor padrão da propriedade <code>position</code>, o valor <code>static</code>. Um elemento <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/position">posicionado</a> é um elemento com qualquer outro valor de <code>position</code>. Exemplos de outros valores são: <code>absolute</code>, <code>relative</code>, <code>sticky</code> e <code>fixed</code>.</p><p>HTML:</p><pre><code class="language-html">&lt;div class="pink"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blue"&gt;&lt;/div&gt;
&lt;div class="green"&gt;&lt;/div&gt;</code></pre><p>CSS:</p><pre><code class="language-css">/* Este é o único CSS relevante para o exemplo. Para ver o CSS completo, confira os links abaixo das imagens. */

.blue, .pink, .orange {
  position: absolute;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/0ok6C2rWIvGF9pibC1xMz9q0iOmkqNWOx1cT.png" class="kg-image" alt="0ok6C2rWIvGF9pibC1xMz9q0iOmkqNWOx1cT" width="227" height="231" loading="lazy"><figcaption><a href="https://codepen.io/ivhed/pen/QrdEBB">https://codepen.io/ivhed/pen/QrdEBB</a></figcaption></figure><p>Definimos a caixa verde por último no documento. Ainda assim, ela aparece atrás dos outros porque ele não está posicionado.</p><h3 id="sobreposi-o-com-z-index"><strong>Sobreposição com z-index</strong></h3><p>Se quisermos alterar a ordem de sobreposição desses elementos, podemos usar a propriedade z-index. Um elemento com um valor mais alto de z-index será exibido na frente de um elemento com um valor de z-index mais baixo. Algo que é importante observar é o fato de que z-index <strong>funciona apenas com elementos posicionados</strong><em><em>.</em></em></p><pre><code class="language-css">.blue, .pink, .orange {
  position: absolute;
}

.blue {
  z-index: 2;
}

.orange {
  z-index: 3;
}

.green {
  z-index: 100; // não tem efeito, já que a caixa verde não está posicionada
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/NOdy4A6ZcslzfIFMD-PW5-vqD83i2Qb5vOrQ.png" class="kg-image" alt="NOdy4A6ZcslzfIFMD-PW5-vqD83i2Qb5vOrQ" width="227" height="228" loading="lazy"><figcaption><a href="https://codepen.io/ivhed/pen/xjqmpV">https://codepen.io/ivhed/pen/xjqmpV</a></figcaption></figure><p>A caixa laranja com um valor maior de z-index é exibida na frente da caixa azul.</p><h4 id="contexto-de-sobreposi-o"><strong>Contexto de sobreposição</strong></h4><p>Digamos que queremos adicionar outra caixa posicionada no layout que queremos posicionar atrás da caixa rosa. Atualizamos nosso código assim:</p><p>HTML:</p><pre><code class="language-html">&lt;div class=”pink”&gt;
  &lt;div class=”orange”&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=”blue”&gt;&lt;/div&gt;
&lt;div class=”purple”&gt;&lt;/div&gt;
&lt;div class=”green”&gt;&lt;/div&gt;</code></pre><p>CSS:</p><pre><code class="language-css">.blue, .pink, .orange, .purple {
  position: absolute;
}

.purple {
  z-index: 0;
}

.pink {
  z-index: 1;
}

.blue {
  z-index: 2;
}

.orange {
  z-index: 3;
}

.green {
  z-index: 100;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/Uuw9yAx1sVpyVHZ8sCRtVF8H5eBnyCElCH4S.png" class="kg-image" alt="Uuw9yAx1sVpyVHZ8sCRtVF8H5eBnyCElCH4S" width="247" height="249" loading="lazy"><figcaption><a href="https://codepen.io/ivhed/pen/YLZdjx">https://codepen.io/ivhed/pen/YLZdjx</a></figcaption></figure><p>Nossa caixa rosa é exibida na frente da caixa roxa como era esperado, mas o que houve com a caixa laranja? Por que ela se encontra, de repente, atrás da caixa azul, embora tenha um valor de z-index maior? Isso ocorre porque adicionar um valor de z-index a um elemento gera o que chamamos de <a href="https://www.w3.org/TR/CSS21/zindex.html" rel="noopener">contexto de sobreposição</a> (texto em inglês)<strong><strong>.</strong></strong></p><p>A caixa rosa tem um valor de z-index diferente de <code>auto</code>, o que gera um novo contexto de sobreposição. O fato de que ele forma um contexto de sobreposição afeta o modo como seus elementos filhos são exibidos.</p><p>É possível alterar a ordem de sobreposição dos elementos filhos da caixa rosa. Porém, o <strong><strong>z-index </strong>deles somente tem um significado dentro daquele contexto de sobreposição</strong>. Isso significa que não conseguiremos mover a caixa laranja para frente da caixa azul, pois eles já não estão dentro do mesmo contexto de sobreposição.</p><p>Se quisermos que a caixa azul e a caixa laranja sejam parte do mesmo contexto de sobreposição, podemos definir a caixa azul como um elemento filho da caixa rosa. Isso fará com que a caixa azul apareça atrás da caixa laranja.</p><pre><code class="language-html">&lt;div class="pink"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
  &lt;div class="blue"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="purple"&gt;&lt;/div&gt;
&lt;div class="green"&gt;&lt;/div&gt;</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/T-Z7bkfgeKlqiz8WYbAlU0W9RMM4CtJgxw50.png" class="kg-image" alt="T-Z7bkfgeKlqiz8WYbAlU0W9RMM4CtJgxw50" width="220" height="220" loading="lazy"><figcaption><a href="https://codepen.io/ivhed/pen/erGoJE">https://codepen.io/ivhed/pen/erGoJE</a></figcaption></figure><p>Os contextos de sobreposição não são formados apenas quando aplicamos <code>z-index</code> a um elemento. Há <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context" rel="noopener">várias outras propriedades</a> (texto em inglês) que fazem com que elementos criem contextos de sobreposição. Alguns exemplos disso são <code>filter</code>, <code>opacity</code> e <code>transform</code>.</p><p>Vamos voltar ao nosso exemplo anterior. A caixa azul está novamente no mesmo nível que a caixa rosa. Desta vez, em vez de adicionar um z-index à caixa rosa, vamos aplicar um <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/filter" rel="noopener"><code>filter</code></a> (texto em inglês) a ela.</p><p>HTML:</p><pre><code class="language-html">&lt;div class="pink"&gt;
  &lt;div class="orange"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blue"&gt;&lt;/div&gt;
&lt;div class="green"&gt;&lt;/div&gt;</code></pre><p>CSS:</p><pre><code class="language-css">.blue, .pink, .orange {
  position: absolute;
}

.pink {
  filter: hue-rotate(20deg);
}

.blue {
  z-index: 2;
}

.orange {
  z-index: 3;
}

.green {
  z-index: 100;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2024/07/JI1HNPrHCEUbKSZZiKSJLnBlWLyJKPclyEez.png" class="kg-image" alt="JI1HNPrHCEUbKSZZiKSJLnBlWLyJKPclyEez" width="228" height="228" loading="lazy"><figcaption><a href="https://codepen.io/ivhed/pen/LmWMQb">https://codepen.io/ivhed/pen/LmWMQb</a></figcaption></figure><p>A caixa laranja ainda tem um valor de z-index maior do que a caixa azul, mas é exibida por trás dela. Isso ocorre porque o valor de <code>filter</code> fez com que a caixa rosa formasse um novo contexto de sobreposição.</p><h4 id="resumo"><strong>Resumo</strong></h4><p>Ao usar z-index em elementos posicionados, podemos alterar o valor padrão da ordem de sobreposição.</p><p>Ao aplicar determinadas propriedades do CSS, um elemento pode formar um contexto de sobreposição. Os valores de <code>z-index</code> somente terão algum significado dentro desse mesmo contexto de sobreposição.</p><p>Para mais informações sobre o <code>z-index</code>, recomendo a leitura <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index">deste artigo.</a> Ele me deu muita inspiração para escrever este artigo.</p><p>Obrigado pela leitura! 🙂</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Before e after no CSS – como usar a propriedade content ]]>
                </title>
                <description>
                    <![CDATA[ A propriedade content no CSS define o conteúdo de um elemento. Você já deve ter ouvido falar que essa propriedade se aplica somente aos pseudoelementos ::before  e ::after. Neste artigo, exploraremos os diversos casos de uso para a propriedade content, incluindo casos para além dos pseudoelementos. Pré-requisito Como a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/before-e-after-no-css-como-usar-a-propriedade-content/</link>
                <guid isPermaLink="false">654b7cab935ea203f011a992</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 09 Nov 2023 14:18:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/fCC_-Content-Property-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-before-and-after-how-to-use-the-content-property/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Before and CSS After – How to Use the Content Property</a>
      </p><p>A propriedade <code>content</code> no CSS define o conteúdo de um elemento. Você já deve ter ouvido falar que essa propriedade se aplica somente aos pseudoelementos <code>::before</code> e <code>::after</code>. Neste artigo, exploraremos os diversos casos de uso para a propriedade <code>content</code>, incluindo casos para além dos pseudoelementos.</p><h2 id="pr-requisito"><strong>Pré-requisito</strong></h2><p>Como a maioria dos casos de uso da propriedade <code>content</code> envolve pseudoelementos, sugiro que você esteja familiarizado com o funcionamento dos pseudoelementos <code>::before</code> e <code>::after</code>. Abaixo, vemos um ótimo artigo para esclarecer algumas dúvidas:</p><ul><li><a href="https://www.freecodecamp.org/portuguese/news/pseudoelementos-em-css-seletores-before-e-after-explicados/">Pseudoelementos em CSS – seletores before e after explicados</a></li></ul><h2 id="valores-aceitos"><strong>Valores aceitos</strong></h2><p>Primeiro, vamos examinar todos os valores aceitos pela propriedade <code>content</code>.</p><ul><li><code>normal</code>: é o valor padrão. Ele registra como <code>none</code> quando usado com os pseudoelementos.</li><li><code>none</code>: um pseudoelemento não será gerado.</li><li><code>&lt;string&gt;</code>: define o conteúdo com a string especificada. A string pode conter sequências de escape do Unicode. Por exemplo, o símbolo para <em>copyright</em>: <code>\\000A9</code>.</li><li><code>&lt;imagem&gt;</code>: define o conteúdo como sendo uma imagem ou gradiente usando <code>url()</code> ou <code>linear-gradient()</code>.</li><li><code>open-quote</code> | <code>close-quote</code>: define que o conteúdo receba o caractere adequado de aspa referido na propriedade <code>quotes</code>.</li><li><code>no-open-quote</code> | <code>no-close-quote</code>: remove as aspas do elemento selecionado, mas ainda adiciona ou reduz o nível de aninhamento referido na propriedade <code>quotes</code>.</li><li><code>attr(*atributo*)</code>: define o conteúdo como o valor em string do atributo selecionado dos elementos selecionados.</li><li><code>counter()</code>: define o conteúdo como o valor de um <code>counter</code> (em português, contador) – geralmente, um número.</li></ul><h2 id="string"><strong>String</strong></h2><p>Um dos exemplos mais básicos seria a adição de conteúdo em <em>strings</em> antes ou depois de um elemento. Neste exemplo, adicionaremos um símbolo de link antes de um link e adicionaremos o URL do link depois dele.</p><pre><code class="language-css">a::before {
	content: "\\1F517 ";
}
a::after {
	content: " (" attr(href) ")";
}</code></pre><p>Observe o espaço após o caractere Unicode no pseudoelemento <code>::before</code> e antes do primeiro parêntese no pseudoelemento <code>::after</code>. Isso criará um espaço entre eles e o elemento pai.</p><p>Como alternativa, é possível adicionar um <code>padding</code> ou uma <code>margin</code> aos pseudoelementos para adicionar uma separação.</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_OJMjpvL" src="https://codepen.io/codeSTACKr/embed/preview/OJMjpvL?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=OJMjpvL" title="CSS Content Property - Strings" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="aspas-b-sicas"><strong>Aspas básicas</strong></h2><p>Com a propriedade <code>content</code>, é possível adicionar aspas antes e/ou após os elementos. Agora, no HTML, temos a tag <code>&lt;q&gt;</code>. Ela também adicionará aspas ao redor do conteúdo. Porém, com a propriedade <code>content</code>, temos mais controle sobre a implementação.</p><p>Vejamos um exemplo básico da adição de aspas:</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_NWxvpXq" src="https://codepen.io/codeSTACKr/embed/preview/NWxvpXq?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=NWxvpXq" title="CSS Content Property - Basic Quotes" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Também é possível fazer isso usando a tag <code>&lt;q&gt;</code>. Talvez, no entanto, queiramos estilizar as aspas de um modo diferente. Vamos, então, adicionar apenas uma aspa de abertura, mas não uma aspa de fechamento. Vamos também estilizar a aspa de abertura.</p><pre><code class="language-css">p {
  position: relative;
  font-size: 3rem;
  margin: 4rem;
}
p::before {
  content: open-quote;
  position: absolute;
  left: -3.5rem;
  top: -2rem;
  font-size: 8rem;
  color: rgba(0, 0, 0, 0.5)
}
</code></pre><p>O resultado será este:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/quote2.jpg" class="kg-image" alt="quote2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/quote2.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/quote2.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/quote2.jpg 1271w" sizes="(min-width: 720px) 720px" width="1271" height="387" loading="lazy"></figure><h2 id="aspas-avan-adas"><strong>Aspas avançadas</strong></h2><p>Também podemos especificar onde não queremos aspas. Por exemplo, você pode estar citando alguém que está citando outra pessoa. Assim, você teria aspas dentro de aspas, o que pode ficar confuso para o leitor.</p><p>No CodePen abaixo, estamos usando tags <code>&lt;q&gt;</code> do HTML e, em seguida, especificando quais tags não devem exibir as aspas.</p><p>À primeira vista, você pode pensar que devemos apenas remover a tag <code>&lt;q&gt;</code> quando necessário. Porém, especificar onde uma aspa não deve estar ainda aumenta ou diminui o nível de aninhamento referenciado a partir da propriedade <code>quotes</code>.</p><p>Para explicar isso, precisamos entender a propriedade <code>quotes</code>. Aqui temos um "array" de caracteres que pode ser usado ao colocar aspas. Veja um exemplo:</p><pre><code class="language-css">q {
  quotes: '“' '”' '‘' '’' '“' '”';
}
</code></pre><p>Estes são conjuntos de aspas. O primeiro conjunto será usado para o nível superior de aspas. O segundo conjunto será usado para a primeira aspa aninhada. O terceiro conjunto será usado para a segunda aspa aninhada e assim por diante, se houver mais conjuntos incluídos.</p><p>Agora que entendemos a propriedade <code>quotes</code>, posso explicar como funcionam as propriedades <code>no-open-quote</code> e <code>no-close-quote</code>.</p><p>Para cada nível de aspas, podemos atribuir diferentes conjuntos de caracteres para usar para como aspas.</p><p>Veja o exemplo abaixo. Você verá que o segundo nível de aspas é ignorado.</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_NWxvbLw" src="https://codepen.io/codeSTACKr/embed/preview/NWxvbLw?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=NWxvbLw" title="CSS Content Property - Advanced Quotes" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="atributos"><strong>Atributos</strong></h2><p>Atributos podem ser usados para passar conteúdo do HTML para a propriedade <code>content</code> do CSS. De fato, já usamos isso no exemplo do link, onde usamos o atributo <code>href</code> para incluir a string do URL como parte de nosso conteúdo.</p><p>Um caso de uso perfeito para isso é uma dica (<em>tooltip</em>). Você pode adicionar um atributo <code>title</code> a um elemento em HTML para ter uma dica interna simples ao passar o mouse. Para personalizar isso, no entanto, podemos usar um <em>atributo de dados</em> em nossa tag do HTML e, em seguida, usar a propriedade <code>content</code> para adicionar a dica.</p><p>Neste exemplo, usamos o atributo <code>data-tooltip</code> do nosso elemento do HTML para passar o valor para a nossa dica. Para o ponteiro da dica, definimos o <code>content</code> como <code>""</code>, já que <code>content</code> é necessário para renderizar um pseudoelemento <code>::before</code> ou <code>::after</code>.</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_WNrEopO" src="https://codepen.io/codeSTACKr/embed/preview/WNrEopO?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=WNrEopO" title="CSS Content Property - Tooltip" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="contadores"><strong>Contadores</strong></h2><p>A função <code>counter()</code> do CSS retorna uma string que representa o valor atual do contador nomeado. No exemplo a seguir, temos uma lista ordenada que adicionaremos conteúdo usando um <code>counter</code>.</p><pre><code class="language-html">&lt;ol&gt;
  &lt;li&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
</code></pre><pre><code class="language-css">ol {
  counter-reset: exampleCounter;
}
li {
  counter-increment: exampleCounter;
}
li::after {
  content: "[" counter(exampleCounter) "] == ["
               counter(exampleCounter, upper-roman) "]";
}
</code></pre><p>Sem entrar em mais detalhes com relação à função <code>counter</code>, primeiro, precisamos iniciar o contador no elemento <code>ol</code>. Podemos nomeá-lo como quisermos. Em seguida, informamos ao contador que aumente em 1 para cada elemento <code>li</code>. Por fim, definimos o <code>content</code> de <code>li::after</code>.</p><p>Este é o resultado:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/counter.jpg" class="kg-image" alt="counter" width="535" height="367" loading="lazy"></figure><p>Você pode usar isso para personalizar o conteúdo dentro de cada item de lista que precise de um número correspondente. Também é possível personalizar o próprio item de lista. Por exemplo, você pode remover a numeração padrão e implementar um sistema de numeração personalizado.</p><h2 id="imagens"><strong>Imagens</strong></h2><p>Imagens e gradientes podem ser usados com a propriedade <code>content</code>. Isso é bastante direto. Aqui temos um exemplo que usa os dois:</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_WNrEpre" src="https://codepen.io/codeSTACKr/embed/preview/WNrEpre?default-tabs=html%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=WNrEpre" title="CSS Content Property - Images" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Para fins de acessibilidade, há uma opção para adicionar texto alternativo para imagens. Esse recurso, porém, ainda não tem suporte total.</p><pre><code class="language-css">content: url(//unsplash.it/200/200) / "Texto alternativo aqui";
</code></pre><blockquote>Observação: até o momento em que o texto foi escrito, essa funcionalidade não tinha suporte no Firefox, IE e no Safari. Além disso, gradientes não funcionavam no Firefox.</blockquote><h2 id="al-m-dos-pseudoelementos"><strong>Além dos pseudoelementos</strong></h2><p>Sim! Você pode usar a propriedade <code>content</code> fora dos pseudoelementos <code>::before</code> e <code>::after</code>. Porém, seu uso é limitado e não totalmente compatível com os navegadores.</p><p>O caso de uso mais compatível seria a substituição de um elemento.</p><pre><code class="language-html">&lt;div id='replace'&gt;
  codeSTACKr
&lt;/div&gt;
</code></pre><pre><code class="language-css">#replace {
  content: url("&lt;https://www.codestackr.com/logo_twoline_light.svg&gt;");
  width: 100%;
}
</code></pre><blockquote>Observação: substituir elementos não tem suporte do IE.</blockquote><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Na maioria das vezes, você verá <code>content: ""</code> junto dos pseudoelementos <code>::before</code> e <code>::after</code>. A propriedade <code>content</code>, no entanto, tem várias aplicações úteis.</p><p>O melhor uso, na minha opinião, é para a atualização em massa de elementos. Se quiser adicionar um ícone antes de cada link em seu site, será muito mais fácil adicioná-lo por meio da propriedade <code>content</code> do que adicioná-lo em cada elemento de um documento do HTML.</p><h2 id="obrigado-pela-leitura-"><strong>Obrigado pela leitura<strong><strong>!</strong></strong></strong></h2><p>Obrigado por ler este artigo. Espero que ele tenha ajudado você a entender melhor como a propriedade <code>content</code> funciona no CSS.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/footer-banner-1.png" class="kg-image" alt="footer-banner-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/footer-banner-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/footer-banner-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/11/footer-banner-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/footer-banner-1.png 1665w" sizes="(min-width: 720px) 720px" width="1665" height="444" loading="lazy"></figure><p>Sou o Jesse, e venho do Texas. Confira mais conteúdo meu e me informe se ajudei você de algum modo em sua jornada para se tornar um desenvolvedor para a web.</p><ul><li><a href="https://youtube.com/codeSTACKr">Inscreva-se no meu canal no YouTube</a></li><li>Mande um oi pelo <a href="https://instagram.com/codeSTACKr">Instagram</a> ou pelo <a href="https://twitter.com/codeSTACKr">Twitter</a></li><li><a href="https://codestackr.com/">Assine minha newsletter</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Pseudoelementos em CSS – seletores before e after explicados ]]>
                </title>
                <description>
                    <![CDATA[ Seletor before O seletor ::before do CSS pode ser usado para inserir conteúdo antes do conteúdo dos elementos selecionados. Ele é usado anexando ::before ao seletor do elemento no qual ele agirá. Aqui temos alguns exemplos: p::before {    content: "* "; } span.comentario::before {   content: ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/pseudoelementos-em-css-seletores-before-e-after-explicados/</link>
                <guid isPermaLink="false">654b7de6935ea203f011a9ac</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 08 Nov 2023 12:37:39 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/5f9c9cfa740569d1a4ca3537.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-pseudo-elements-before-and-after-selectors-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Pseudo-Elements - Before and After Selectors Explained</a>
      </p><h2 id="seletor-before"><strong><strong>Seletor <em>b<strong>efore</strong></em></strong></strong></h2><p>O seletor <code>::before</code> do CSS pode ser usado para inserir conteúdo <strong>antes </strong>do conteúdo dos elementos selecionados. Ele é usado anexando <code>::before</code> ao seletor do elemento no qual ele agirá.</p><p>Aqui temos alguns exemplos:</p><pre><code class="language-css">p::before { 
  content: "* ";
}

span.comentario::before {
  content: "Comentário: ";
  color: blue;
}</code></pre><pre><code class="language-html">&lt;p&gt; Ao infinito e além!&lt;/p&gt;
&lt;p&gt; Sou o Buzz Lightyear. Eu venho em paz.&lt;/p&gt;

&lt;span class="comentario"&gt;Que a Força esteja com você.&lt;/span&gt;
&lt;br/&gt;
&lt;span&gt; Faça. Ou não faça. Tentativa não há.&lt;/span&gt;</code></pre><p>No exemplo acima, anexamos um asterisco e um espaço antes de cada elemento de parágrafo da página. Além disso, anexamos "Comentário: " em azul antes de casa elemento <code>span</code> que tenha a classe <code>comentario</code>.</p><h2 id="seletor-after"><strong>Seletor <em>after</em></strong></h2><p>O seletor <code>::after</code> do CSS pode ser usado para inserir conteúdo <strong>após</strong> do conteúdo dos elementos selecionados. &nbsp;Ele é usado anexando <code>::after</code> ao seletor do elemento no qual ele agirá.</p><p>Alguns exemplos:</p><pre><code class="language-css">.buzz::after { 
  content: " - Buzz Lightyear";
  color: blue;
}

.yoda::after { 
  content: " - Yoda";
  color: green;
}</code></pre><pre><code class="language-html">&lt;p class="buzz"&gt; Ao infinito e além!&lt;/p&gt;
&lt;p class="yoda"&gt; Faça. Ou não faça. Tentativa não há.&lt;/p&gt;</code></pre><p>No exemplo acima " - Buzz Lightyear" em azul é anexado ao elemento com a classe <code>buzz</code>. Também anexamos " - Yoda" em verde ao elemento com a classe <code>yoda</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image.png" class="kg-image" alt="image" width="438" height="119" loading="lazy"></figure><h2 id="o-uso-de-dois-pontos-uma-ou-duas-vezes"><strong>O uso de dois pontos uma ou duas vezes</strong></h2><p>Existe alguma discussão com relação ao modo certo de se usar os pseudoelementos – no estilo antigo, com dois pontos (<code>:before</code>), usado nas especificações do CSS 1 e 2, em contraste com a recomendação do CSS3, com dois pontos usados duas vezes (<code>::before</code>), especialmente para <em>"<em>estab</em>elecer uma diferenciação entre as<em> pseudoclasses </em>e os<em> pseudoelement</em>o<em>s</em>"</em>.</p><p>Por motivos de compatibilidade, o método com dois pontos apenas uma vez ainda é aceito. Lembre-se de que o IE8 dá suporte apenas a essa notação.</p><h2 id="para-mais-informa-es-"><strong>Para mais informações:</strong></h2><ul><li><a href="https://www.freecodecamp.org/portuguese/news/manual-do-css-um-guia-pratico-de-css-para-desenvolvedores/">Manual do CSS: um guia prático de CSS para desenvolvedores</a></li><li><a href="https://www.freecodecamp.org/portuguese/news/os-melhores-exemplos-de-css-e-css3/">Os melhores exemplos de CSS e CSS3</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como definir intervalos de largura para as media queries no CSS ]]>
                </title>
                <description>
                    <![CDATA[ Uma media query (em português, consulta de mídia) é um recurso do CSS. Ela permite que você crie e implemente layouts que se adaptam às propriedades do dispositivo que você está usando. Algumas dessas propriedades incluem a altura e a largura de uma página. Neste guia, você verá como definir ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-definir-intervalos-de-largura-para-as-media-queries-no-css/</link>
                <guid isPermaLink="false">654259bf935ea203f011a538</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 01 Nov 2023 14:29:59 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/amirali-mirhashemian-jh5XyK4Rr3Y-unsplash-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/media-queries-width-ranges/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Set Width Ranges for Your CSS Media Queries</a>
      </p><p>Uma <em>media query</em> (em português, consulta de mídia) é um recurso do CSS. Ela permite que você crie e implemente layouts que se adaptam às propriedades do dispositivo que você está usando. Algumas dessas propriedades incluem a altura e a largura de uma página.</p><p>Neste guia, você verá como definir várias propriedades de largura em uma regra de <em>media query</em>. Por enquanto, vamos, primeiramente, dar uma olhada nos fundamentos.</p><h2 id="como-funcionam-as-media-queries-no-css"><strong>Como funcionam as <em>media queries</em> no CSS</strong></h2><p>Agora que você tem uma ideia básica do que é uma <em>media query</em>, vamos dar uma olhada em como esse recurso específico do CSS realmente funciona.</p><p>Uma <em>media query</em> básica tem a seguinte aparência:</p><pre><code class="language-css">@media only screen and (max-width: 576px) {
    // realiza uma ação
}

@media only screen and (min-width: 576px) {
    // realiza outra ação
}</code></pre><p>Isso significa que os estilos que seriam escritos dentro das regras de mídia acima só funcionarão ou serão efetivos nas propriedades de largura especificadas acima.</p><p>Literalmente, você está dizendo que, nessa largura específica (ou seja, a propriedade <code>max-width</code> – largura máxima – de <code>576px</code>), o CSS deve aplicar os estilos selecionados para dentro dessa largura, a partir de uma largura inicial de <code>0px</code>.</p><h2 id="as-propriedades-max-width-e-min-width"><strong>As propriedades max-width e min-width</strong></h2><p>Há duas coisas que você precisa conhecer ao criar <em>media queries</em> para tamanhos de tela diferentes: as propriedades <code>max-width</code> e <code>min-width</code>.</p><p>Quando uma propriedade <code>max-width</code> é passada para uma <em>media query</em>, o CSS a interpreta como uma largura começando em zero – ou seja, se nenhuma propriedade de largura mínima tiver sido definida ainda. Chegaremos a isso em breve.</p><p>Quando a propriedade <code>max-width</code> recebe um valor, todos os estilos dentro dessa <em>media query</em> específica serão aplicados a qualquer dispositivo com tamanho de tela que se estenda de <code>0px</code> até a largura máxima especificada.<br><br>A propriedade <code>min-width</code>, por outro lado, usa o valor inicial que você atribuiu a ela e aplica os estilos dentro da regra de mídia até que a próxima largura máxima seja fornecida. Veja, por exemplo, o seguinte:</p><pre><code class="language-css">@media only screen and (min-width: 576px) {
    // aplique os estilos aqui a partir dessa largura mínima de 
    // 576px (telas de dispositivos médias)
}</code></pre><p>Os estilos que seriam escritos na <em>media query</em> acima só seriam aplicáveis a dispositivos que se enquadram na largura mínima especificada e acima.</p><h2 id="como-definir-o-intervalo-de-largura-de-uma-media-query"><strong>Como definir o intervalo de largura de uma <em>media query</em></strong></h2><p>O método que acabamos de discutir cria <em>media queries</em> aplicando apenas uma propriedade <code>width</code>, o que resolve apenas um problema.</p><p>Ao definir um "intervalo de largura", você tem uma certa flexibilidade ao criar layouts que oferecem capacidade de resposta em todas as larguras de dispositivo.</p><p>A definição de um "intervalo de largura" específico não é diferente da maneira como as <em>media queries</em> são criadas. A única diferença é a adição de mais expressões de recursos de mídia (ou seja, os tamanhos de largura da tela).</p><p>Observe:</p><pre><code class="language-css">@media only screen and (min-width: 360px) and (max-width: 768px) {
	// faça algo nesse intervalo de largura.
}</code></pre><p>A <em>media query</em> acima funcionará apenas para a expressão do recurso (o tamanho de tela de um dispositivo móvel para o qual você está escrevendo o estilo) fornecida acima.<br><br>Ela usa a primeira expressão de largura fornecida como o valor inicial e a segunda como o valor final.</p><p>Você se lembra de quando vimos a diferença entre as propriedades <code>max-width</code> e <code>min-width</code>? Simplesmente informamos ao navegador que aplicasse os estilos do CSS que incluímos dentro da regra para dispositivos móveis com telas de <code>360px</code> a <code>768px</code>.</p><p>De modo simples, estamos criando layouts responsivos para dispositivos de larguras pequenas e médias, como <em>tablets</em> ou celulares.</p><p>Você pode ver alguns dos "pontos de corte" (em inglês, <em>breakpoints</em>) disponíveis na <a href="https://getbootstrap.com/docs/5.0/layout/breakpoints/">documentação do Bootstrap</a> (texto em inglês). Experimente com alguns desses pontos definindo os intervalos de tamanho de tela que você preferir.</p><h2 id="experimente-usar-media-queries-com-o-flexbox"><strong>Experimente usar <em>media queries</em> com o Flexbox</strong></h2><p>Você viu como criar uma <em>media query</em> básica que usa várias expressões de tamanho de tela. Você também viu a diferença entre as propriedades <code>max-width</code> e <code>min-width</code> e como aplicá-las.</p><p>Nesta seção, examinaremos a criação de um layout simples, no qual a aparência muda de acordo com os diferentes "pontos de corte" (tamanhos de tela). Começaremos criando a marcação que estruturará o layout.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;title&gt;Exemplo de media query&lt;/title&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="conteiner"&gt;
      &lt;div class="caixas caixa1"&gt;
        &lt;h1&gt;Primeira caixa&lt;/h1&gt;
        &lt;p&gt;
		  Informação da primeira caixa
        &lt;/p&gt;
      &lt;/div&gt;
      &lt;div class="caixas caixa2"&gt;
        &lt;h1&gt;Segunda caixa&lt;/h1&gt;
        &lt;p&gt;
          Informação da segunda caixa
        &lt;/p&gt;
      &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>O trecho acima exibirá duas caixas com suas respectivas informações quando os estilos são aplicados.</p><pre><code class="language-css">.conteiner {
  display: flex;
  flex-wrap: wrap;
  width: 980px;
  margin: 0 auto;
  margin-top: 40px;
}

@media only screen and (min-width: 320px) and (max-width: 576px) {
  .conteiner {
    width: 100%;
    padding-left: 23px;
    flex-direction: column-reverse;
  }
  .caixas {
    width: 100%;
  }
}</code></pre><p>Observando o arquivo CSS, você perceberá que a <em>media query</em> tem uma largura mínima de <code>320px</code> e uma largura máxima de <code>576px</code>. Isso quer dizer, simplesmente, que todos os estilos que entrarem nessa regra se aplicarão apenas aos dispositivos com larguras muito pequenas ou pequenas.</p><p>O layout das caixas também muda nesse intervalo de largura específico. Isso se dá em função de o seletor <code>.conteiner</code> ter sua propriedade <code>flex-direction</code> alterada de <code>row</code> para <code>column-reverse</code>.</p><p>Você pode decidir se quer experimentar com outros valores atribuíveis à propriedade <code>flex-direction</code>. Saiba mais sobre esses valores <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/flex-direction">aqui</a>.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Sem definir um intervalo de largura, os estilos do CSS do trecho de código acima serão aplicados a todos os dispositivos com um tamanho mínimo de tela de <code>576px</code> ou acima.</p><p>Ao definir um intervalo de largura, você obtém melhor controle como desenvolvedor. Você poderá especificar quais estilos devem ser aplicados a um dispositivo com um tamanho de tela específico, o que dá à aplicação uma responsividade melhor.</p><p>Obrigado por ler este artigo. Se ele o ajudou a entender por que você deve definir intervalos de largura ao criar <em>media queries</em>, compartilhe-o.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ O z-index do CSS não funciona? Saiba como resolver isso usando a ordem de empilhamento ]]>
                </title>
                <description>
                    <![CDATA[ A propriedade z-index do CSS pode ser bastante complicada. Ela não funciona facilmente e por conta própria se você não souber como usá-la adequadamente. Neste artigo, explicarei o que é a propriedade z-index, o que é a ordem de empilhamento e como usá-las da maneira certa. Darei alguns exemplos comuns ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/o-z-index-do-css-nao-funciona-saiba-como-resolver-isso-usando-a-ordem-de-empilhamento/</link>
                <guid isPermaLink="false">652e718fb73e2e03f70cec78</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Tue, 17 Oct 2023 12:36:49 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/5fd7de8ae6787e098393efd5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-z-index-not-working/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Z-Index Not Working? How to Fix It Using Stack Order</a>
      </p><p>A propriedade <code>z-index</code> do CSS pode ser bastante complicada. Ela não funciona facilmente e por conta própria se você não souber como usá-la adequadamente.</p><p>Neste artigo, explicarei o que é a propriedade <code>z-index</code>, o que é a ordem de empilhamento e como usá-las da maneira certa.</p><p>Darei alguns exemplos comuns do funcionamento inadequado da propriedade <code>z-index</code> e mostrarei as soluções para eles.</p><h2 id="o-que-o-z-index"><strong>O que é o z-index?</strong></h2><p>Em primeiro lugar, a letra Z vem da representação das três dimensões: x, y e z. x e y são a largura e a altura. A 3ª dimensão, z, é a profundidade:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/xyz.png" class="kg-image" alt="xyz" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/xyz.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/xyz.png 973w" sizes="(min-width: 720px) 720px" width="973" height="528" loading="lazy"></figure><p>O CSS fornece uma propriedade chamada <code>z-index</code> para que possamos usá-la para determinar a profundidade de um elemento. À medida que o valor de <code>z-index</code> de um elemento aumenta, mais à frente dos outros elementos ele estará posicionado com relação à 3ª dimensão.</p><p>Vejamos alguns exemplos e como usar a propriedade <code>z-index</code> corretamente.</p><h2 id="a-propriedade-z-index-n-o-funciona-sem-uma-posi-o-definida-nem-com-position-static"><strong>A propriedade z-index não funciona sem uma posição definida nem com <em>position: static</em></strong></h2><p>A primeira coisa importante a se saber é que todo elemento de uma página da web tem uma posição padrão – em outras palavras, uma posição definida estaticamente (por padrão). Digamos que temos uma caixa vermelha e outra azul em nossa página:</p><pre><code class="language-html">&lt;div class="caixa caixa-vermelha"&gt;&lt;/div&gt;
&lt;div class="caixa caixa-azul"&gt;&lt;/div&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/1.png" class="kg-image" alt="1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/1.png 799w" sizes="(min-width: 720px) 720px" width="799" height="325" loading="lazy"></figure><p>Se aplicarmos <code>z-index</code> às caixas diretamente, você verá que isso não dará resultado. Isso ocorre por não termos ainda uma posição (a propriedade <em>position</em>) definida:</p><pre><code class="language-css">.caixa {
  height: 150px;
  width: 150px;
}

.caixa-vermelha {
  background: red;
  z-index: 1;
}

.caixa-azul {
  background: #00d5f1;
  bottom: 80px;
  left: 55px;
  z-index: 2;
}</code></pre><p>Esse é um dos exemplos mais comuns da propriedade <code>z-index</code>, onde ela não funciona corretamente. Para resolvê-lo, podemos aplicar uma <a href="https://www.freecodecamp.org/news/how-to-use-the-position-property-in-css-to-align-elements-d8f49c403a26/">propriedade <em>position</em></a> (texto em inglês) à classe <code>caixa</code>. Isto resolverá a questão:</p><pre><code class="language-css">.caixa {
  height: 150px;
  width: 150px;
  position: relative;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/2.png" class="kg-image" alt="2" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/2.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/2.png 879w" sizes="(min-width: 720px) 720px" width="879" height="250" loading="lazy"></figure><p>Você também pode assistir a este tutorial em vídeo para ver um exemplo de uso de <code>z-index</code>:</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/vo1JBj-OAa8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="CSS Z Index Property: What is CSS Z-Index, Stacking Order, and Why Your Z-Index Is Not Working?" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="o-que-a-ordem-de-empilhamento"><strong>O que é a ordem de empilhamento?</strong></h2><p>Se removermos as propriedades <code>z-index</code> das duas caixas, a caixa azul seguira à frente da caixa vermelha, mesmo sem um valor para a propriedade <code>z-index</code>:</p><pre><code class="language-css">.caixa {
  height: 150px;
  width: 150px;
  position: relative;
}

.caixa-vermelha {
  background: red;
}

.caixa-azul {
  background: #00d5f1;
  bottom: 80px;
  left: 55px;
}</code></pre><p>A renderização será a seguinte:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-153.png" class="kg-image" alt="image-153" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-153.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-153.png 879w" sizes="(min-width: 720px) 720px" width="879" height="250" loading="lazy"></figure><p>Desse modo, quando todos os elementos estão no mesmo nível, um elemento ainda ficará à frente do outro, pois eles também têm uma ordem padrão em termos do eixo z. Essa ordem é chamada de ordem de empilhamento.</p><p>Como no exemplo acima, quando não há uma propriedade <code>z-index</code> aplicada a um elemento, os navegadores usam uma ordem de empilhamento padrão para empilhar os elementos na página:</p><blockquote>1. O segundo plano e as bordas do elemento root<br>2. Blocos descendentes <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/position#static">não posicionados</a>, em ordem de aparecimento no HTML<br> 3. Blocos descendentes <a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/position#tipos_de_posicionamentos">posicionados</a>, em ordem de aparecimento no HTML<br><br> Fonte: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/Stacking_without_z-index">Stacking without the z-index property</a> (texto em inglês)</blockquote><p>Observe que o elemento <em>root </em>é o elemento <code>&lt;html&gt;</code>. Os elementos não posicionados são aqueles que têm a propriedade <em>position</em> com seu valor padrão, <code>position: static</code>, e os elementos posicionados são aqueles que têm elementos com <code>position</code> definida como outro valor.</p><p>Se adicionarmos outra caixa, mas se definirmos sua propriedade <code>position</code> com o valor padrão <code>static</code>, ela aparecerá atrás das caixas vermelha e azul:</p><pre><code class="language-html">&lt;div class="caixa caixa-vermelha"&gt;&lt;p&gt;Positioned&lt;/p&gt;&lt;/div&gt;
&lt;div class="caixa caixa-azul"&gt;&lt;p&gt;Positioned&lt;/p&gt;&lt;/div&gt;
&lt;div class="caixa caixa-amarela"&gt;&lt;p&gt;Non-positioned&lt;/p&gt;&lt;/div&gt;
</code></pre><pre><code class="language-css">.caixa {
  height: 150px;
  width: 150px;
  position: absolute;
}

p {
  color: #0a0a23;
  margin: 0;
  padding-left: 5px;
}

.caixa-vermelha {
  background: red;
  top: 40px;
  left: 27px;
}

.caixa-azul {
  background: #00d5f1;
  top: 80px;
  left: 55px;
}

.caixa-amarela {
  background: rgb(251, 239, 0);
  position: static;
}
</code></pre><p>Este é o resultado:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-156.png" class="kg-image" alt="image-156" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-156.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-156.png 746w" sizes="(min-width: 720px) 720px" width="746" height="323" loading="lazy"><figcaption>Caixa amarela não posicionada (non-positioned, em inglês) e caixas vermelha e azul posicionadas (positioned, em inglês)</figcaption></figure><p>Embora tenhamos modificado as caixas azul e vermelha para que usassem <code>position: absolute</code> em vez de <code>relative</code> e tenhamos ajustado um pouco seu posicionamento, a ideia era auxiliar a perceber a ordem padrão de empilhamento no navegador – elementos posicionados no mesmo nível sempre aparecerão sobre os elementos não posicionados (ou com a propriedade definida como <code>position: static</code>).</p><p>Você pode estar se perguntando o que acontece quando os elementos não estiverem no mesmo nível. Veremos isso agora.</p><h2 id="contexto-de-empilhamento-como-o-z-index-do-elemento-pai-se-aplica-tamb-m-ao-elemento-filho"><strong>Contexto de empilhamento: Como o z-index do elemento pai se aplica também ao elemento filho</strong></h2><p>Vamos colocar a caixa amarela entre a caixa vermelha e a azul:</p><pre><code class="language-html">&lt;div class="caixa caixa-vermelha"&gt;
  &lt;div class="caixa caixa-amarela"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="caixa caixa-azul"&gt;&lt;/div&gt;</code></pre><pre><code class="language-css">.caixa-vermelha {
  background: red;
  z-index: 1;
}

.caixa-azul {
  background: #00d5f1;
  bottom: 80px;
  left: 55px;
  z-index: 2;
}

.caixa-amarela {
  background: rgb(251, 239, 0);
  left: 25px;
  top: 25px;
  z-index: 3;
}</code></pre><p>Teremos renderizado o seguinte:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/3.png" class="kg-image" alt="3" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/3.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/10/3.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/3.png 1014w" sizes="(min-width: 720px) 720px" width="1014" height="254" loading="lazy"></figure><p>Como é possível ver no código, mesmo que a caixa amarela tenha um valor de<code>z-index</code> maior em comparação ao elemento azul, ela está posicionada atrás da caixa azul.</p><p>Isso ocorre porque a caixa amarela agora é "filha" da caixa vermelha. O <code>z-index</code> do elemento "pai" sempre se aplica aos seus filhos também. Como o elemento pai tem um <code>z-index</code> menor que o da caixa azul, seus elementos filhos herdarão o mesmo valor de <code>z-index</code> e ficarão abaixo da caixa com o valor de <code>z-index</code> maior no mesmo nível que o elemento pai.</p><p>Isso ocorre por causa de algo chamado <strong>contexto de empilhamento</strong>. Colocado de maneira simples, um contexto de empilhamento é como uma nova instância da lista da ordem de empilhamento mencionada anteriormente, ou seja:</p><ol><li>Um elemento <em>root</em> (&lt;html&gt;)</li><li>Elementos não posicionados (com <code>position: static</code>) na ordem em que aparecem</li><li>Elementos posicionados (com <code>position</code> definida com outro valor que não <code>static</code>) na ordem em que aparecem</li></ol><p>O que devemos lembrar é que o elemento posicionado com um valor de <code>z-index</code> diferente do padrão <code>auto</code> (que o deixará com posicionamento estático) criará sempre um outro contexto de empilhamento.</p><p>Se olharmos para o HTML acima, como a caixa vermelha tem um <code>z-index</code> de 1, ela cria outro contexto de empilhamento para seus filhos – no caso, para a caixa amarela. Nesse contexto de empilhamento, a caixa vermelha funciona como se fosse o elemento <em>root </em>do HTML. A caixa amarela estaria posicionada dentro desse elemento <em>root</em>.</p><p>Assim, como a caixa azul é parte do mesmo contexto de empilhamento que a caixa vermelha (onde o elemento <code>&lt;html&gt;</code> é o que serve como elemento <em>root</em>), ela sempre aparecerá acima da caixa amarela.</p><p>Caso veja esse tipo de problema, você pode resolvê-lo removendo o elemento filho de dentro do elemento pai ou removendo a propriedade <code>position</code> do elemento pai, de modo que o <code>z-index</code> do pai não afete seus filhos:</p><pre><code class="language-html">&lt;div class="caixa caixa-vermelha"&gt;&lt;/div&gt;
&lt;div class="caixa caixa-amarela"&gt;&lt;/div&gt;
&lt;div class="caixa caixa-azul"&gt;&lt;/div&gt;
</code></pre><pre><code class="language-css">.caixa {
  height: 150px;
  width: 150px;
  position: relative;
}

.caixa-vermelha {
  background: red;
  z-index: 1;
}

.caixa-azul {
  background: #00d5f1;
  bottom: 240px;
  left: 55px;
  z-index: 2;
}

.caixa-amarela {
  background: rgb(251, 239, 0);
  bottom: 120px;
  left: 25px;
  z-index: 3;
}
</code></pre><p>Agora, o que temos é:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-158.png" class="kg-image" alt="image-158" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/10/image-158.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/10/image-158.png 997w" sizes="(min-width: 720px) 720px" width="997" height="353" loading="lazy"></figure><p>Saiba que existem diversas outras propriedades que podem afetar o contexto de empilhamento de um elemento. Leia mais sobre isso <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context">aqui</a> (texto em inglês).</p><p>Isso é um pouco contraintuitivo, mas é uma das razões para o não funcionamento da propriedade <code>z-index</code>.</p><h2 id="n-o-atribua-n-meros-grandes-ao-z-index"><strong>Não atribua números grandes ao z-index</strong></h2><p>Outro motivo comum para o <code>z-index</code> não funcionar corretamente é a atribuição de números muito altos à propriedade <code>z-index</code>:</p><pre><code class="language-css">.caixa-azul {
  z-index: 9999;
}</code></pre><p>Em alguns projetos nos quais já trabalhei, vi pessoas atribuírem esses valores muito grandes, como 9999, ao <code>z-index</code> de um elemento.</p><p>Funciona, mas é como usar um martelo quando o que você precisa é de uma chave de fenda.</p><p>Imagine o seguinte – você chega em um projeto grande e trabalha com o HTML, mas, não importa o que você tente, não consegue colocar os elementos na ordem correta. Assim, após pesquisar um pouco <em>on-line</em>, você descobre que alguém, em algum momento, definiu uma propriedade <code>z-index</code> global como 9999, que segue sobrescrevendo seu <code>z-index</code>.</p><p>Agora que você sabe como usar a propriedade <code>z-index</code> adequadamente e que entende o contexto de empilhamento, não precisará mais usar valores enormes como aquele. 🙂</p><p>Espero que este artigo tenha ajudado você a entender melhor como usar a propriedade <code>z-index</code>, assim como a ordem de empilhamento e o contexto do empilhamento. Se quiser aprender mais sobre desenvolvimento para a web, não deixe de <a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q">se inscrever no canal do YouTube do autor</a>.</p><p>Agradecemos pela leitura!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como mudar a cor de um elemento H2 com CSS ]]>
                </title>
                <description>
                    <![CDATA[ Em programação, geralmente, há várias soluções diferentes para um determinado problema. Isso é evidenciado quando tratamos da estilização de um elemento do HTML. Uma das mudanças mais fáceis é a da cor de um texto. No entanto, às vezes, nada do que você tenta parece funcionar: <style>   h2 ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-mudar-a-cor-de-um-elemento-h2-com-css/</link>
                <guid isPermaLink="false">6526bf74b73e2e03f70ce1e4</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 11 Oct 2023 15:43:27 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/10/5f9c9aa8740569d1a4ca26ea.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/changing-h2-element-color/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Changing H2 Element Color</a>
      </p><p>Em programação, geralmente, há várias soluções diferentes para um determinado problema. Isso é evidenciado quando tratamos da estilização de um elemento do HTML.</p><p>Uma das mudanças mais fáceis é a da cor de um texto. No entanto, às vezes, nada do que você tenta parece funcionar:</p><pre><code class="language-html">&lt;style&gt;
  h2 .texto-vermelho {
    color: red;
  }
&lt;/style&gt;

&lt;h2 class="texto-vermelho" color=red;&gt;CatPhotoApp&lt;/h2&gt;</code></pre><p>Como podemos mudar a cor do elemento H2 para vermelho?</p><h3 id="op-o-n-1-usar-o-css-em-linha"><strong>Opção nº 1: usar o CSS em linha</strong></h3><p>Uma maneira seria utilizar o CSS em linha para estilizar o elemento diretamente.</p><p>Assim como ocorre com outros métodos, a formatação é importante. Observe novamente a marcação do HTML:</p><pre><code class="language-html">&lt;h2 class="texto-vermelho" color=red;&gt;CatPhotoApp&lt;/h2&gt;</code></pre><p>Para usar a estilização em linha, não se esqueça de usar o atributo <code>style</code> e de envolver as propriedades e valores em aspas duplas ("):</p><pre><code class="language-html">&lt;h2 class="texto-vermelho" style="color: red;"&gt;CatPhotoApp&lt;/h2&gt;</code></pre><h3 id="op-o-n-2-usar-os-seletores-do-css"><strong>Opção nº 2: usar os seletores do CSS</strong></h3><p>Em vez de usar a estilização em linha, é possível separar o HTML (a estrutura e o conteúdo de sua página) do CSS (a estilização).</p><p>Primeiro, vamos remover o CSS em linha:</p><pre><code class="language-html">&lt;style&gt;
  h2 .texto-vermelho {
    color: red;
  }
&lt;/style&gt;

&lt;h2 class="texto-vermelho"&gt;CatPhotoApp&lt;/h2&gt;</code></pre><p>É necessário ter cuidado, no entanto, com o seletor de CSS que você usará. Observe o elemento <code>&lt;style&gt;</code>:</p><pre><code class="language-css">h2 .texto-vermelho {
  color: red;
}</code></pre><p>Quando houver um espaço, o seletor <code>h2 .texto-vermelho</code> dirá ao navegador para selecionar o elemento com a classe <code>texto-vermelho</code> que seja filho de <code>h2</code>. O elemento H2, porém, não tem um elemento filho – você quer estilizar o próprio elemento H2.</p><p>Para consertar isso, basta remover o espaço:</p><pre><code class="language-css">h2.texto-vermelho {
  color: red;
}</code></pre><p>Também é possível selecionar o elemento com a classe <code>texto-vermelho</code> diretamente:</p><pre><code class="language-css">.texto-vermelho {
  color: red;
}</code></pre><p>Esperamos que este artigo tenha sido útil. Agradecemos pela leitura! 😀</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ A propriedade position no CSS explicada e com exemplos ]]>
                </title>
                <description>
                    <![CDATA[ Antes de poder ser muito bom em CSS, você precisa entender o básico. É preciso entender as propriedades do CSS e seus valores. Neste artigo, nos concentraremos na propriedade position do CSS. Aprenderemos sobre os vários valores dessa propriedade e sobre como eles funcionam. Vamos lá! O que é a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/a-propriedade-position-no-css-explicada-e-com-exemplos/</link>
                <guid isPermaLink="false">64f85db39566cf03c3d545fa</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 06 Sep 2023 17:34:52 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/09/5f9c9a3e740569d1a4ca247b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/learn-the-basics-the-css-position-property/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The CSS Position Property Explained with Examples</a>
      </p><p>Antes de poder ser muito bom em CSS, você precisa entender o básico. É preciso entender as propriedades do CSS e seus valores.</p><p>Neste artigo, nos concentraremos na propriedade <code>position</code> do CSS. Aprenderemos sobre os vários valores dessa propriedade e sobre como eles funcionam. Vamos lá!</p><h2 id="o-que-a-propriedade-position-do-css"><strong>O que é a propriedade position do CSS?</strong></h2><p>A propriedade <code>position</code> do CSS define a posição de um elemento em um documento. Essa propriedade funciona em conjunto com as propriedades <code>left</code>, <code>right</code>, <code>top</code>, <code>bottom</code> e <code>z-index</code> para determinar a posição final de um elemento em uma página.</p><p>Existem cinco valores que a propriedade <code>position</code> pode receber. Elas são:</p><ol><li><code>static</code></li><li><code>relative</code></li><li><code>absolute</code></li><li><code>fixed</code></li><li><code>sticky</code></li></ol><p>Vamos discutir cada uma delas.</p><h3 id="static"><strong>Static</strong></h3><p>Esse é o valor padrão para os elementos. O elemento é posicionado de acordo com o fluxo normal do documento. As propriedades <code>left</code>, <code>right</code>, <code>top</code>, <code>bottom</code> e <code>z-index</code> não afetam um elemento com <code>position: static</code>.</p><p>Vamos usar um exemplo para mostrar que <code>position: static</code> não afeta a posição de um elemento. Colocamos três elementos <code>div</code> em um contêiner (elemento pai). Usaremos esse mesmo exemplo pelo resto do artigo.</p><pre><code class="language-html">&lt;html&gt;
	&lt;body&gt;
        &lt;div class="parent-element"&gt;
            &lt;div class="sibling-element"&gt;
                I'm the other sibling element.
            &lt;/div&gt;
            
            &lt;div class="main-element"&gt;
                All eyes on me. I am the main element.
            &lt;/div&gt;
            
            &lt;div class="sibling-element"&gt;
                I'm the other sibling element.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;html&gt;</code></pre><p>Vamos adicionar <code>position: static</code> à div com a classe <code>main-element</code> e valores para <code>left</code> e <code>top</code> para ela. Também adicionaremos alguns estilos às outras divs para diferenciá-las do elemento importante.</p><pre><code class="language-css">.main-element {
    position: static;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}

.sibling-element {
    padding: 10px;
    background-color: #f2f2f2;
}</code></pre><p>Este é o resultado.</p><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/4vsm3o1d/5/embedded/result,css/" allowfullscreen="allowfullscreen" allowpaymentrequest="" frameborder="0" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><p>Percebeu que não há mudança? Isso confirma o fato de que as propriedades <code>left</code> e <code>bottom</code> não afetam um elemento com a <code>position: static</code>.</p><p>Vamos passar para o próximo valor.</p><h3 id="relative"><strong>Relative</strong></h3><p>Elementos com a <code>position: relative</code> permanecem no fluxo normal do documento. Porém, diferente dos elementos com a posição estática, <code>left</code>, <code>right</code>, <code>top</code>, <code>bottom</code> e <code>z-index</code> afetam a posição do elemento. Um deslocamento, com base nos valores das propriedades <code>left</code>, <code>right</code>, <code>top</code> e <code>bottom</code>, é aplicado ao elemento relativo a si mesmo.</p><p>Vamos substituir <code>position: static</code> por <code>position: relative</code> em nosso exemplo.</p><pre><code class="language-css">.main-element {
    position: relative;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/78tbavnu/14/embedded/result,css/" allowfullscreen="allowfullscreen" allowpaymentrequest="" frameborder="0" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><p>Perceba que as propriedades <code>left</code> e <code>bottom</code> agora afetam a posição do elemento. Veja, também, que o elemento permanece no fluxo normal do documento e que o deslocamento é aplicado com relação a si mesmo. Preste atenção a isso ao passarmos para os outros valores.</p><h3 id="absolute"><strong>Absolute</strong></h3><p>Elementos com <code>position: absolute</code> são posicionados em relação aos seus elementos pai. Nesse caso, o elemento é removido do fluxo normal do documento. Os outros elementos se comportarão como se aquele elemento não estivesse no documento. Não é criado um espaço para o elemento no layout da página. Os valores de <code>left</code>, <code>top</code>, <code>bottom</code> e <code>right</code> determinam a posição final do elemento.</p><p>Outra coisa que merece ser observada é que um elemento com <code>position: absolute</code> é posicionado com relação ao seu ancestral posicionado mais próximo. Isso quer dizer que o elemento pai precisa ter um valor de <code>position</code> diferente de <code>position: static</code>.</p><p>Se o elemento pai mais próximo não estiver posicionado, ficará posicionado com relação ao elemento pai mais próximo que estiver posicionado. Se não houver elemento ancestral posicionado, sua posição será relativa ao elemento <code>&lt;html&gt;</code>.</p><p>Vamos voltar ao nosso exemplo. Nesse caso, mudamos a posição do elemento principal para <code>position: absolute</code>. Daremos ao seu elemento pai o valor <code>position: relative</code> para que <code>main</code> não fique posicionado com relação ao elemento <code>&lt;html&gt;</code>.</p><pre><code class="language-css">.main-element {
    position: absolute;
    left: 10px;
    bottom: 10px;
    background-color: yellow;
    padding: 10px;
}

.parent-element {
    position: relative;
    height: 100px;
    padding: 10px;
    background-color: #81adc8;
}

.sibling-element {
	background: #f2f2f2;
	padding: 10px;
    border: 1px solid #81adc8;
} </code></pre><p>Este é o resultado.</p><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/5qyp4m2z/5/embedded/result,css/" allowfullscreen="allowfullscreen" allowpaymentrequest="" frameborder="0" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><p>Observe que não é criado um espaço no documento para o elemento. Ele agora está posicionado relativo ao elemento pai. Preste atenção enquanto passamos para o próximo valor.</p><h3 id="fixed"><strong>Fixed</strong></h3><p>Elementos com <code>position: fixed</code> são semelhantes aos elementos com <code>position: absolute</code>. Eles também são removidos do fluxo normal do documento. Porém, diferente daqueles com <code>position: absolute</code>, eles ficam sempre posicionados em relação ao elemento <code>&lt;html&gt;</code>.</p><p>Algo importante de se observar é que elementos com <code>position: fixed</code> não são afetados pela rolagem. Eles sempre permanecem na mesma posição na tela.</p><pre><code class="language-css">.main-element {
    position: fixed;
    bottom: 10px;
    left: 10px;
    background-color: yellow;
    padding: 10px;
}

html {
    height: 800px;
}</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/L4gsxwft/2/embedded/result,css/" allowfullscreen="allowfullscreen" allowpaymentrequest="" frameborder="0" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><p>Nesse caso, o elemento é posicionado com relação ao elemento <code>&lt;html&gt;</code>. Experimente usar a barra de rolagem para ver que o elemento permanece fixo na tela.</p><p>Vamos passar agora para o valor final.</p><h3 id="sticky"><strong>Sticky</strong></h3><p><code>position: sticky</code> é uma mistura de <code>position: relative</code> e <code>position: fixed</code>. Ele age posicionado relativamente até determinado ponto de rolagem. Então, ele age como um elemento com <code>position: fixed</code>. Não se preocupe se você não entende o que isso significa. O exemplo ajudará você a entender melhor.</p><pre><code class="language-css">.main-element {
    position: sticky;
    top: 10px;
    background-color: yellow;
    padding: 10px;
}

.parent-element {
    position: relative;
    height: 800px;
    padding: 50px 10px;
    background-color: #81adc8;
}</code></pre><figure class="kg-card kg-embed-card"><iframe width="100%" height="300" src="https://jsfiddle.net/sarahchima/f3m0qxgn/8/embedded/result,css/" allowfullscreen="allowfullscreen" allowpaymentrequest="" frameborder="0" title="Embedded content" loading="lazy" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(218, 215, 210); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(24, 26, 27); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"></iframe></figure><p>Faça a rolagem na guia <em>Result</em> para ver o resultado. Você perceberá que ele age como um elemento relativo até que chegamos a determinado ponto da tela, <code>top: 10px</code>. Então, ele passa a se comportar como um elemento fixo.</p><h2 id="resumo"><strong>Resumo</strong></h2><p>Opa! Essa foi uma viagem e tanto. Espero realmente que este artigo tenha ajudado você a entender a propriedade <code>position</code> do CSS e como ela funciona.</p><p>Fique à vontade para brincar com os exemplos caso não tenha entendido completamente algum deles. Você pode mudar os valores e perceber as diferenças ou, melhor ainda, tentar usar a propriedade <code>position</code> para trabalhar em um projeto pessoal.</p><p>Lembre-se de que melhorar no CSS requer prática constante. Por isso, mantenha-se na prática e você melhorará. Agradecemos pela leitura! 😀</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Entenda de uma vez position: absolute no CSS ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Marina Ferreira Pare de perder seus elementos na tela entendendo como um objeto se encontra onde ele deve estar Posicionar um elemento de modo absoluto tem mais a ver com a posição do contêiner do elemento do que com a própria posição. Para se posicionar, é preciso saber ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/entenda-de-uma-vez-position-absolute-no-css/</link>
                <guid isPermaLink="false">64deb2bbfa562503c1caff5a</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Fri, 18 Aug 2023 00:17:21 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/1_3ydATM3NxrGI8Bz0T6NWXQ.gif" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-understand-css-position-absolute-once-and-for-all-b71ca10cd3fd/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to understand CSS Position Absolute once and for all</a>
      </p><p>Escrito por: Marina Ferreira</p><h4 id="pare-de-perder-seus-elementos-na-tela-entendendo-como-um-objeto-se-encontra-onde-ele-deve-estar"><strong>Pare de perder seus elementos na tela entendendo como um objeto se encontra onde ele deve estar</strong></h4><p>Posicionar um elemento de modo absoluto tem mais a ver com a posição do contêiner do elemento do que com a própria posição. Para se posicionar, é preciso saber com relação a qual div pai o elemento se posicionará.</p><p>O código abaixo mostra quatro divs aninhadas. De <code>.box-1</code> a <code>.box-3</code>, todas estão centralizadas usando apenas <code>display: flex</code> e <code>margin: auto</code>. <code>.box-4</code> não tem <code>margin</code> definida, e está em sua posição padrão no fluxo do documento.</p><pre><code>&lt;body&gt;
  &lt;div class="box-1"&gt;
    &lt;div class="box-2"&gt;
      &lt;div class="box-3"&gt;
        &lt;div class="box-4"&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/body&gt;</code></pre><p>A propriedade <code>position</code> não está definida nos elementos.</p><pre><code>body {
  display: flex;
}

.box-1,.box-2,.box-3 {
  display: flex;
  margin: auto;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/u9GyvXp81914z3hJb5bSL3rcjE62v4ZKOnIn.jpeg" class="kg-image" alt="u9GyvXp81914z3hJb5bSL3rcjE62v4ZKOnIn" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/u9GyvXp81914z3hJb5bSL3rcjE62v4ZKOnIn.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/u9GyvXp81914z3hJb5bSL3rcjE62v4ZKOnIn.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"><figcaption>.box-4 está na posição padrão</figcaption></figure><p>Para poder ser posicionado, um elemento precisa conhecer duas coisas:</p><ul><li>as coordenadas para sua posição em <code>x</code> e em <code>y</code> position definidas por <code>top</code>, <code>right</code>, <code>bottom</code> e/ou <code>left</code></li><li>em relação a qual elemento pai ele se posicionará</li></ul><p>Ao aplicar <code>position: absolute</code> a <code>.box-4</code>, o elemento é removido do <code><a href="https://developer.mozilla.org/pt-BR/docs/Learn/CSS/CSS_layout/Normal_Flow">fluxo normal do documento</a></code>. Como suas coordenadas não estão definidas, ele simplesmente fica na posição padrão, que é o canto superior esquerdo do seu elemento pai.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/fGJYLQ7rKPWPOZj3qzsp-nxyBUvTRbiSfMYe.jpeg" class="kg-image" alt="fGJYLQ7rKPWPOZj3qzsp-nxyBUvTRbiSfMYe" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/fGJYLQ7rKPWPOZj3qzsp-nxyBUvTRbiSfMYe.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/fGJYLQ7rKPWPOZj3qzsp-nxyBUvTRbiSfMYe.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"><figcaption>.box-4 com position: absolute, mas sem deslocamento.</figcaption></figure><p>Ao definirmos <code>top: 0</code> e <code>left: 0</code>, o elemento precisa saber qual o elemento pai que ele deve considerar como elemento de referência. Para ser uma referência, o elemento pai precisa ser posicionado na tela usando <code>position: relative</code>. <code>.box-4</code>, então, começa a procurar por algum elemento div pai que esteja posicionado. Primeiro, ele pergunta a <code>.box-3</code>, que dá a ele uma resposta negativa. A mesma coisa ocorre com <code>.box-2</code> e depois com <code>.box-1</code>, pois, em todos eles, não há uma propriedade <code>position</code> definida.</p><p>Como <code>.box-4</code> não conseguiu encontrar um elemento pai posicionado, ele se posiciona com relação a <code>body</code>. Esse elemento está sempre posicionado na tela:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/tjeIL8YkyGBlzTpwCapPcQTfOptpdBXzWc2U.jpeg" class="kg-image" alt="tjeIL8YkyGBlzTpwCapPcQTfOptpdBXzWc2U" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/tjeIL8YkyGBlzTpwCapPcQTfOptpdBXzWc2U.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/tjeIL8YkyGBlzTpwCapPcQTfOptpdBXzWc2U.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"><figcaption>.box-4 com position: absolute e os elementos pai sem <em>position </em>definida.</figcaption></figure><p>Se colocarmos <code>position: relative</code> em <code>.box-1</code>, quando <code>.box-4</code> começar a perguntar se há algum elemento pai posicionado, receberá de <code>.box-1</code> uma resposta afirmativa. Então, <code>.box-4</code> será posicionado em relação a <code>.box-1</code> :</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/OgWq2g7Wm468076IPANHhE7HIYODqUQkUpAv.jpeg" class="kg-image" alt="OgWq2g7Wm468076IPANHhE7HIYODqUQkUpAv" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/OgWq2g7Wm468076IPANHhE7HIYODqUQkUpAv.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/OgWq2g7Wm468076IPANHhE7HIYODqUQkUpAv.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"><figcaption>.box-4 com position: absolute e .box-1 com position: relative.</figcaption></figure><p>A mesma coisa valeria para <code>.box-2</code> e <code>.box-3</code> .</p><p><strong>O elemento posicionado com position: <strong>absolute </strong>se posicionará<strong> relativ</strong>o ao seu ancestral posicionado (com position: relative) mais próximo<strong>.</strong></strong></p><p>Ao encontrar &nbsp;um ancestral posicionado, a posição dos elementos acima dele deixa de ser relevante. As imagens abaixo mostram o layout ao definir <code>position: relative</code> em <code>.box-2</code> e em <code>.box-3</code>, respectivamente:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/rBN0SYpLuSJUUnxJMPu4N0TguV3gNYBQ30Vr.jpeg" class="kg-image" alt="rBN0SYpLuSJUUnxJMPu4N0TguV3gNYBQ30Vr" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/rBN0SYpLuSJUUnxJMPu4N0TguV3gNYBQ30Vr.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/rBN0SYpLuSJUUnxJMPu4N0TguV3gNYBQ30Vr.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/eYzaYiMTTqnqSqZHYIs3g6q6uVbOmO0GX6IN.jpeg" class="kg-image" alt="eYzaYiMTTqnqSqZHYIs3g6q6uVbOmO0GX6IN" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/eYzaYiMTTqnqSqZHYIs3g6q6uVbOmO0GX6IN.jpeg 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/eYzaYiMTTqnqSqZHYIs3g6q6uVbOmO0GX6IN.jpeg 800w" sizes="(min-width: 720px) 720px" width="800" height="500" loading="lazy"><figcaption>.box-4 com position: absolute e.box-2 e .box-3 com position: relative, respectivamente.</figcaption></figure><p>Você também poderá encontrar uma explicação em vídeo no <a href="https://youtu.be/VFt_n4M9Vyk" rel="noopener">canal Code Sketch</a>, no YouTube.</p><p>Obrigado pela leitura! ✌️</p><p><em>Publicação original em<em><a href="https://marina-ferreira.github.io/tutorials/css/position-absolute/" rel="noopener"> marina-ferreira.github.io</a>.</em></em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/08/qKShNDloz66ZcWplME6mkPXlYDLYUhs6bxsC.png" class="kg-image" alt="qKShNDloz66ZcWplME6mkPXlYDLYUhs6bxsC" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/08/qKShNDloz66ZcWplME6mkPXlYDLYUhs6bxsC.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/08/qKShNDloz66ZcWplME6mkPXlYDLYUhs6bxsC.png 800w" sizes="(min-width: 720px) 720px" width="800" height="308" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Imagem de fundo com o CSS – com exemplos em HTML ]]>
                </title>
                <description>
                    <![CDATA[ O que um usuário vê em um site da web influenciará sua experiência de usuário. Também afetará a facilidade ou a dificuldade em ver o site como um todo. Adicionar imagens ao fundo de determinadas partes de um site da web, em geral, é mais agradável e interessante visualmente do ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/imagem-de-fundo-com-o-css-com-exemplos-em-html/</link>
                <guid isPermaLink="false">64c6ce79529f3305560af8f0</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Sun, 30 Jul 2023 23:29:38 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/kobu-agency-ipARHaxETRk-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-background-image-with-html-example-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">CSS Background Image – With HTML Example Code</a>
      </p><p>O que um usuário vê em um site da web influenciará sua experiência de usuário. Também afetará a facilidade ou a dificuldade em ver o site como um todo.</p><p>Adicionar imagens ao fundo de determinadas partes de um site da web, em geral, é mais agradável e interessante visualmente do que meramente trocar uma cor de fundo.</p><p>Navegadores modernos dão suporte a vários tipos de arquivos de imagem, como <code>.jpg</code>, <code>.png</code>, <code>.gif</code> e <code>.svg</code>.</p><p>Este artigo explica como adicionar imagens ao código HTML e como ajustá-las para terem uma aparência melhor.</p><h2 id="sintaxe-para-as-imagens-de-fundo-background-image-"><strong>Sintaxe para as imagens de fundo ( <code>background-image</code>)</strong></h2><p>O primeiro passo é criar um diretório (pasta) onde inserir seus itens para manter as imagens que você quer usar em seu projeto.</p><p>Por exemplo, podemos criar uma pasta <code>images</code> no projeto em que estamos trabalhando e adicionar uma imagem chamada <code>sunset.png</code>, a qual queremos usar.</p><p>A propriedade do CSS <code>background-image</code> permite que você coloque uma imagem por trás de qualquer elemento do HTML.</p><p>Esse elemento pode ser a página inteira (usando o seletor <code>body</code> no CSS, que estiliza o elemento <code>&lt;body&gt;</code> no HTML) ou uma parte específica da página, como o elemento <code>section</code> do exemplo a seguir.</p><p>Para adicionar uma <code>background-image</code> à tag <code>section</code> em seu arquivo <code>.css</code>, escreva o seguinte código:</p><pre><code class="language-css">section {
     background-image: url("images/sunset.png");
}</code></pre><p>Vamos discutir em detalhes o que ocorre aqui:</p><ul><li><code>section</code> especifica a tag na qual você deseja adicionar a imagem.</li><li><code>url()</code> é usado para informar ao CSS a localização da imagem a ser usada.</li><li>Dentro dos parênteses, <code>"images/sunset.png"</code> é o caminho para a imagem. Isso permite que o navegador saiba qual o URL deve acessar.</li><li>O caminho neste exemplo é chamado de caminho <code>relativo</code>. Isso quer dizer que ele é um arquivo local, relativo ao nosso projeto e ao nosso diretório de trabalho atual, não um endereço da web. Para adicionar imagens, também podemos usar um caminho <code>absoluto</code>, que é um endereço da web completo e que inicia com um URL de domínio (<code>http://www.</code>).</li><li>O uso das aspas é uma boa prática, mas é possível omiti-las. Assim, <code>background-image: url(images/sunset.png)</code> também funcionaria.</li><li>Não se esqueça do ponto e vírgula!</li></ul><h2 id="como-evitar-a-repeti-o-da-imagem-de-fundo"><strong>Como evitar a repetição da imagem de fundo</strong></h2><p>Ao aplicar uma imagem de fundo a um elemento, por padrão, ela se repetirá.</p><p>Se a imagem for menor do que o elemento do qual ela será a imagem de fundo, ela se repetirá para preencher o elemento.</p><p>Como evitamos que isso aconteça?</p><p>A propriedade <code>background-repeat</code> recebe quatro valores. Podemos alterar a direção na qual a imagem se repete ou evitar que ela se repita por completo.</p><pre><code class="language-css">section {
    background-repeat: repeat;
}</code></pre><p>Acima, vemos o valor padrão para a propriedade <code>background-repeat</code> se não dermos a ela um valor. Nesse caso, a imagem é repetida <strong>tanto na horizontal quanto na vertical</strong>. Assim, ela se repetirá <strong>tanto na direção do eixo <strong>x</strong> quanto na do eixo <strong>y</strong></strong>, respectivamente, até preencher o espaço.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-20-at-9.10.06-PM.png" class="kg-image" alt="Screenshot-2021-07-20-at-9.10.06-PM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-20-at-9.10.06-PM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/07/Screenshot-2021-07-20-at-9.10.06-PM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/07/Screenshot-2021-07-20-at-9.10.06-PM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w2400/2023/07/Screenshot-2021-07-20-at-9.10.06-PM.png 2400w" sizes="(min-width: 720px) 720px" width="2814" height="1030" loading="lazy"></figure><pre><code class="language-css">section {
    background-repeat: no-repeat;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-20-at-9.11.39-PM.png" class="kg-image" alt="Screenshot-2021-07-20-at-9.11.39-PM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-20-at-9.11.39-PM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/07/Screenshot-2021-07-20-at-9.11.39-PM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/07/Screenshot-2021-07-20-at-9.11.39-PM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-20-at-9.11.39-PM.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="721" loading="lazy"></figure><p>O valor <code>no-repeat</code> evita que a imagem se repita em qualquer direção. A imagem é mostrada apenas uma vez.</p><pre><code class="language-css">section {
    background-repeat: repeat-x;
}</code></pre><p>Esse valor repete a imagem <em>apenas</em> na horizontal. A imagem é repetida ao longo da página se usamos <code>repeat-x</code>. O <code>eixo x</code>, na matemática, é o eixo horizontal.</p><pre><code class="language-css">section {
    background-repeat: repeat-y;
}</code></pre><p>Esse valor repete a imagem <em>apenas</em> na vertical. A imagem é repetida de cima para baixo na página usando <code>repeat-y</code>. O <code>eixo y</code>, na matemática, é o eixo vertical.</p><h2 id="como-definir-a-posi-o-do-segundo-plano"><strong>Como definir a posição do segundo plano</strong></h2><p>Após adicionar uma imagem de fundo e evitar que ela se repita, podemos controlar sua colocação no segundo plano do elemento, melhorando seu posicionamento.</p><p>Usaremos a propriedade <code>background-position</code> para fazer isso.</p><p>O seletor recebe dois valores. O primeiro valor é a posição na horizontal, ou no eixo x. O segundo é a posição na vertical, ou no eixo y.</p><p>Esses valores podem ser expressos em unidades, como <strong>em<strong> pixels</strong></strong>:</p><pre><code class="language-css">section {
    background-position: 20px 30px;
}</code></pre><p>Isso moverá a imagem 20px na horizontal e 30px na vertical com relação ao elemento que a contém.</p><p>Em vez de pixels, podemos usar um conjunto de palavras-chave, como <strong><strong>right, left, top, down </strong>e<strong> center</strong></strong> para colocar a imagem à direita, esquerda, acima, abaixo ou ao centro do element, respectivamente.</p><pre><code class="language-css">section {
    background-position: right center;
}
</code></pre><p>Isso coloca a imagem à direita do elemento e ao centro.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.02.55-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.02.55-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-21-at-9.02.55-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/07/Screenshot-2021-07-21-at-9.02.55-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/07/Screenshot-2021-07-21-at-9.02.55-AM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.02.55-AM.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="749" loading="lazy"></figure><p>Se quisermos centralizar a imagem na horizontal e na vertical, fazemos o seguinte:</p><pre><code class="language-css">section {
    background-position: center center;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.07.41-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.07.41-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-21-at-9.07.41-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/07/Screenshot-2021-07-21-at-9.07.41-AM.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2023/07/Screenshot-2021-07-21-at-9.07.41-AM.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.07.41-AM.png 2000w" sizes="(min-width: 720px) 720px" width="2000" height="743" loading="lazy"></figure><p>Para detalhar ainda mais o posicionamento da imagem, vale a pena mencionar que podemos usar porcentagens.</p><pre><code class="language-css">section {
    background-position: 20% 40%;
}</code></pre><p>Isso posiciona a imagem a 20% do eixo horizontal e a 40% do eixo vertical do elemento.</p><p>Até agora, vimos valores usados em combinação, mas também podemos especificar apenas um valor. Como exemplo disso, temos <code>background-position: 20px;</code>, <code>background-position: center;</code> ou <code>background-position: 20%;</code>. Usando apenas um valor, aplicamos esse valor a ambas as direções.</p><h2 id="como-redimensionar-uma-imagem-de-fundo"><strong>Como redimensionar uma imagem de fundo</strong></h2><p>Para controlar o tamanho de uma imagem de fundo, podemos usar a propriedade <code>background-size</code>.</p><p>Assim como nas propriedades anteriores mencionadas, ela recebe dois valores, um para a horizontal (eixo x) e o outro para a vertical (eixo y).</p><p>Podemos usar pixels, assim:</p><pre><code class="language-css">section {
    background-size: 20px 40px;
    /* dimensiona a imagem image 20px na horizontal e 40px na vertical */
}</code></pre><p>Se não soubermos a largura exata do contêiner em que a imagem é usada de fundo, há um conjunto de valores específicos que podemos dar à propriedade.</p><ul><li><code>background-size: cover;</code> redimensiona a imagem de fundo para que cubra todo o espaço do fundo do elemento, não importando sua largura. Se a imagem for muito grande e tiver uma proporção maior que a do elemento, isso significa que a imagem será esticada e, portanto, cortada em suas arestas.</li><li><code>background-size: contain;</code> <em><em>cont</em>ém </em>a imagem, como o nome sugere. Ela garantirá que a imagem inteira seja mostrada no fundo sem cortar parte alguma dela. Se a imagem for muito menor do que o elemento, haverá espaço sobrando, o que a fará repetir para preencher o fundo. Assim, podemos usar a regra <code>background-repeat: no-repeat;</code>, conforme mencionamos anteriormente.</li></ul><p>A regra <code>background-size:cover;</code>, no caso abaixo, cortará partes da imagem:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.18.15-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.18.15-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-21-at-9.18.15-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.18.15-AM.png 870w" sizes="(min-width: 720px) 720px" width="870" height="972" loading="lazy"></figure><p>Ao mudarmos para <code>background-size:contain;</code>, veremos que a imagem se encolhe para se ajustar ao elemento <code>section</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.18.49-AM.png" class="kg-image" alt="Screenshot-2021-07-21-at-9.18.49-AM" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/Screenshot-2021-07-21-at-9.18.49-AM.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/Screenshot-2021-07-21-at-9.18.49-AM.png 906w" sizes="(min-width: 720px) 720px" width="906" height="634" loading="lazy"></figure><h2 id="como-usar-a-propriedade-background-attachment"><strong>Como usar a propriedade <code>background-attachment</code></strong></h2><p>Com a propriedade <code>background-attachment</code>, podemos controlar onde a imagem de fundo está colocada, o que significa saber se a imagem estará fixa ou não com relação ao navegador.</p><p>O valor padrão <code>background-attachment: scroll;</code>, onde a imagem de fundo permanece com seu elemento e segue o fluxo natural da página, rolando para cima e para baixo quando fazemos isso com a página.</p><p>O segundo valor que a propriedade pode ter é <code>background-attachement: fixed;</code>.<br>Isso faz com que a imagem de fundo permaneça na mesma posição, fixada à página e à <em>viewport </em>do navegador. Isso cria um efeito <em>parallax</em>. Você pode ver um exemplo disso aqui:</p><figure class="kg-card kg-embed-card"><iframe id="cp_embed_ZEKyRpp" src="https://codepen.io/deniselemonaki/embed/preview/ZEKyRpp?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=ZEKyRpp" title="Conteúdo incorporado" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><h2 id="gradientes-de-fundo"><strong>Gradientes de fundo</strong></h2><p>Um caso de uso diferente para a propriedade <code>background-image</code> é informar ao navegador para criar um gradiente.</p><p><code>background-image</code>, nesse caso, não tem um URL, mas um "gradiente linear".</p><p>A maneira mais simples de se fazer isso é especificar um ângulo. Isso controla a direção do gradiente e o modo como as cores serão misturadas. Por fim, adicione as duas cores que você quer misturadas em um gradiente para o fundo do elemento.</p><p>Um gradiente que vá de cima para baixo e do preto ao branco pode ser definido assim:</p><pre><code class="language-css">section {
    background-image: linear-gradient(black,white);
}</code></pre><p>Os ângulos mais usados para os gradientes são:</p><ul><li><code>0deg</code>, de cima para baixo</li><li><code>90deg</code>, da esquerda para a direita</li><li><code>180deg</code>, de baixo para cima</li><li><code>270deg</code>, da direita para a esquerda</li></ul><p>Os ângulos acima correspondem a <code>to top</code>, <code>to right</code>, <code>to bottom</code> e <code>to left</code>, respectivamente.</p><pre><code class="language-css">section{
  background-image: linear-gradient(to left,pink,orange);
}</code></pre><figure class="kg-card kg-embed-card"><iframe id="cp_embed_poPrPjo" src="https://codepen.io/deniselemonaki/embed/preview/poPrPjo?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=poPrPjo" title="Conteúdo incorporado" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Em vez de usar as palavras-chave das cores, podemos usar cores em hexadecimal para sermos mais específicos e ter um intervalo maior de opções:</p><pre><code class="language-css">section{
  background-image: linear-gradient(to left,#42275a, #734b6d)
}</code></pre><figure class="kg-card kg-embed-card"><iframe id="cp_embed_LYyjWwL" src="https://codepen.io/deniselemonaki/embed/preview/LYyjWwL?default-tabs=css%2Cresult&amp;height=300&amp;host=https%3A%2F%2Fcodepen.io&amp;slug-hash=LYyjWwL" title="Conteúdo incorporado" scrolling="no" frameborder="0" height="300" allowtransparency="true" class="cp_embed_iframe" style="width: 100%; overflow: hidden;" loading="lazy"></iframe></figure><p>Também podemos incluir mais de duas cores em um gradiente, criando efeitos e esquemas de cores diversos.</p><h2 id="conclus-o"><strong>Conclusão</strong></h2><p>Isso marca o final de nossa introdução à sintaxe básica da propriedade <code>background-image</code>.</p><p>A partir daqui, as possibilidades são ilimitadas e deixa espaço para usarmos toda nossa expressão criativa. Esses efeitos ajudam o usuário a ter uma experiência agradável ao visitar seu site na web.</p><p>Espero que o artigo tenha sido útil. Obrigado pela leitura.</p><p>Divirta-se com suas criações em design e uma ótima programação para você!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como criar uma barra de navegação responsiva com um menu de sanduíche usando Flexbox ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: Charlie Waite Durante um projeto recente, minha equipe teve que remover todos os vestígios do Bootstrap. Isso significou que a barra de navegação responsiva, extremamente útil, teve que ser criada do zero. Eu sou relativamente novo em CSS, tendo sempre confiado nas navbars do Bootstrap pela sua simplicidade. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-criar-uma-barra-de-navegacao-responsiva-com-um-menu-de-sanduiche-usando-flexbox/</link>
                <guid isPermaLink="false">64b7267eb04bf0067ce2438c</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Wed, 19 Jul 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/0_duHsALHgV9KMBanO_-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-build-a-responsive-navbar-with-a-toggle-menu-using-flexbox-3438e1d08783/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to build a responsive navbar with a toggle menu using Flexbox</a>
      </p><p>Escrito por: Charlie Waite</p><p>Durante um projeto recente, minha equipe teve que remover todos os vestígios do Bootstrap. Isso significou que a barra de navegação responsiva, extremamente útil, teve que ser criada do zero. Eu sou relativamente novo em CSS, tendo sempre confiado nas <em>navbars</em> do Bootstrap pela sua simplicidade. Então, me ofereci para assumir essa tarefa. Aqui está o que aprendi e fiz ao longo do processo.</p><p>Neste artigo, vou assumir que você tem conhecimento básico de HTML, CSS e JavaScript — sabe como vincular uma folha de estilo ao HTML ou aplicar os estilos em uma tag <code>&lt;style&gt;</code> — e que sabe como importar um arquivo de JavaScript para sua página.</p><p><em>Já vi elitistas se defendendo por meio de críticas ao meu jeito de fazer as coisas<em>, </em>em especial pelo fato de usar<em> <code>position: absolute</code> </em>para o menu de sanduíche <em>— </em>se tiver maneiras melhores de fazer isso, fique à vontade para publicar sua solução. Juntos, podemos ajudar milhares de pessoas que leem estes artigos<em>!</em></em></p><h3 id="introdu-o"><strong>Introdução</strong></h3><p>Primeiro, comecei com o HTML básico para fazer o <em>layout</em>:</p><pre><code class="language-html">&lt;div class="Navbar"&gt;
  &lt;div class="Navbar__Link Navbar__Link-brand"&gt;
    Website title
  &lt;/div&gt;
  &lt;div class="Navbar__Link"&gt;
    Link
  &lt;/div&gt;
  &lt;div class="Navbar__Link"&gt;
    Link
  &lt;/div&gt;
  &lt;div class="Navbar__Link"&gt;
    Link
  &lt;/div&gt;
  &lt;div class="Navbar__Link"&gt;
    Link
  &lt;/div&gt;
  &lt;div class="Navbar__Link"&gt;
    Link
  &lt;/div&gt;
&lt;/div&gt;</code></pre><p>Você pode usar a convenção de nomes que quiser para as classes.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_3tYOXMsOAdUXGmcXmOt50g.png" class="kg-image" alt="1_3tYOXMsOAdUXGmcXmOt50g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_3tYOXMsOAdUXGmcXmOt50g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_3tYOXMsOAdUXGmcXmOt50g.png 800w" sizes="(min-width: 720px) 720px" width="800" height="112" loading="lazy"></figure><p>Bem, não estamos vendo muita coisa aqui ainda. Essa é apenas uma lista de itens simples. Porém, com apenas uma linha de CSS, vemos o poder do Flexbox.</p><pre><code class="language-css">.Navbar {
  display: flex;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_dK5IrDcMRW00HPZ-wX6cBw.png" class="kg-image" alt="1_dK5IrDcMRW00HPZ-wX6cBw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_dK5IrDcMRW00HPZ-wX6cBw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_dK5IrDcMRW00HPZ-wX6cBw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="80" loading="lazy"><figcaption>Divs da navbar alinhadas horizontalmente</figcaption></figure><p>Uma linha de código e já temos nossos itens de navegação alinhados horizontalmente na parte superior da página.</p><p>Agora, vamos adicionar dois elementos <code>nav</code> ao nosso HTML para termos alguns itens à esquerda e à direita da <em>navbar</em>:</p><pre><code class="language-html">&lt;div class="Navbar"&gt;
  &lt;nav class="Navbar__Items"&gt;
    &lt;div class="Navbar__Link Navbar__Link-brand"&gt;
      Website title
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
  &lt;nav class="Navbar__Items Navbar__Items--right"&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
&lt;/div&gt;</code></pre><p>Vamos fazer também a estilização básica de nossa classe <code>Navbar</code>, que envolve todos os outros elementos:</p><pre><code class="language-css">.Navbar {
  background-color: #46ACC2;
  display: flex;
  padding: 16px;
  font-family: sans-serif;
  color: white;
}</code></pre><p>Você, logicamente, pode escolher seu próprio esquema de cores, fontes e preenchimento (do inglês, <em>padding</em>).</p><p>Nossa <em>navbar, </em>de momento, terá esta aparência:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_ulTsKdXWB72DtxfDLuzl9A.png" class="kg-image" alt="1_ulTsKdXWB72DtxfDLuzl9A" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_ulTsKdXWB72DtxfDLuzl9A.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_ulTsKdXWB72DtxfDLuzl9A.png 800w" sizes="(min-width: 720px) 720px" width="800" height="47" loading="lazy"></figure><p>É... já parece um pouco melhor, mas não podemos deixar nossos itens de navegação serem exibidos na vertical. Antes de seguir lendo, tente adivinhar o que faremos a seguir…</p><p>Agora, a propriedade <code>display:flex</code> da classe <code>.Navbar</code> já não está mais responsável por esses itens. Eles são responsabilidade dos contêineres <code>&lt;nav&gt;</code>. Queremos que os dois estejam alinhados na horizontal.</p><p>Desse modo, alteramos a classe <code>.Navbar__Items</code> também:</p><pre><code class="language-css">.Navbar__Items {
  display:flex;
}</code></pre><p>Em seguida, vamos adicionar preenchimento aos nossos links para deixar tudo um pouco mais bonito:</p><pre><code class="language-css">.Navbar__Link {
  padding-right: 8px;
}</code></pre><p>A aparência da <em>navbar</em>, agora, é esta:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_DTgVCsT7tQlQ5Qgk5mQpSQ.png" class="kg-image" alt="1_DTgVCsT7tQlQ5Qgk5mQpSQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_DTgVCsT7tQlQ5Qgk5mQpSQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_DTgVCsT7tQlQ5Qgk5mQpSQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="30" loading="lazy"></figure><p>Estamos chegando lá. No entanto, também queremos que o segundo elemento <code>&lt;nav&gt;</code> esteja alinhado à direita. Como você deve ter percebido, adicionei uma classe a mais ao segundo elemento <code>&lt;nav&gt;</code>, <code>.Navbar__Items--right</code>.</p><p>Vamos apenas adicionar um atributo <code>margin-left:auto</code> a essa classe:</p><pre><code class="language-css">.Navbar__Items--right {
  margin-left:auto;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_wDWAi7RCETK64FeP4yLNEA.png" class="kg-image" alt="1_wDWAi7RCETK64FeP4yLNEA" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_wDWAi7RCETK64FeP4yLNEA.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_wDWAi7RCETK64FeP4yLNEA.png 800w" sizes="(min-width: 720px) 720px" width="800" height="32" loading="lazy"><figcaption>Depois de adicionar margin-left ao segundo elemento nav</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_wzj25OyMsvenI7APSxBDCg.png" class="kg-image" alt="1_wzj25OyMsvenI7APSxBDCg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_wzj25OyMsvenI7APSxBDCg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_wzj25OyMsvenI7APSxBDCg.png 796w" sizes="(min-width: 720px) 720px" width="796" height="100" loading="lazy"><figcaption>Em um dispositivo móvel</figcaption></figure><p>Como você pode ver, parece bem melhor. Já temos uma <em>navbar</em> totalmente responsiva. O que aconteceria, contudo, se cada item de navegação tivesse um texto maior? O que aconteceria se tivéssemos mais itens?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_TRNh6xHheH7t5I3sUxLI0A.png" class="kg-image" alt="1_TRNh6xHheH7t5I3sUxLI0A" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_TRNh6xHheH7t5I3sUxLI0A.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_TRNh6xHheH7t5I3sUxLI0A.png 732w" sizes="(min-width: 720px) 720px" width="732" height="168" loading="lazy"><figcaption>Exemplos de links mais longos</figcaption></figure><p>Como podem ver, não é isso que queremos. Queremos deixar todos os itens de navegação em uma única linha, para manter a consistência, ou que eles fossem escondidos em um menu que o usuário pudesse abrir e fechar.</p><p>Vamos usar a segunda opção, pois é um estilo muito mais limpo – e não teremos que nos preocupar com o usuário lutando para ler o texto em cada item de navegação.</p><h3 id="flex-direction"><strong><code>flex-direction</code></strong></h3><p>Com um item que tenha <code>display:flex;</code>, também há uma regra para a direção na qual queremos que os itens estejam orientados. Como padrão, é ao longo de uma linha (em inglês, <em>row</em>), o que alinha todos os itens ao longo do eixo x.</p><p>Em nosso caso, queremos um menu vertical pequeno na parte superior da página. Vamos tentar alterar isso usando <code>flex-direction</code> nos dois elementos <code>.Navbar</code> e dando a <code>.Navbar__Items</code> o valor de <code>column</code> — isso alinhará todos os itens de menu ao longo do eixo y — sempre que a largura da tela for 768px ou menos.</p><p>Vamos, também, remover aquele <code>margin-left</code> do segundo elemento <code>&lt;nav&gt;</code>:</p><pre><code class="language-css">@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
  .Navbar__Items--right {
    margin-left: 0;
  }
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_rmC0cKnio5Cg9W2CA1luPQ.png" class="kg-image" alt="1_rmC0cKnio5Cg9W2CA1luPQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_rmC0cKnio5Cg9W2CA1luPQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_rmC0cKnio5Cg9W2CA1luPQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="184" loading="lazy"><figcaption>Navbar com largura de tela de 768px ou inferior</figcaption></figure><p>Agora, contudo, os itens de navegação estão sempre visíveis, o que toma uma quantidade significativa de espaço em tela.</p><p>Em nossa <em>media query</em>, vamos adicionar uma segunda regra para <code>.Navbar__Items</code>, de maneira que não fiquem visíveis:</p><pre><code class="language-css">@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
  .Navbar__Items {
    display:none;
  }
  .Navbar__Items--right {
    margin-left:0;
  }
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_8ipupgzJ6_ersFfTgVvm6w.png" class="kg-image" alt="1_8ipupgzJ6_ersFfTgVvm6w" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_8ipupgzJ6_ersFfTgVvm6w.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_8ipupgzJ6_ersFfTgVvm6w.png 800w" sizes="(min-width: 720px) 720px" width="800" height="68" loading="lazy"><figcaption>Essa é a aparência da navbar em um dispositivo móvel neste momento</figcaption></figure><h3 id="o-bot-o-para-abrir-fechar-o-menu"><strong>O botão para abrir/fechar o menu</strong></h3><p>Para o botão de abrir/fechar o menu, usarei um ícone fornecido pelo <a href="https://fontawesome.com/" rel="noopener">Font Awesome</a>. Se decidir fazer o mesmo, basta seguir as instruções no site deles para integrar os ícones ao seu projeto. Você pode usar qualquer conjunto de ícones que quiser, ou até texto simples, se isso for o que você quer.</p><p>Vamos adicionar esse ícone ao HTML:</p><pre><code class="language-html">&lt;div class="Navbar"&gt;
   &lt;div class="Navbar__Link Navbar__Link-brand"&gt;
      Website title
    &lt;/div&gt;
    &lt;div class="Navbar__Link Navbar__Link-toggle"&gt;
      &lt;i class="fas fa-bars"&gt;&lt;/i&gt;
    &lt;/div&gt;
  &lt;nav class="Navbar__Items"&gt;
    &lt;div class="Navbar__Link"&gt;
      Longer Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Longer Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
  &lt;nav class="Navbar__Items Navbar__Items--right"&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
&lt;/div&gt;</code></pre><p>A inclusão é a linha que diz <code>&lt;i class="fas fa-bars"&gt;&lt;/i&gt;</code>. Você perceberá que o ícone não vai dentro de nenhuma das tags <code>nav</code>, ficando fora, juntamente com o título do site. Isso é algo que faz sentido.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_GkN1E6ZKm7W93FKDqTiWBQ.png" class="kg-image" alt="1_GkN1E6ZKm7W93FKDqTiWBQ" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_GkN1E6ZKm7W93FKDqTiWBQ.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_GkN1E6ZKm7W93FKDqTiWBQ.png 800w" sizes="(min-width: 720px) 720px" width="800" height="92" loading="lazy"><figcaption>ícone do menu adicionado</figcaption></figure><p>Claro que não é o local onde queremos que ele esteja. Pior ainda, ele está visível em resoluções para desktop.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_K5ygf98rpZNXLxQcjsJkXw.png" class="kg-image" alt="1_K5ygf98rpZNXLxQcjsJkXw" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_K5ygf98rpZNXLxQcjsJkXw.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_K5ygf98rpZNXLxQcjsJkXw.png 800w" sizes="(min-width: 720px) 720px" width="800" height="29" loading="lazy"></figure><p>Vamos consertar isso. Vamos fazer o que fizemos com os <code>.Navbar__Items</code> nas resoluções para dispositivos móveis. Desta vez, faremos isso com o ícone de menu nas resoluções para desktop:</p><pre><code class="language-css">.Navbar__Link-toggle {
  display: none;
}</code></pre><p>Em seguida, vamos adicionar algumas regras para a mesma classe dentro de nossa <em>media query</em>:</p><pre><code class="language-css">.Navbar__Link-toggle {
  align-self: flex-end;
  display: initial;
  position: absolute;
  cursor: pointer;
}</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_5jybOok3eVV03DHWKitL3g.png" class="kg-image" alt="1_5jybOok3eVV03DHWKitL3g" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/07/1_5jybOok3eVV03DHWKitL3g.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_5jybOok3eVV03DHWKitL3g.png 800w" sizes="(min-width: 720px) 720px" width="800" height="66" loading="lazy"><figcaption>Essa é a aparência da navbar em dispositivos móveis com o botão para abrir e fechar o menu</figcaption></figure><p>Estamos praticamente prontos. Já temos a aparência desejada. Precisamos apenas adicionar a funcionalidade de abrir e fechar o menu ao ícone.</p><p>No JavaScript, adicione o seguinte:</p><pre><code class="language-html">function classToggle() {
  const navs = document.querySelectorAll('.Navbar__Items')
  
  navs.forEach(nav =&gt; nav.classList.toggle('Navbar__ToggleShow'));
}

document.querySelector('.Navbar__Link-toggle')
  .addEventListener('click', classToggle);</code></pre><p>Por fim, adicione <code>Navbar__ToggleShow</code> com a regra <code>display:flex</code> à <em>media query</em>.</p><p>Pronto! Temos uma <em>navbar</em> totalmente responsiva com um menu que abre e fecha. Usando o Flexbox, fica muito simples!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/07/1_k0-kcRuPaA4LeuxzcIlJMg.gif" class="kg-image" alt="1_k0-kcRuPaA4LeuxzcIlJMg" width="800" height="569" loading="lazy"></figure><h3 id="vers-o-final"><strong>Versão final</strong></h3><h4 id="html-"><strong>HTML:</strong></h4><pre><code class="language-html">&lt;div class="Navbar"&gt;
   &lt;div class="Navbar__Link Navbar__Link-brand"&gt;
      Website title
    &lt;/div&gt;
    &lt;div class="Navbar__Link Navbar__Link-toggle"&gt;
      &lt;i class="fas fa-bars"&gt;&lt;/i&gt;
    &lt;/div&gt;
  &lt;nav class="Navbar__Items"&gt;
    &lt;div class="Navbar__Link"&gt;
      Longer Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Longer Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
  &lt;nav class="Navbar__Items Navbar__Items--right"&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
    &lt;div class="Navbar__Link"&gt;
      Link
    &lt;/div&gt;
  &lt;/nav&gt;
&lt;/div&gt;</code></pre><h4 id="css-"><strong>CSS:</strong></h4><pre><code class="language-css">.Navbar {
  background-color: #46ACC2;
  display: flex;
  padding: 16px;
  font-family: sans-serif;
  color: white;
}

.Navbar__Link {
  padding-right: 8px;
}

.Navbar__Items {
  display: flex;
}

.Navbar__Items--right {
  margin-left:auto;
}

.Navbar__Link-toggle {
  display: none;
}

@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
    
.Navbar__Items {
    display:none;
  }
    
.Navbar__Items--right {
    margin-left:0;
  }
    
.Navbar__ToggleShow {
    display: flex;
  }
    
.Navbar__Link-toggle {
    align-self: flex-end;
    display: initial;
    position: absolute;
    cursor: pointer;
   } 
}</code></pre><h4 id="javascript-"><strong>JavaScript:</strong></h4><pre><code class="language-js">function classToggle() {
  const navs = document.querySelectorAll('.Navbar__Items')
  
  navs.forEach(nav =&gt; nav.classList.toggle('Navbar__ToggleShow'));
}

document.querySelector('.Navbar__Link-toggle')
  .addEventListener('click', classToggle);</code></pre><p>Você pode ler mais sobre o Flexbox na MDN:</p><p><strong><a href="https://developer.mozilla.org/pt-BR/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox">Conceitos básicos de flexbox</a></strong></p><p>Você também pode consultar o local onde eu mesmo aprendi sobre o básico do Flexbox (texto em inglês):</p><p><strong><a href="https://www.freecodecamp.org/news/i-just-launched-a-free-full-length-flexbox-course-where-you-can-build-projects-interactively-1860e3d3c4af/">Learn CSS Flexbox in this FREE and interactive tutorial</a></strong></p><p>Siga o autor no <a href="https://github.com/charliearlie" rel="noopener">GitHub</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Linha-a-linha: truques avançados de CSS para listas drop-down clicáveis e menus ]]>
                </title>
                <description>
                    <![CDATA[ Escrito por: David Piepgrass Desde que me lembro, sempre existiram dois tipos de seletores. Existia o tipo onde o texto no topo podia ser editado e o tipo onde isso não era possível. O HTML inclui o segundo tipo, sem problemas: <select>     <option>Apple</option>    ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/linha-a-linha-truques-avancados-de-css-para-listas-drop-down-clicaveis-e-menus/</link>
                <guid isPermaLink="false">640075e1c24870050d79f29f</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Afonso Branco ]]>
                </dc:creator>
                <pubDate>Mon, 01 May 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/1_LL8iCzq1GKLgtaP_Y_be7w.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/mostly-css-drop-down-combo-boxes-4ff4bb182ff7/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Line-by-line: advanced CSS tricks for click-to-open drop-down lists and menus</a>
      </p><p>Escrito por: David Piepgrass</p><p>Desde que me lembro, sempre existiram dois tipos de seletores.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/2abIBTqGwaakCmqxPmiGqUF8ldqbzZlfMBnR.png" class="kg-image" alt="2abIBTqGwaakCmqxPmiGqUF8ldqbzZlfMBnR" width="228" height="118" loading="lazy"></figure><p>Existia o tipo onde o texto no topo podia ser editado e o tipo onde isso não era possível. O HTML inclui o segundo tipo, sem problemas:</p><pre><code class="language-html">&lt;select&gt;
    &lt;option&gt;Apple&lt;/option&gt;  
    &lt;option&gt;Banana&lt;/option&gt;  
    &lt;option&gt;Cherry&lt;/option&gt;  
    &lt;option&gt;Dewberry&lt;/option&gt;
&lt;/select&gt;</code></pre><p>Fiquei, no entanto, chocado ao perceber que o primeiro tipo não existe em HTML. Bem, existe algo chamado <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist" rel="noopener"><code>datalist</code></a>, mas não funciona bem — os utilizadores não podem clicar em algo para ver a lista completa. Além disso, à medida que começas a escrever, os itens começam imediatamente a desaparecer caso não comecem pela mesma string que o utilizador escreveu.</p><p>O CSS, contudo, é uma ferramenta de estilização com um poder impressionante: já foram criados <a href="http://victordarras.fr/cssgame/" rel="noopener">jogos</a> de <a href="https://codepen.io/elad2412/full/DBeNNZ">vídeo</a> <a href="https://minocernota.com/articles/pure_css_game/" rel="noopener">completos</a> com CSS, HTML e alguns ficheiros de imagens – que bom, acabei de perder metade da minha audiência.</p><p>Isto não quer dizer que o CSS pode fazer <strong>tudo</strong>, mas que existem pelo menos "atalhos" para alcançar uma grande variedade de truques. Aqueles de vocês que estão cansados de jogar estão provavelmente interessados em aprender sobre os truques do ofício. Acho que existe muito a aprender ao compreender como fazer uma caixa de combo.</p><p>Neste artigo, vais aprender como isto funciona:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/biYH9OqxjvdVcIPN3FqUvR-VDiNaQilF2jwx.gif" class="kg-image" alt="biYH9OqxjvdVcIPN3FqUvR-VDiNaQilF2jwx" width="734" height="326" loading="lazy"></figure><p>No Windows, chamamos isso de "caixas de combo" (em inglês, <em>combo boxes</em>), visto que elas combinam a parte superior (geralmente, um campo de texto) com uma parte de <em>popup </em>(geralmente, uma lista <em>drop-down</em>).</p><h3 id="como-utilizar"><strong>Como utilizar</strong></h3><p>A caixa de combo pode ser construída com <em>divs </em>e/ou <em>spans</em>. Lembra-te apenas que um analisador de HTML tem algumas regras de hierarquia. Por exemplo, não permite que um <code>p</code> seja um antecessor de <code>div</code> ou <code>ul</code>. Um <code>span</code> também não pode ser um antecessor de <code>p</code> ou <code>div</code>. Estas regras não se aplicam ao código JavaScript/React que edita o DOM.</p><p>O CSS estará à espera de três filhos: primeiro, a parte superior (conteúdo a ser sempre exibido), depois o <code><strong><strong><strong><strong>&lt;span class=</strong></strong></strong></strong>"downarrow" <strong><strong><strong><strong>tabindex=</strong></strong></strong></strong>"-1"<strong><strong><strong><strong>&gt;&lt;/span&gt;</strong></strong></strong></strong></code><strong><strong>, </strong></strong>para a seta para baixo, e, por fim, o conteúdo a ser apresentado dentro da caixa <em>drop-down</em>:</p><pre><code class="language-html">&lt;div class="combobox"&gt;
  &lt;div&gt;Caixa de combo simples&lt;/div&gt;
  &lt;div tabindex="-1" class="downarrow"&gt;&lt;/div&gt;
  &lt;div&gt;
    O conteúdo do popup do drop-down vai aqui
  &lt;/div&gt;
&lt;/div&gt;</code></pre><p>O <em>drop-down</em>, inicialmente, abrirá apenas quando a seta para baixo (▾) for clicada. Para fazer com que a caixa abra quando o conteúdo do topo for clicado, é necessário adicionares a classe <code>dropdown</code> a <code>combobox</code> e adicionar um atributo <code>tabindex="0"</code> ao primeiro filho:</p><pre><code class="language-html">&lt;div class="combobox dropdown"&gt;
  &lt;div tabindex="0"&gt;Caixa de combo simples&lt;/div&gt;
  &lt;div tabindex="-1" class="downarrow"&gt;&lt;/div&gt;
  &lt;div&gt;
    O conteúdo do popup do drop-down vai aqui
  &lt;/div&gt;
&lt;/div&gt;</code></pre><p><strong>Observação<strong><strong><strong>:</strong></strong></strong> </strong><code>tabindex="-1"</code> significa "podes clicar para lhe dar destaque, mas não podes destacá-lo utilizando a tecla Tab do teclado". <code>tabindex="0"</code> significa "podes dar-lhe destaque ao clicar ou com a tecla Tab, e o <em>browser </em>escolherá a ordem pela qual são destacados os diferentes elementos com a tecla Tab." Ao contrário de um elemento <code>&lt;select&gt;</code>, a caixa de <em>popup</em> não será capaz de sair da janela do <em>browser</em> (isto pode ser uma limitação intencional de todo o conteúdo definido pelo utilizador — caso o conteúdo definido pelo utilizador passe para lá dos limites da área da página, pode ser um risco de segurança para sites que tentam confundir ou enganar os utilizadores).</p><p>Como bónus, serás capaz de criar uma lista <em>drop-down</em> que <strong><strong>nã</strong>o</strong> é uma caixa de combo apenas com a classe <code>dropdown</code>:</p><pre><code class="language-html">&lt;div class="dropdown"&gt;
   *** &lt;span tabindex="0"&gt;Menu drop-down&lt;/span&gt; *** 
   &lt;div&gt;
     O conteúdo do popup do drop-down vai aqui
   &lt;/div&gt;
&lt;/div&gt;</code></pre><p>Isto é um menu <em>drop-down</em> que se clica para abrir (caso queiras um menu <em>drop-down</em> que abre ao passar o rato por cima em vez de clicar, já existem <a href="https://www.google.com/search?num=20&amp;q=pure+css+hover+menu" rel="noopener">muitos outros tutoriais</a> sobre isso.)</p><p>Neste caso, o último elemento contém o conteúdo do <em>drop-down</em> e todos os outros filhos estão sempre visíveis, mas apenas os elementos com um atributo <code>tabindex</code> podem ser clicados para abrir a área de <em>popup</em>.</p><p>Podes editar de modo seguro a margem e o contorno de uma caixa de combo, assim como os seus filhos, sem comprometer o seu comportamento, com exceção para uma coisa: não deixes que o <code>padding-right</code> fique muito pequeno porque a seta para baixo ▾ é apresentada no <em>padding</em> — o seu tamanho deve ser de, pelo menos, <code>1em</code>.</p><h4 id="resumo"><strong>Resumo</strong></h4><ul><li>A classe <code>combobox</code> é para a caixa de combo</li><li>A classe <code>dropdown</code> é para menus e caixas de combo que aparecem quando o conteúdo de cima for clicado (lembra-te de que <code>tabindex="0"</code>)</li><li>A classe <code>downarrow</code> adiciona o ícone da seta para baixo (<code>tabindex="-1"</code> é obrigatório, porque não pode ser adicionado via CSS.)</li><li>O último filho de <code>combobox</code> ou <code>dropdown</code> é o conteúdo do <em>drop-down</em>.</li></ul><p>Podes <a href="https://codepen.io/qwertie/pen/QBYMdZ" rel="noopener">pré-visualizar a demonstração com código-fonte</a>.</p><h3 id="funcionalidades-do-css-de-que-vamos-precisar"><strong>Funcionalidades do CSS de que vamos precisar</strong></h3><p>Vamos precisar de <strong>muitas</strong> coisas para isto. Aqui está uma lista (fica à vontade para saltar esta parte e ler mais tarde.)</p><h4 id="seletores"><strong>Seletores</strong></h4><p><strong>Seletores b<strong>ásic</strong>os<strong>:</strong></strong><br><code>.a</code> significa "corresponde a elementos com <code>class='a'</code>".<br><code>A, B</code> significa "corresponde ao seletor <code>A</code> ou seletor <code>B</code>".<br><code>A B</code> significa "corresponde a um elemento <code>B</code> que tem um elemento <code>A</code> como antecessor".<br><code>A &gt; B</code> significa "corresponde a um elemento B cujo elemento pai é um elemento A".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> </strong><code><strong><strong>:first-child</strong></strong></code><strong><strong>:</strong></strong><br><code>*:first-child</code> significa "corresponde a qualquer elemento desde que seja o primeiro descendente de algum elemento pai".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> <strong><code>:last-child</code>:</strong></strong><br><code>*:last-child</code> significa "corresponde a qualquer elemento desde que seja o último descendente de outro elemento". Por exemplo, <code>.combobox &gt; *:last-child</code> encontra o último descendente de qualquer elemento com <code>class="combobox"</code>.</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> <strong><code>:empty</code>:</strong></strong><br><code>.downarrow:empty</code> significa "corresponde a um elemento com <code>class="downarrow"</code> caso não tenha nada dentro (nem mesmo texto simples)".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> <strong><code>:only-child</code>:</strong></strong><br><code>*:only-child</code> significa "corresponde a qualquer elemento caso este seja o único descendente de algum elemento".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> <strong><code>:not</code>:</strong></strong><br><code>.dropdown:not(.sticky)</code> significa "corresponde a um elemento com a classe <code>dropdown</code> caso este não tenha a classe <code>sticky</code>".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> </strong><code><strong><strong>:focus</strong></strong></code><strong><strong>:</strong></strong><br><code>.downarrow:focus</code> significa "corresponde a um elemento com a classe <code>downarrow</code> caso este esteja <strong>destacado,</strong> porque este tem um <code>tabindex</code> e foi clicado com o rato ou selecionado com a tecla Tab".</p><p><strong>P<strong>seudo</strong>s<strong>seletor</strong> <strong><code>:hover</code>:</strong></strong><br><code>.foo:hover</code> significa "corresponde a um elemento com a classe <code>foo</code> quando o ponteiro do rato está por cima dele".</p><p><code>A ~ B</code> significa "corresponde a <code>B</code> caso um elemento irmão anterior tenha correspondido a <code>A</code>".</p><h4 id="estilos"><strong>Estilos</strong></h4><p><strong>Estilos básicos<strong>:</strong></strong><br>Certifica-te de que compreendes o <a href="https://www.w3schools.com/css/css_boxmodel.asp" rel="noopener">modelo de caixas</a> (texto em inglês) e os seus vários estilos associados (incluindo <code>width</code>, <code>height</code>, <code>min-width</code> e <code>max-height</code>) antes de continuares. Também deves ter conhecimentos sobre estilos básicos, tais como <code>font-size</code>, <code>font-family</code>, <code>color</code> e <code>background-color</code>.</p><p>Além disso, deves ter conhecimentos sobre unidades, especialmente as <a href="https://css-tricks.com/the-lengths-of-css/" rel="noopener">unidades mais comuns</a> (texto em inglês):<br><code>px</code>, <code>em</code>, <code>rem</code>, e <code>%</code>.</p><p><strong>Estilo </strong><code><strong><strong>box-sizing: border-box</strong></strong></code><br>Isto significa que a largura e altura de um elemento <a href="https://css-tricks.com/international-box-sizing-awareness-day/" rel="noopener">incluem o <em>padding</em> e o contorno</a> (texto em inglês).</p><p><strong>Estilo <strong><code>display:</code></strong></strong><br>Vamos utilizar <code>display: block</code>, que apresenta um elemento como um "bloco", que é como um parágrafo em que dois blocos adjacentes têm quebras de linha entre eles.</p><p>Também vamos utilizar <code>display: inline-block</code>, que apresenta um elemento <strong>em linha</strong>, como um ícone dentro de um parágrafo, mas permite ter margens, contornos e <em>padding</em>.</p><p>Não vamos utilizar explicitamente o <code>display: inline</code>, que é utilizado para elementos que não têm margens, contornos ou <em>padding</em>, e não precisam de quebras de linha entre eles (<code>&lt;b&gt;like this&lt;/b&gt;</code>).</p><p><a href="https://css-tricks.com/almanac/properties/d/display/" rel="noopener">Fica a saber mais</a> sobre o <em>display </em>(texto em inglês).</p><p><strong>Estilo <strong><code>position:</code></strong></strong><br>Na caixa de combo, vamos ver como é utilizado este estilo para remover elementos do fluxo normal do documento.</p><p>Os elementos normalmente têm o estilo <code>position: static</code>, que significa apenas "posiciona-o normalmente na página".</p><p><code>position: relative</code> é como o <code>static</code>, excepto para duas coisas: primeiro, o elemento pode ser movido para a esquerda, direita, cima ou baixo, sem afetar qualquer um dos outros elementos.<br>No entanto, a caixa de combo não precisa desta funcionalidade. O segundo efeito de <code>relative</code> é marcar o elemento como "posicionado".</p><p>Isto é importante, pois outro tipo de posicionamento, <code>absolute</code>, posiciona um elemento em relação ao antecessor que estiver "posicionado" mais próximo. Especificamente, o <em>popup </em>do <em>drop-down</em> utilizará <code>position: absolute</code> de modo a posicionar-se em relação à parte superior da caixa de combo — portanto, a própria caixa de combo é marcada como <code>relative</code>.</p><p>Além disso, um elemento <code>absolute</code> não afeta o posicionamento dos outros itens na página, nem mesmo o seu elemento pai. Isto é exatamente o que queremos para uma caixa de <em>popup</em>.</p><p><strong>Estilos </strong><code><strong><strong>left</strong></strong></code><strong><strong>, <code>top</code>, <code>right</code> </strong>e<strong> <code>bottom</code></strong></strong><br>Estes estilos são utilizados com <code>position: relative</code> e <code>position: absolute</code>, e funcionam de maneira um pouco diferente para cada um deles. Mais informação sobre isto depois.</p><p><a href="https://www.w3schools.com/css/css_positioning.asp" rel="noopener">Aprende mais</a> sobre posicionamento (texto em inglês).</p><p><strong>Estilo <strong><code>outline:</code></strong></strong><br>O <em>Outline</em> é um contorno extra desenhado por fora do contorno normal de um elemento. é normalmente utilizado para destacar um elemento, como por exemplo indicar que este foi "selecionado" por um utilizador. Como é esperado que os <em>outlines</em> sejam temporários, estes não ocupam espaço na página — por isso, adicionar um <em>outline</em> não vai empurrar os outros elementos.</p><p><strong>Estilo </strong><code><strong><strong>box-shadow:</strong></strong></code><br>Desenha uma sombra "por baixo" do elemento (bem, na verdade a sombra é desenhada <strong>fora</strong> do elemento, que fica muito estranho no caso de o elemento não ter cor de fundo). Isto vai dar muito jeito para o <em>popup</em> do <em>drop-down</em>!</p><p><strong>Estilo </strong><code><strong><strong>z-index:</strong></strong></code><br>Este estilo altera a ordem pela qual um elemento é desenhado pelo <em>browser</em>. Um <em>z-index</em> <strong>mais alto</strong> faz com que um elemento seja desenhado <strong>mais tarde,</strong> de modo a que apareça por cima das outras coisas na página.</p><p>Vamos precisar de um <em>z-index</em> grande para o nosso <em>popup </em>do <em>drop-down</em> para que apareça por cima de tudo. O filho do <em>popup</em> receberá um novo "contexto de sobreposição", que basicamente significa que vão ser desenhados por cima do <em>popup</em>, que é uma coisa boa.</p><p><a href="https://www.smashingmagazine.com/2009/09/the-z-index-css-property-a-comprehensive-look/" rel="noopener">Atenção</a> (texto em inglês): <code>z-index</code> apenas funciona em elementos "posicionados".</p><p><strong>Estilo <strong><code>cursor:</code></strong></strong><br>Controla a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/cursor" rel="noopener">aparência</a> (texto em inglês) do ponteiro do rato.</p><p><strong>Estilo <strong><code>text-align:</code></strong></strong><br><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/text-align" rel="noopener">Justificação horizontal</a> (<code>left</code>, <code>right</code> ou <code>center</code>) – texto em inglês.</p><p><strong>Estilo </strong><code><strong><strong>pointer-events:</strong></strong></code><br>A configuração <code>none</code> deste estilo torna um elemento "invisível" a <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" rel="noopener">cliques do rato</a> (texto em inglês).</p><p><strong>Estilo <strong><code>transform:</code></strong></strong><br>Permite-te rodar, aumentar ou diminuir a escala, inclinar, ou mover um elemento de bloco (ou bloco em linha). Estas <a href="https://www.w3schools.com/cssref/css3_pr_transform.asp" rel="noopener">transformações</a> (texto em inglês) são inteligentes e também afetam o input do rato.</p><p>Por exemplo, poderias rodar o texto em 30 graus e mesmo assim selecioná-lo com o rato.</p><p><strong>Estilo <strong><code>transition:</code></strong></strong><br>Permite <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions" rel="noopener">animações</a> (texto em inglês) quando o estilo muda.</p><p><strong>Es<strong>t</strong>i<strong>l</strong>o </strong><code>opacity:</code><br>Um número que varia entre 0 e 1 e controla a visibilidade de um elemento:<br><code>1</code> é o valor normal que torna o elemento totalmente visível<br><code>0</code> torna o elemento totalmente invisível. Ao contrário de <code>visibility: hidden</code> e <code>display: none</code>, as outras formas de tornar um elemento invisível, <code>opacity: 0</code> não impede que o rato interaja com o elemento.</p><p>Neste artigo, vamos utilizar a transparência para animações — ao animar a transição entre <code>opacity: 0</code> e <code>opacity: 1</code>, podemos fazer com que o elemento apareça ou desapareça gradualmente.</p><h4 id="pseudoelemento"><strong>Pseudoelemento</strong></h4><p><strong><strong><code>::before</code></strong></strong> ou <strong><strong><code>::after</code></strong></strong>:<br>Refere-se a um elemento virtual <strong>dentro</strong> de um elemento selecionado previamente, antes ou depois do seu conteúdo normal.</p><p>Por exemplo, se escreveres <code>p::before { content: "!" }</code>, então <code>!</code> aparecerá no início de cada parágrafo.</p><p>Podemos utilizar o <code>content</code> com <code>::before</code> ou <code>::after</code> para desenhar a seta a apontar para baixo (▾).</p><h3 id="preparar-a-apar-ncia-inicial"><strong>Preparar a aparência inicial</strong></h3><p><code>.combobox</code> e <code>.dropdown</code> precisam de ter um posicionamento <code>relative</code> para que o <em>popup </em>do <em>drop-down</em> possa ser posicionado relativo a eles. O <code>display: inline-block</code> permite que a caixa de combo tenha margens, <em>padding</em> e contorno. Ao contrário de <code>display: block</code>, este permite que apareçam outras coisas na mesma linha (tais como <em>labels </em>ou outras caixas de combo.)</p><pre><code class="language-css">.combobox, .dropdown { 
  /* "relative" e "inline-block" (ou apenas "block") são necessários aqui
     para que "absolute" funcione corretamente nos descendentes */
  position: relative;
  display: inline-block;
}</code></pre><p>As caixas de combo terão um contorno embutido, mas as listas <em>drop-down</em> não:</p><pre><code class="language-css">.combobox {
  border: 1px solid #999;
  padding-right: 1.25em; /* deixa espaço para ▾ */
}</code></pre><p>A cor <code>#999</code> é ligeiramente mais escura do que o contorno do elemento <code>&lt;select&gt;</code> do Chrome e ligeiramente mais clara do que o contorno do elemento <code>&lt;select&gt;</code> do FireFox. Por isso, não fica muito diferente do que qualquer um deles.</p><h4 id="como-desenhamos-a-pequena-seta-para-baixo-"><strong>Como desenhamos a pequena seta para baixo (▾)?</strong></h4><p>Aqui, a dificuldade é controlar a altura. A caixa de combo pode ter conteúdo com uma dimensão imprevisível: letra pequena, letra grande, uma linha ou duas linhas. O "botão" de seta tem de ter a mesma altura para que funcione independentemente de onde o utilizador clica — qualquer sítio dentro do contorno deve funcionar.</p><p><strong>Então<strong>, </strong>como podemos fazer com que a seta se adapte à altura do seu irmão à esquerda<strong>?</strong></strong><br>O <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout" rel="noopener">CSS Grid</a> (texto em inglês) consegue fazer isto muito rapidamente, mas não é suportado por todos os <em>browsers</em>. O <a href="https://stackoverflow.com/questions/29503227/how-to-make-flexbox-items-the-same-size" rel="noopener">Flexbox</a> também pode conseguir fazer o trabalho, mas optei por utilizar um truque antigo para compatibilidade com <em>browsers </em>mais antigos: o posicionamento absoluto.</p><p>Com o posicionamento absoluto, posso obrigar a seta a ter a mesma altura do seu recipiente.</p><p>A desvantagem desta abordagem é que a seta existirá fora do fluxo normal do documento, então o <em>browser </em>não reservará nenhum espaço para ela. Em vez disso, vamos atribuir à caixa de combo algum <em>padding </em>do lado direito (acima de <code>1.25em</code>), e a seta existirá dentro do <em>padding</em>.</p><p>No modo de posicionamento absoluto, o <code>top</code> alinha o limite superior do elemento em relação ao limite superior do seu recipiente: <code>top: 0</code> significa que os dois limites superiores vão estar no mesmo local. De maneira semelhante, <code>left: 0</code> alinha o lado esquerdo do elemento ao lado esquerdo do recipiente e por aí a fora.</p><p>Coordenadas positivas empurram o elemento "para dentro" em relação ao recipiente. Então, <code>top: 10px</code> quer dizer "coloca o topo do elemento 10px abaixo do topo do elemento pai", enquanto que <code>bottom: 10px</code> quer dizer "coloca o fundo do elemento 10px acima do fundo do elemento pai."</p><p>Neste caso, precisamos de <code>top: 0; bottom: 0; right: 0; width: 1.25em</code> para colocar a seta do lado direito, de cima para baixo.</p><pre><code class="language-css">.combobox &gt; .downarrow, .dropdown &gt; .downarrow {
  display: block;     /* Permite margin/border/padding/size */
  position: absolute; /* Coloca fora do fluxo normal */
  top: 0;    /* Alinha o topo da downarrow com a borda superior da combobox */
  bottom: 0; /* Alinha o fundo da downarrow com o fundo da combobox */
  right: 0; /* Alinha o limite direito da downarrow com o limite direito da combobox*/
  width: 1.25em;
  
  cursor: default; /* Utiliza o ponteiro em forma de seta em vez de I-beam */
  nav-index: -1; /* Define tabindex, não-funcional na maioria dos browsers */
  border-width: 0;        /* Desativado de início */
  border-color: inherit;  /* Copia a cor da borda do elemento pai */
  border-left: inherit;   /* Copia a borda do elemento pai */
}</code></pre><p>Aqui, <code>display: block</code> e <code>display: inline-block</code> têm o mesmo efeito. Por isso, utilizei o mais curto. Também desativei o ponteiro do rato que normalmente aparece ao passar por cima de texto (visto que a seta para baixo conta como texto).</p><p>Na verdade, existe um modo de definir <code>tabindex</code> em CSS, chamado <code>nav-index</code>. Mas a maior parte dos <em>browsers </em>não a suporta. Por isso, se descobrires que a tua caixa de combo funciona apenas no Opera, já sabes a razão.</p><p>Deves, então, adicionar <code>tabindex="-1"</code> ao lado de <code>class="downarrow"</code>.</p><p>Este código desabilita os contornos, com a ressalva de que a cor/estilo do contorno deve ser herdada do elemento pai (a caixa de combo), caso outro CSS aumente <code>border-left-width</code>. Já agora, podes utilizar a opção <code>inherit</code> em qualquer atributo que não herde atributos do elemento pai desde o início.</p><p>Decidi que deve existir um contorno à esquerda no caso do <em>popup </em>não abrir quando o lado esquerdo é clicado. Desse modo, a seta para baixo parece-se com um botão, sugerindo subtilmente que pode ser clicado. Lembra-te do plano: apenas <code>dropdown</code>, e não a <code>combobox</code> por si só, abrirá quando o lado esquerdo é destacado.</p><p>Portanto, vou adicionar um contorno quando <code>combobox</code> é utilizado por si só:</p><pre><code class="language-css">.combobox:not(.dropdown) &gt; .downarrow {
  border-left-width: 1px;
}</code></pre><p>De seguida, caso o utilizador nos tenha fornecido um <code>&lt;span class="downarrow"&gt;&lt;/span&gt;</code> vazio, precisamos de adicionar magicamente o caractere de seta em falta através de <code>::before</code> (ou <code>::after</code>) e <code>content</code>:</p><pre><code class="language-css">.downarrow:empty::before {
  content: '▾';
}</code></pre><p>A seta para baixo também precisa de estar centrada no elemento <code>.downarrow</code>. <code>text-align: center</code> irá centrar o texto horizontalmente, mas centrar verticalmente é mais complicado. <code>vertical-align: middle</code> não funciona porque é desenhado para alinhar elementos <strong><strong>inline</strong></strong> com <strong>o texto à volta</strong>. O que nós queremos é alinhar o nosso pseudoelemento de seta para baixo com o recipiente <strong><strong>pa</strong>i</strong> <code>.downarrow</code>.</p><p>Aqui está um truque para isto:</p><pre><code class="language-css">.downarrow::before, .downarrow &gt; *:only-child {
  text-align: center; /* Centra horizontalmente */
  /* Truque para centralizar verticalmente */
  position: relative; /* Permite que o elemento se mova */
  top: 50%;           /* Move para baixo 50% da dimensão do recipiente */
  transform: translateY(-50%); /* Move para cima 50% do tamanho do elemento */
  display: block;     /* `transform` exige block/inline-block */
}</code></pre><p>Lembra-te que apenas adicionamos o conteúdo <code>::before</code> se <code>.downarrow</code> estiver vazio. Se o utilizador forneceu o seu próprio elemento de seta personalizado, vamos querer centrá-lo na mesma, daí o seletor <code>.downarrow &gt; *:only-child</code>.</p><p>Se a caixa de combo tiver um elemento <code>&lt;input&gt;</code>, esta não deve ter contorno:</p><pre><code class="language-css">.combobox &gt; input {
  border: 0 /* Caixa de combo já tem um contorno */
}</code></pre><p>A próxima parte é opcional, mas geralmente o primeiro descendente de uma caixa de combo deve ter 100% da largura da sua <code>.combobox</code> pai, para o caso da caixa de combo ser mais larga do que o primeiro descendente, o primeiro descendente estica para corresponder ao tamanho do elemento. Para o caso do utilizador ter construído a caixa de combo com spans em vez de divs (talvez para que possa ser colocada dentro de um <code>&lt;p&gt;</code>), pode fazer sentido definir o primeiro descendente como <code>inline-block</code> de modo a que possa ter <em>padding </em>e margens.</p><pre><code class="language-css">.combobox &gt; *:first-child {
  width: 100%;
  box-sizing: border-box; /* para que 100% inclua contorno e padding */
  display: inline-block;
}</code></pre><h3 id="preparar-a-lista-drop-down"><strong>Preparar a lista <em>drop-down</em></strong></h3><p>Inicialmente, só a queremos oculta, por isso podemos utilizar <code>display: none</code>.</p><p>Em preparação para quando estiver visível, no entanto, vamos definir mais algumas propriedades. Começa por <code>position: absolute</code>, para que fique fora do fluxo normal do documento (lembra-te de que um elemento <code>absolute</code> é posicionado relativo ao seu antecessor <code>relative</code> mais próximo, que é <code>.combobox</code> ou <code>.dropdown</code>). Quando estiver visível, é claro que deve ter um contorno e cor de fundo, além de uma sombra por baixo.</p><p>Aqui, podes ver <code>box-shadow: 1px 2px 4px 1px #4448</code>, que significa "apresenta uma sombra de 1px à direita do elemento, 2px para baixo, desfocada em 4px, e torna a sombra 1px mais larga do que o próprio elemento, com a cor #4448". Também precisamos de um grande <em>z-index</em> para que o <em>popup </em>apareça por cima de tudo:</p><pre><code class="language-css">.dropdown &gt; *:last-child,
.combobox &gt; *:last-child {
  display: none;          /* Oculto de início */
  position: absolute;     /* Fora do fluxo do documento */
  left: 0;          /* Lado esquerdo do popup = lado esquerdo do elemento pai */
  top: 100%;        /* Topo do popup = 100% abaixo do topo do elemento pai */
  border: 1px solid #999; /* Contorno cinzento */
  background-color: #fff; /* Fundo branco */
  box-shadow: 1px 2px 4px 1px #4448; /* Sombra */
  z-index: 9999;          /* Desenha por cima de tudo */
  min-width: 100%;        /* &gt;= 100% tão largo como o recipiente */
  box-sizing: border-box; /* A largura inclui contorno e padding */
}</code></pre><p>Aqui, utilizei <code>left: 0</code> e <code>top: 100%</code> para posicionar corretamente o <em>popup</em>, mas, neste caso, acontece que o posicionamento <strong>predefinido</strong> do <em>popup </em>é praticamente o mesmo. Por isso, esses estilos não são realmente necessários.</p><p>Para tornar a caixa <em>drop-down</em> visível, tudo o que precisamos é <code>display: block</code>.</p><p><strong>Que seletores vamos precisar para alcançar isto<strong>?</strong></strong></p><pre><code class="language-css">??? {
  display: block;
}</code></pre><p>O mais óbvio, o <em>drop-down</em> deve ser apresentado nos três casos abaixo:</p><ol><li>O utilizador clicou na <code>.downarrow</code></li><li>O utilizador clicou ou utilizou a tecla tab até <code>.dropdown</code></li><li>O utilizador clicou ou utilizou a tecla tab até um descendente de <code>.dropdown</code></li></ol><p>A caixa <em>drop-down</em> é o último descendente. Por isso, vamos ter de combinar o seletor <code>*:last-child</code> com o <code>:focus</code> para detetar quando uma das coisas acima for clicada ou destacada com a tecla tab:</p><pre><code class="language-css">.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus              &gt; *:last-child,
.dropdown &gt; *:focus          ~ *:last-child {
  display: block;
}</code></pre><p>Porém, ainda não terminamos. O que fazer se o utilizador clicar numa caixa de texto ou num link dentro da caixa <em>drop-down</em>? O clique vai fazer com que a <code>.downarrow</code> ou o <code>.dropdown</code> perca o destaque, o que faz com que a caixa <em>drop-down</em> desapareça instantaneamente.</p><p>No caso de um link, o <em>browser </em>destaca o link quando o botão do rato é pressionado, mas não segue o link até que o botão seja largado. Por isso, se o <em>drop-down</em> desaparecer instantaneamente, qualquer link no <em>drop-down</em> deixará de poder ser seguido!</p><p>Para corrigir isto, devemos manter a caixa aberta sempre que algo dentro do <code>:last-child</code> tenha o destaque:</p><pre><code class="language-css">.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; *:last-child:focus-within,
.dropdown &gt; *:last-child:focus-within {
  display: block;
}</code></pre><p><strong>Atenção<strong>:</strong></strong> Isto não funciona no Edge/IE (abaixo é descrita uma alternativa).</p><p>Se a seta para baixo for clicada uma segunda vez, devemos ocultar a caixa <em>drop-down</em>. Isto pode ser alcançado deste modo:</p><pre><code class="language-css">.downarrow:focus {
  pointer-events: none; /* Faz com que o segundo clique feche */
}</code></pre><p>Isto faz com que <code>.downarrow</code> seja invisível para eventos do rato quando tem destaque. Por isso, quando clicas nela, estás na realidade a clicar atrás dela (na <code>.combobox</code>). Isto faz com que perca o destaque, o que, por sua vez, faz com que a caixa <em>drop-down</em> desapareça.</p><p>Podemos fazer a mesma coisa para <code>.dropdown</code>, para que clicar novamente na área superior de um <code>.dropdown</code> faça com que desapareça:</p><pre><code class="language-css">.dropdown &gt; *:not(:last-child):focus,
.downarrow:focus,
.dropdown:focus {
  pointer-events: none; /* Faz com que o segundo clique feche */
}</code></pre><p>Isto funciona em grande parte. No entanto, caso a tua área superior contenha uma caixa de texto, existe um efeito secundário, visto que a caixa de texto não vai processar o input do rato normalmente. Descobri, contudo, que a caixa de texto ainda pode ser utilizada.</p><p>No Firefox, podes clicar e arrastar para selecionar texto se começares quando o <em>popup </em>está fechado, mas não funciona quando o <em>popup </em>está aberto. No Edge, é o oposto: podes clicar e arrastar para selecionar texto apenas quando o <em>popup</em> está aberto. De qualquer modo, é <strong><strong>basica</strong>mente</strong> utilizável, visto que é provável que o utilizador tente novamente uma vez no caso do seu input não funcionar à primeira.</p><p>O comportamento do Chrome é… inconsistente. De qualquer modo, para obter um comportamento perfeito — onde um clique fecha a caixa sem causar que a caixa de texto perca o destaque — penso que é necessário utilizar JavaScript.</p><h3 id="toques-finais"><strong>Toques finais</strong></h3><p>A caixa de combo normalmente deve ter uma margem. Isso, porém, parece ser opcional, visto que os controlos do <code>&lt;input&gt;</code> não têm uma em princípio:</p><pre><code class="language-css">.combobox {
  margin: 5px;
}</code></pre><p>Vamos tornar isso mais bonito ao abrir a caixa com uma animação.</p><p>A propriedade <code>transition</code> é o modo mais fácil de fazer animações. Na realidade, para o nosso objetivo, um simples comando como <code>transition: 0.4s;</code> habilita animações para todos os estilos suportados. No entanto, até agora, o único estilo que vamos alterar é o <code>display</code> e as alterações ao <code>display</code> não podem ser animadas.</p><p>Então, vamos tentar animar uma transição de <code>opacity: 0</code> para <code>opacity: 1</code> ao modificar os nossos estilos existentes…</p><pre><code class="language-css">.dropdown &gt; *:last-child,
.combobox &gt; *:last-child {
  display: none;
  /* 
     ... outros estilos como estavam antes ...
  */
  opacity: 0;
  transition: 0.4s;
}

.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; *:last-child:focus-within,
.dropdown &gt; *:last-child:focus-within {
  display: block;
  opacity: 1;
  transition: 0.15s;
}</code></pre><p>O tempo da transição controla quanto tempo leva a <strong><strong>ent</strong>rar</strong> no estado atual. Ou seja, este código quer dizer "demora 0.15 segundos para <strong>mostrar</strong> e 0.4 segundos para <strong>ocultar</strong>."</p><p><strong>Acontece que a animação não funciona</strong>. <a href="https://stackoverflow.com/questions/39304002/css-transition-disabled-by-displaynone" rel="noopener">O problema está no facto de que</a> <code>display: hidden</code> bloqueia animações (texto em inglês). Em vez disso, precisamos de utilizar uma das <strong><strong>o</strong>utras</strong> formas de ocultar coisas. Outra forma de ocultar coisas é o <code>visibility: hidden</code>. Infelizmente, ele também bloqueia parcialmente animações — a animação para mostrar o <em>popup </em>funciona, mas a animação para ocultar, não.</p><p>Não podemos depender de <code>opacity: 0</code> <strong>por si só</strong> para ocultar um elemento, porque o rato pode interagir na mesma com um elemento que tenha <code>opacity: 0</code>. No entanto, podemos corrigir isso com <code>pointer-events: none</code>.</p><p>Então, o <em>fade-in</em> e o <em>fade-out</em> em funcionamento têm este aspeto:</p><pre><code class="language-css">.dropdown &gt; *:last-child,
.combobox &gt; *:last-child {
  display: block;
  /* 
     ... outros estilos como estavam antes ...
  */
  transition: 0.4s;
  opacity: 0;
  pointer-events: none;
}

.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; *:last-child:focus-within,
.dropdown &gt; *:last-child:focus-within {
  display: block;
  transition: 0.15s;
  opacity: 1;
  pointer-events: auto;
}</code></pre><p>Outra forma de embelezar que podemos adicionar é mover o <em>popup </em>para a posição, tal como animar o <code>top</code>:</p><pre><code class="language-css">.dropdown &gt; *:last-child,
.combobox &gt; *:last-child {
  display: block;
  /* 
     ... outros estilos como estavam antes ...
  */
  top: 0;
  opacity: 0;
  transition: 0.4s;
  pointer-events: none;
}

.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; *:last-child:focus-within,
.dropdown &gt; *:last-child:focus-within {
  display: block;
  top: 100%;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/mf6Fg50wbA1iptPpoqMItU5cEm2Uo0LwzErg.gif" class="kg-image" alt="mf6Fg50wbA1iptPpoqMItU5cEm2Uo0LwzErg" width="206" height="189" loading="lazy"></figure><p>Decidi que isto é um pouco "excessivo" e não incluí esta parte na <a href="https://codepen.io/qwertie/pen/QBYMdZ" rel="noopener">versão final</a>.</p><p>Por fim, devemos ter um retângulo — um contorno a mostrar quando a caixa de combo está "ativa".</p><p>Primeiro, vamos adicionar o retângulo de destaque para essa seta para baixo:</p><pre><code class="language-css">.downarrow:focus {
  outline: 2px solid #48F8;
}</code></pre><p>Idealmente, teríamos um retângulo de destaque para a própria caixa de combo, como isto:</p><pre><code class="language-css">.combobox:focus-within {
  outline: 2px solid #48F;
}</code></pre><p>Isto funciona bem no Chrome. No Firefox, porém, o <code>outline</code> é expandido para além do contorno para englobar toda a caixa de <em>popup</em>, que fica com um aspeto um pouco estranho, especialmente se a caixa de <em>popup </em>não tiver a mesma largura da parte do topo. No Edge, o contorno nem sequer aparece porque o Edge não suporta <code>:focus-within</code> (ver abaixo). Então, o que podemos fazer em vez disso?</p><p>Decidi utilizar isto:</p><pre><code class="language-css">.combobox &gt; *:not(:last-child):focus {
  outline: 2px solid #48F8;
}</code></pre><p>Isso desenha um contorno à volta do elemento filho destacado em vez da própria caixa de combo. Por vezes, no entanto, também fica estranho se o filho não tiver o mesmo tamanho da caixa de combo que o engloba. Por isso, adicionei transparência (<code>#48F8</code> em vez de <code>#48F</code>) para o tornar menos visível, e consequentemente, com um aspeto menos estranho no pior dos casos.</p><h4 id="manter-aberto"><strong>Manter aberto</strong></h4><p>Os estilos que temos para já mantêm a caixa aberta apenas quando algo tem destaque. Por isso, se clicares em texto na área <em>popup</em>, o <em>popup </em>fecha. Para a última versão, expandi a lista de razões para manter o <em>popup </em>aberto para incluir um estilo <code>sticky</code>, que manterá o <em>drop-down</em> aberto ao passar o rato por cima, de modo a que, ao clicar, não feche a caixa.</p><pre><code class="language-css">.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; *:last-child:focus-within,
.dropdown &gt; *:last-child:focus-within,
.combobox &gt; .sticky:last-child:hover,
.dropdown &gt; .sticky:last-child:hover {
  display: block;
  top: 100%;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}</code></pre><p>Tal como abordei anteriormente, ocorrem erros quando a área do topo de uma caixa de combo tem uma caixa de texto. Para te permitir evitar facilmente este problema, ajustei o CSS existente para que o estilo <code>pointer-events: none</code> <strong><strong>nã</strong>o</strong> seja aplicado quando o elemento <code>.dropdown</code> também tem a classe <code>sticky</code>:</p><pre><code class="language-css">.dropdown:not(.sticky) &gt; *:not(:last-child):focus,
.downarrow:focus,
.dropdown:focus {
  pointer-events: none; /* Faz com que o segundo clique feche */
}</code></pre><p>Por fim, se uma lista <code>.dropdown</code> contém links, existe uma pequena inconveniência. Após clicar num link, a lista não fechará automaticamente porque o link tem o destaque e programamos o <em>drop-down</em> para não fechar quando um descendente tem o destaque.</p><p>Para evitar isso, adicionei suporte para uma nova classe <code>less-sticky</code>. Tal como <code>sticky</code>, <code>less-sticky</code> mantém o <em>popup</em> aberto quando o rato passa por cima. Ao contrário de <code>sticky</code>, <code>less-sticky</code> não mantém o <em>popup </em>aberto quando um descendente tem o destaque.</p><p>Então, a nossa nova lista de seletores está a ficar bastante longa:</p><pre><code class="language-css">.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; .sticky:last-child:hover,
.dropdown &gt; .sticky:last-child:hover,
.combobox &gt; .less-sticky:last-child:hover,
.dropdown &gt; .less-sticky:last-child:hover,
.combobox &gt; *:last-child:focus-within:not(.less-sticky),
.dropdown &gt; *:last-child:focus-within:not(.less-sticky) {
  display: block;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
  top: 100%;
}</code></pre><p>Ainda nem sequer terminamos, porque isto ainda não é compatível com o Edge e com o Internet Explorer.</p><h3 id="casos-do-edge"><strong>Casos do Edge</strong></h3><p>Assim que coloquei a minha caixa de combo a trabalhar perfeitamente no Firefox e no Chrome, fiquei transtornado ao ver que ficava feia e completamente inutilizável no Edge. O que correu mal?</p><p>Em primeiro lugar, os contornos desapareceram porque o Edge e o IE não suportam transparência nos contornos, como em <code>rgb(200,150,100,50)</code> ou <code>#8888</code>. Utilizei <code>#8888</code> para o contorno. Para fazer com que funcione no Edge, alterei-o para <code>#999</code>.</p><p>Outra alternativa é fornecer um contorno não opaco só para o Edge:</p><pre><code class="language-css">border: 1px solid #888;  /* Edge/IE não têm suporte para transparência do contorno */
border: 1px solid #8888; /* Restantes browsers */</code></pre><p>Em segundo lugar, não importa quantas vezes clicas — as <code>div</code> do <em>drop-down</em> simplesmente não abrem!</p><p>Ao resolver este problema, aprendi algo novo — se um <em>browser </em>não compreender um seletor utilizado numa declaração CSS, este <strong>irá ignorar todo o bloco</strong>.</p><p>Por exemplo, se escreveres <code>.x, .y, .z:unknown { margin:1em }</code>, então <code>x</code> e <code>y</code> não vão ter margens simplesmente porque o <em>browser </em>não compreende o <code>unknown</code>.</p><p>Acontece que o Edge não compreende o <code>:focus-within</code>, que é o responsável por permitir que a área do <em>drop-down</em> permaneça aberta quando um elemento <code>input</code> dentro da área <em>drop-down</em> é clicado. O problema foi ter misturado seletores suportados e não suportados.</p><p>De maneira a fazer com que funcione no Edge, precisava de repetir todo o bloco de estilos "como-abrir-a-lista-de-drop-down" separadamente para os seletores que utilizam <code>:focus-within</code>, de modo que esses seletores não impeçam que outros seletores funcionem.</p><p>Depois, como alternativa para a falta de <code>:focus-within</code>, decidi tentar <a href="https://stackoverflow.com/questions/43528940/how-to-detect-ie-and-edge-browsers-in-css" rel="noopener">detetar o Edge</a> (texto em inglês) e manter automaticamente qualquer lista <code>.dropdown</code> aberta quando o rato está a passar por cima, no estado <code>:hover</code>, neste caso. Assim, ainda é possível utilizar um elemento destacado (tal como um <code>a href</code> ou <code>input</code>) dentro da área <em>drop-down</em>, embora desapareça precocemente caso o rato saia de cima.</p><p>O código para tudo isso é o seguinte:</p><pre><code class="language-css">/* Lista de situações para as quais apresentar a lista dropdown. */
.combobox &gt; .downarrow:focus ~ *:last-child,
.dropdown:focus &gt; *:last-child,
.dropdown &gt; *:focus ~ *:last-child,
.combobox &gt; .sticky:last-child:hover,
.dropdown &gt; .sticky:last-child:hover,
.combobox &gt; .less-sticky:last-child:hover,
.dropdown &gt; .less-sticky:last-child:hover,
.combobox &gt; *:last-child:focus:not(.less-sticky),
.dropdown &gt; *:last-child:focus:not(.less-sticky) {
  display: block;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}

/* focus-within não é suportado pelo Edge/IE. Seletores não suportados fazem com que todo o bloco seja ignorado, por isso temos de repetir todos os estilos de modo separado para o focus-within. */
.combobox &gt; *:last-child:focus-within:not(.less-sticky),
.dropdown &gt; *:last-child:focus-within:not(.less-sticky) {
  display: block;
  opacity: 1;
  transition: 0.15s;
  pointer-events: auto;
}

/* Deteta o Edge/IE e comporta-se como se less-sticky estivesse ativo para todos os dropdowns (caso contrário não é possível clicar nos links) */
@supports (-ms-ime-align:auto) {
  .dropdown &gt; *:last-child:hover {
    display: block;
    opacity: 1;
    pointer-events: auto;
  }
}

/* Deteta o IE e faz a mesma coisa. */
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  .dropdown &gt; *:last-child:hover {
    display: block;
    opacity: 1;
    pointer-events: auto;
  }
}</code></pre><p>Em terceiro, o estilo <code>outline</code> não estava a funcionar no Edge. O problema era novamente que o Edge não tem suporte para contornos não opacos.</p><p>A solução é um estilo especial de transparência para o Edge:</p><pre><code class="language-css">outline: 2px solid #8AF; /* Edge/IE não consegue lidar com a transparência do contorno */  
outline: 2px solid #48F8;</code></pre><p>Em quarto, eu tinha colocado duas caixas de combo dentro de um elemento <code>&lt;label&gt;</code>. Tentar abrir a segunda abre sempre a primeira, em vez disso. Acontece que, no Edge, se estiveres a utilizar um rato, podes selecionar apenas o primeiro elemento <code>input</code> dentro de uma <code>label</code>.</p><p>Em quinto, as caixas de <em>drop-down</em> não tinham sombras. Mais uma vez, isto era por ter utilizado uma sombra não opaca. Mais uma vez, o Edge precisava do seu próprio CSS especial:</p><pre><code class="language-css">box-shadow: 1px 2px 4px 1px #666; /* O Edge não consegue lidar com a transparência da sombra */
box-shadow: 1px 2px 4px 1px #4448;</code></pre><p>O Internet Explorer 11 tem praticamente as mesmas limitações. Por isso, corrigir o Edge consertou praticamente o IE, com a exceção de que era necessária uma deteção de <em>browser </em>diferente para o IE em comparação com o Edge.</p><h3 id="sincronizar-o-popup-com-a-rea-superior"><strong>Sincronizar o <em>popup</em> com a área superior</strong></h3><p>Infelizmente, o CSS não pode fazer isso por nós. Por isso, na demonstração final, é utilizado JavaScript para atualizar a parte superior da caixa de combo quando a parte do <em>popup</em> é alterada. Por exemplo, utilizei este código com base em jQuery para atualizar a parte superior do selecionador de cor:</p><pre><code class="language-js">function parentComboBox(el) {
  for (el = el.parentNode; el &amp;&amp; 
    Array.prototype.indexOf.call(el.classList, "combobox") &lt;= -1;)
    el = el.parentNode;
  return el;
}
$(".combobox .color").mousedown(function() {
  var c = this.style.backgroundColor;
  $(parentComboBox(this)).find(".color")[0].
    style.backgroundColor = c;
});</code></pre><h3 id="vers-o-final"><strong>Versão final</strong></h3><p><a href="https://codepen.io/qwertie/pen/QBYMdZ" rel="noopener">Clica aqui</a> para veres uma demonstração com código-fonte no CodePen.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Os melhores exemplos de CSS e CSS3 ]]>
                </title>
                <description>
                    <![CDATA[ > Traduzido em português europeu O CSS fornece a estilização de um site. A propriedade background permite-te utilizar imagens e cores para criar o fundo das tuas páginas web. Exemplo de background-color A propriedade background-color permite-te escolher a cor do teu elemento. Isto pode ser o fundo de toda a ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/os-melhores-exemplos-de-css-e-css3/</link>
                <guid isPermaLink="false">63db877fb42da706e17c3a05</guid>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Afonso Branco ]]>
                </dc:creator>
                <pubDate>Thu, 06 Apr 2023 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/5f9c9f3c740569d1a4ca4181.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/css-example-css3/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Best CSS Examples and CSS3 Examples</a>
      </p><blockquote>Traduzido em português europeu</blockquote><p>O CSS fornece a estilização de um site.</p><p>A propriedade <em>background</em> permite-te utilizar imagens e cores para criar o fundo das tuas páginas web.</p><h3 id="exemplo-de-background-color"><strong><strong>Exemplo de </strong><em>b</em><strong><strong><em>ackground</em></strong></strong><em>-c</em><strong><strong><em>olor</em></strong></strong></strong></h3><p>A propriedade <em>background-color</em> permite-te escolher a cor do teu elemento. Isto pode ser o fundo de toda a página ou de uma secção da tua página.</p><ul><li>Um elemento é uma parte do HTML como um cabeçalho ou um parágrafo numa página web.</li></ul><p>Aqui está um exemplo de uma definição da cor de fundo de uma página web para verde.</p><pre><code class="language-css">  body {
    background-color: green;
  }</code></pre><p>Aqui está um exemplo da definição das cores de dois elementos. Isto definirá o fundo do cabeçalho para roxo e do resto da página para azul.</p><pre><code class="language-css">  body {
    background-color: blue;
  }
  h1 {
    background–color: purple;
  }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31036152-0607936a-a539-11e7-9e9f-a5e60ade042d.png" class="kg-image" alt="31036152-0607936a-a539-11e7-9e9f-a5e60ade042d" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/31036152-0607936a-a539-11e7-9e9f-a5e60ade042d.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31036152-0607936a-a539-11e7-9e9f-a5e60ade042d.png 695w" width="695" height="368" loading="lazy"></figure><p>Em CSS, a cor pode ser definida de três maneiras:</p><ul><li>Um nome de cor válido como <code>blue</code></li><li>Um valor HEX como <code>#FFFFF</code> (Este é o valor hexadecimal para branco.)</li><li>Um valor RGB como <code>rgb(76,175,80)</code> (Este é o valor RGB para verde claro.)</li></ul><h3 id="imagens-de-fundo"><strong><strong>Imagens de </strong>f<strong>undo</strong></strong></h3><p>Podes utilizar a propriedade <em>background-image</em> para definir uma imagem como fundo de um elemento. A imagem é repetida quando algum valor não é explicitamente definido para a propriedade <em>repeat</em>, de modo a que ocupe todo o elemento.</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31036366-eb1fc260-a539-11e7-835d-e3f935a22c86.png" class="kg-image" alt="31036366-eb1fc260-a539-11e7-835d-e3f935a22c86" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/31036366-eb1fc260-a539-11e7-835d-e3f935a22c86.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31036366-eb1fc260-a539-11e7-835d-e3f935a22c86.png 642w" width="642" height="692" loading="lazy"></figure><p>Também podes fazer a ligação com imagens ou gifs que encontres on-line, ao utilizar o seu link (por exemplo, de uma pesquisa das imagens do Google).</p><pre><code class="language-css">body {
  background-image: url("https://mdn.mozillademos.org/files/11983/starsolid.gif");
}</code></pre><h3 id="background-image-a-propriedade-repeat"><strong><strong><strong><em>Background</em></strong></strong><em>-i</em><strong><strong><em>mage</em> </strong></strong>–<strong><strong> </strong></strong>a<strong> </strong>p<strong>ropriedade<strong> </strong></strong><em>r</em><strong><strong><em>epeat</em></strong></strong></strong></h3><p>A imagem de fundo é repetida tanto na vertical (cima e baixo) como na horizontal (ao longo da página) quando a propriedade não é explicitamente definida. Podes utilizar a propriedade <em>background-repeat</em> para repetir a imagem verticalmente ou horizontalmente.</p><p>Aqui está um exemplo que repete a imagem verticalmente:</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
  background-repeat: repeat-y;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039770-8962c7a6-a54e-11e7-9d25-4fb09760d219.png" class="kg-image" alt="31039770-8962c7a6-a54e-11e7-9d25-4fb09760d219" width="398" height="695" loading="lazy"></figure><p>Podes repetir a imagem horizontalmente ao definir a propriedade <em>background-repeat</em> para "repeat-x".</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
  background-repeat: repeat-x;
}</code></pre><p>Também podes utilizar a propriedade <em>background-repeat</em> para definir uma imagem para não repetir.</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
  background-repeat: no-repeat;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039801-c8761efc-a54e-11e7-8bb9-ec5b88885a50.png" class="kg-image" alt="31039801-c8761efc-a54e-11e7-8bb9-ec5b88885a50" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/31039801-c8761efc-a54e-11e7-8bb9-ec5b88885a50.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039801-c8761efc-a54e-11e7-8bb9-ec5b88885a50.png 934w" sizes="(min-width: 720px) 720px" width="934" height="371" loading="lazy"></figure><h3 id="background-image-a-propriedade-position"><strong><strong><strong><em>Background</em></strong></strong><em>-i</em><strong><strong><em>mage</em> – </strong></strong>a propriedade<strong><strong> </strong></strong><em>p</em><strong><strong><em>osition</em></strong></strong></strong></h3><p>Podes utilizar a propriedade <em>background-position</em> para especificar onde será localizada a tua imagem numa página web.</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
  background-repeat: no-repeat;
  background-position: right top;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039828-077d1038-a54f-11e7-8aa6-092253ca92b8.png" class="kg-image" alt="31039828-077d1038-a54f-11e7-8aa6-092253ca92b8" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/31039828-077d1038-a54f-11e7-8aa6-092253ca92b8.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039828-077d1038-a54f-11e7-8aa6-092253ca92b8.png 932w" sizes="(min-width: 720px) 720px" width="932" height="370" loading="lazy"></figure><h3 id="background-image-a-posi-o-fixed"><strong><strong><strong><em>Background</em></strong></strong><em>-i</em><strong><strong><em>mage</em> – </strong></strong>a posição<strong><strong> </strong></strong><em>f</em><strong><strong><em>ixed</em></strong></strong></strong></h3><p>Podes utilizar a propriedade <em>background-attachment</em> para definir uma imagem para uma posição fixa. Uma posição fixa faz com que uma imagem não desça com o resto da página.</p><pre><code class="language-css">body {
  background-image: url("barn.jpg");
  background-repeat: no-repeat;
  background-position: right top;
  background-attachment: fixed;
}</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039859-39612c92-a54f-11e7-93ca-9d7bcb938225.png" class="kg-image" alt="31039859-39612c92-a54f-11e7-93ca-9d7bcb938225" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/04/31039859-39612c92-a54f-11e7-93ca-9d7bcb938225.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/04/31039859-39612c92-a54f-11e7-93ca-9d7bcb938225.png 941w" sizes="(min-width: 720px) 720px" width="941" height="428" loading="lazy"></figure><h3 id="gradientes-de-fundo"><strong>Gradientes de fundo</strong></h3><p>Um gradiente é uma transição entre duas ou mais cores e pode ser utilizado via CSS, de modo semelhante a uma imagem de fundo.</p><p>A sintaxe de um gradiente pode ser um pouco complexa e ainda é geralmente utilizada com prefixos de fornecedor, devido a inconsistências entre navegadores suportados.</p><p>O <a href="http://www.colorzilla.com/gradient-editor/" rel="nofollow">Colorzilla Gradient Editor</a> é uma ótima ferramenta on-line para gerar gradientes personalizados e o respetivo código CSS associado.</p><h3 id="background-a-vers-o-reduzida-da-propriedade"><strong><strong><strong><em>Background</em> – </strong></strong>a versão reduzida da propriedade</strong></h3><p>Podes escrever as propriedades do fundo numa só linha. A isto, chama-se a versão reduzida da propriedade (em inglês, <em>shorthand</em>).</p><pre><code class="language-css">body {
  background: url("barn.jpg") no-repeat right top;
}</code></pre><p>Podes omitir as propriedades que não precisas quando utilizares a versão reduzida da propriedade, mas as propriedades devem ser utilizadas numa determinada ordem. A ordem é:</p><ul><li>color</li><li>image</li><li>repeat</li><li>attachment</li><li>position</li></ul><h3 id="v-rias-imagens-de-fundo"><strong>Várias imagens de fundo</strong></h3><p>Podes especificar várias imagens de fundo numa só propriedade <em>background</em>.</p><pre><code class="language-css">body {
  background: url("barn.jpg"), url("stars.jpg"), linear-gradient(rgba(0, 0, 255, 0.5), rgba(255, 255, 0, 0.5));
}</code></pre><p>A primeira imagem (ou gradiente) especificada é a que fica mais acima, a segunda vem a seguir e assim adiante. Se um dos elementos não estiver correto por causa do seu URL ou sintaxe, toda a linha será ignorada pelo navegador.</p><h3 id="algumas-propriedades-b-sicas-de-fundo-em-css"><strong>Algumas propriedades básicas de fundo em<strong><strong> CSS</strong></strong></strong></h3><p>As propriedades de fundo do CSS são utilizadas para definir os efeitos do fundo para os elementos.</p><p>Propriedades de fundo do CSS: <em>background-color</em>, <em>background-image</em>, <em>background-repeat</em>, <em>background-attachment</em>, <em>background-position</em></p><h2 id="exemplo-de-um-breakpoint-em-css"><strong>Exemplo de um <em>breakpoint</em> em CSS</strong></h2><p>Um <em>breakpoint</em> em CSS é um ponto específico onde o aspeto do site altera, com base na ativação de uma <a href="https://www.freecodecamp.org/news/css-example-css3/#css3-media-queries-example">media query</a> (texto em inglês).</p><p>Geralmente, especificas um <em>breakpoint</em> quando queres adaptar o aspeto do teu site ao tamanho da janela do navegador; maioritariamente, à largura da janela.</p><p>Por exemplo, se o conteúdo do teu site ficar muito bem numa janela mais estreita (como num navegador de um smartphone), mas começa a ter mau aspeto em ecrãs de maior dimensão (por exemplo, talvez o tamanho de letra seja muito pequeno ou difícil de ler), então podes introduzir um novo <em>breakpoint</em> para ecrãs maiores que torna o tamanho de letra maior:</p><p>Os <em>breakpoints</em> do CSS podem ser considerados como o coração do design responsivo para a web, pois definem como se comporta ou organiza o conteúdo em diferentes larguras/escalas de dispositivos. Isto permite-te apresentar o melhor aspeto possível ao utilizador.</p><figure class="kg-card kg-image-card"><img src="https://getflywheel.com/wp-content/uploads/2018/02/css-breakpoints-layouts-01.jpg" class="kg-image" alt="Example" width="662" height="371" loading="lazy"></figure><h2 id="defini-o-de-breakpoints"><strong>Definição de<strong><strong> </strong></strong><em>b</em><strong><strong><em>reak</em></strong></strong><em>p</em><strong><strong><em>oints</em></strong></strong></strong></h2><p>Os <em>breakpoints</em> são geralmente definidos com base em qualquer um dos seguintes:</p><ul><li><em>Breakpoints</em> com base na largura do dispositivo</li><li><em>Breakpoints</em> com base no conteúdo</li></ul><h3 id="breakpoints-com-base-na-largura-do-dispositivo"><strong><strong><strong><em>Breakpoints</em> </strong></strong>com base na largura do dispositivo</strong></h3><p>É bastante evidente que os nossos dispositivos não têm todos as mesmas larguras/dimensões. É agora uma decisão de design incluir um conjunto de dispositivos em particular e programar as regras do CSS adequadamente.</p><p>Já temos dispositivos que chegue para nos causar preocupação. Quando é lançado um novo com uma largura diferente, voltar atrás para o nosso CSS e adicionar um novo <em>breakpoint</em> outra vez consome muito tempo.</p><p>Aqui está um exemplo:</p><pre><code class="language-text">/* ----------- iPhone 6, 6S, 7 and 8 ----------- */

/* Portrait */

@media only screen

and (min-device-width: 375px)

and (max-device-width: 667px)

and (-webkit-min-device-pixel-ratio: 2)

and (orientation: portrait) {

}

/* Landscape */

@media only screen

and (min-device-width: 375px)

and (max-device-width: 667px)

and (-webkit-min-device-pixel-ratio: 2)

and (orientation: landscape) {

}

/* ----------- Google Pixel ----------- */

/* Portrait */

@media screen

and (device-width: 360px)

and (device-height: 640px)

and (-webkit-device-pixel-ratio: 3)

and (orientation: portrait) {

}

/* Landscape */

@media screen

and (device-width: 360px)

and (device-height: 640px)

and (-webkit-device-pixel-ratio: 3)

and (orientation: landscape) {

}</code></pre><p>Com esta abordagem, acabarás por ter uma lista enorme de <em>media queries</em>.</p><h3 id="breakpoints-com-base-no-conte-do"><strong><strong><strong><em>Breakpoints</em> </strong></strong>com base no conteúdo</strong></h3><p>Esta é a escolha preferencial para quando são criadas ou escritas as regras do <em>breakpoint</em>. Como é mais fácil ajustar o teu conteúdo de acordo com um layout em particular apenas quando este precisa de uma alteração.</p><pre><code class="language-text">@media only screen (min-width: 768px){
...
}</code></pre><p>Este <em>breakpoint</em> faz com que o CSS seja aplicado quando a largura do dispositivo é de 768px ou acima.</p><h4 id="tamb-m-podes-definir-um-intervalo-com-os-breakpoints-para-que-o-css-seja-aplicado-apenas-dentro-desses-limites-"><strong>Também podes definir um intervalo com os<strong><strong> <em>breakpoints</em>, </strong></strong>para que o<strong><strong> CSS </strong></strong>seja aplicado apenas dentro desses limites<strong><strong>.</strong></strong></strong></h4><pre><code class="language-text">@media only screen and (min-width: 768px) and (max-width: 959px){

...

}</code></pre><p><strong><strong><strong><strong>Not</strong></strong></strong>a:</strong> tenta sempre criar <em>breakpoints</em> com base no teu próprio conteúdo, e não nos dispositivos. Divide-os em larguras lógicas em vez de uma largura aleatória e mantém o valor como um número fácil de gerir, de modo a que fazer modificações continue simples e claro.</p><p><strong>Os <strong><strong><strong><em>breakpoints</em></strong></strong></strong><em> do </em><strong><strong><strong>CSS </strong></strong></strong></strong>são úteis quando queres atualizar os estilos com base no tamanho do ecrã. Por exemplo, para um dispositivo a medir 1200px de largura ou acima, utiliza o <code>font-size: 20px;</code>. Caso contrário, utiliza o <code>font-size: 16px;</code>.</p><p>Começamos com dispositivos com dimensões maiores do que 1200px, a largura de um portátil comum. Também podes ter reparado que mencionamos 'maior do que', o que significa que, de certo modo, estamos a utilizar uma espécie de instrução '<strong><strong><strong><strong>if-then</strong></strong></strong></strong>'.</p><p>Vamos transformar isto em código CSS:</p><pre><code class="language-css">.text1 {
    font-size: 16px;
}
@media (min-width: 1200px) {
    .text1 {
        font-size: 20px;
    }
}</code></pre><p><strong>Por conveniência</strong>, escrevemos primeiro os estilos básicos para <code>.text1</code>… e depois vamos especificar as regras de <code>@media</code>.</p><p><strong>Dica</strong>: podes verificar numa <em>framework </em>de CSS comum chamada 'Bootstrap', que adotaram o <strong>'<strong><strong><strong>min-width</strong></strong></strong>'<strong><strong><strong> </strong></strong></strong>para cima<strong> </strong></strong>na sua versão Bootstrap v4.0, em comparação com a antiga versão Bootstrap v3.0, que utilizava <strong><strong><strong><strong>‘max-width’ </strong></strong></strong>para baixo</strong>. Isto é apenas uma <strong><strong><strong><strong>prefer</strong></strong></strong>ência</strong>, e não há problema nenhum em dizer '<em>deste</em> tamanho para baixo' versus '<em>deste</em> tamanho para cima'.</p><p>É completamente correto utilizar <code>@media (max-width) {}</code>. Aqui está um exemplo:</p><pre><code class="language-css">.text1 {
    font-size: 20px;
}
@media (max-width: 1199px) {
    font-size: 16px;
}</code></pre><pre><code class="language-css">// Normal, estilos básicos
// que ficam com bom aspeto em monitores mais pequenos
// mas não em monitores maiores
body {
  font-size: 16px;
}

// Define um novo breakpoint, com uma media query.
// Neste caso, para quando a largura do viewport
// tenha pelo menos 512px de largura.
@media (min-width: 512px) {
	body {
		font-size: 20px;
	}
}</code></pre><p>Os <em>breakpoints</em> que são baseados no conteúdo e não no dispositivo são menos complicados. Aqui está uma pequena amostra que é ativada quando a largura do dispositivo é superior a <code>code 700px</code>, aproximadamente o tamanho de um smartphone</p><pre><code class="language-css">@media only screen and (min-width: 700px) {
  algo {
    algo: algo;
  }
}</code></pre><p>Também é possível definires uma largura mínima e máxima, o que te permite experimentar intervalos diferentes. Este é ativado aproximadamente entre o tamanho de um smartphone e tamanhos maiores de monitores:</p><pre><code class="language-code">@media only screen and (min-width: 700px) and (max-width: 1500px) {
  algo {
    algo: algo;
  }
}</code></pre><h2 id="exemplo-de-cores-no-css"><strong>Exemplo de cores no CSS</strong></h2><h3 id="cores"><strong>Cores</strong></h3><p><em>CSS Colors </em>é um módulo do CSS que lida com cores, tipos de cores, mistura de cores e transparência. Nem todas as propriedades do CSS que recebem (a) como valor fazem parte deste módulo, mas dependem dele.</p><p>Em CSS, podes alterar a cor de praticamente todos os elementos na tua página HTML. Propriedades como <code>background-color</code>, <code>color</code> e <code>border-color</code> definem a cor desses elementos.</p><p>O CSS suporta nomes de cor, valores hexadecimais e cores RGB. Para além da introdução da declaração <code>opacity</code>, as cores em CSS3 podem agora ser especificadas através do nome da cor, ou com valores RGB, HEX, HSL, RGBA e HSLA.</p><p>O HTML suporta 140 <a href="https://www.w3schools.com/colors/colors_names.asp" rel="nofollow">nomes de cor</a> predefinidos.</p><h3 id="rgb-a-"><strong><strong><strong>RGB(A)</strong></strong></strong></h3><p>RGB significa "Red, Green, Blue" (vermelho, verde e azul, em português). Um valor RGB é uma combinação da intensidade dos valores de vermelho, verde e azul. Cada um deles está entre 0 (preto) e 255 (intensidade máxima). Os valores de cor RGBA são uma extensão dos valores de cor RGB com um canal alfa – que especifica a transparência da cor. O parâmetro alfa é um número entre 0.0 (totalmente transparente) e 1.0 (totalmente opaco).</p><p>Um valor de cor RGB é especificado com: rgb(vermelho, verde, azul). Um valor de cor RGBA é semelhante, com o valor de alfa na última posição: rgba(vermelho, verde, azul, alfa).</p><h3 id="hsl-a-"><strong><strong><strong>HSL(A)</strong></strong></strong></h3><p>HSL significa "Hue, Saturation and Lightness" (tom, saturação e brilho, em português). O tom é o grau na roda das cores (de 0 a 360): 0 (ou 360) é vermelho, 120 é verde, 240 é azul. A saturação é um valor em percentagem: 100% é a cor total. O brilho também é uma percentagem; 0% é escuro (preto) e 100% é branco.</p><p>Os valores de cor HSLA são uma extensão dos valores de cor HSL com um canal alfa – que especifica a transparência de uma cor.</p><p>Um valor de cor HSL é especificado com: hsl(tom, saturação, brilho). Um valor de cor HSLA é semelhante, com o valor de alfa na última posição: hsla(tom, saturação, brilho, alfa).</p><h3 id="cmyk"><strong><strong><strong>CMYK</strong></strong></strong></h3><p>As cores CMYK são uma combinação de CYAN, MAGENTA, YELLOW e BLACK (ciano, magenta, amarelo e preto, em português). Os monitores de computador exibem as cores utilizando valores de cor RGB. As impressoras geralmente apresentam as cores utilizando valores de cor CMYK. Os valores CMYK não são suportados em HTML, mas estão sugeridos como uma nova predefinição no CSS4.</p><p>Cores de exemplo: vermelho CMYK: cmyk(0%, 100%, 100%, 0%), verde CMYK: cmyk(100%, 0%, 100%, 0%), ou azul CMYK: cmyk(100%, 100%, 0%, 0%).</p><h3 id="hexcodes"><strong><strong><strong><em>Hexcodes</em></strong></strong></strong></h3><p><em>Hexcode</em>, abreviatura para código hexadecimal (<em>hexadecimal code</em>, em inglês), é um modo de expressar um valor de cor no teu computador. Tem este nome porque podem ser utilizados 16 símbolos únicos como valores. Neste caso, são utilizados os números de 0 a 9 e as letras de a até f.</p><p>Os códigos hexadecimais são expressados neste formato: #000000, que, neste caso, seria a cor preto. São utilizados seis caracteres em cada <em>hexcode</em>, utilizando qualquer um dos 16 caracteres mencionados anteriormente. Estes seis caracteres são divididos em três pares de dois.</p><p>Cada um destes três pares expressa um valor para a quantidade de vermelho, verde e azul numa cor em particular. Se pegarmos no <em>hexcode</em> da cor #AA11BB, AA é a quantidade de vermelho, 11 é a quantidade de verde e BB é a quantidade de azul. 0 é o valor mais baixo de uma cor, enquanto que f é o valor mais elevado.</p><p>Os códigos hexadecimais são insensíveis a maiúsculas e minúsculas, o que significa que #FFFFFF e #ffffff seriam a mesma cor: branco.</p><p>Adicionalmente, existem 16,777,216 combinações de cores possíveis através da utilização do <em>hexcode</em>.</p><h3 id="transpar-ncia"><strong>Transparência</strong></h3><p>A propriedade <em>opacity</em> do CSS3 define a transparência para todo o elemento (tanto a cor de fundo como o texto serão opacos/transparentes). Ao contrários dos valores de alfa com rgba e hsla, a transparência é herdada pelos elementos descendentes.</p><p>O valor da propriedade <em>opacity</em> deve ser um número entre 0.0 (totalmente transparente) e 1.0 (totalmente opaco).</p><h4 id="exemplos"><strong>Exemplos</strong></h4><pre><code class="language-html">&lt;html&gt;
  &lt;body&gt;
    &lt;p&gt;Hello World&lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><pre><code class="language-css">body {
  background-color: green;
  color: white;
}</code></pre><p>No exemplo acima, o <code>background-color: green</code> torna o elemento <code>&lt;body&gt;</code> verde. Isto torna toda a página web verde. Os elementos <code>&lt;p&gt;</code> também ficam todos brancos depois de <code>color: white</code>. Podes utilizar nomes de cores, como <code>green</code>, <code>blue</code>, <code>yellow</code>, <code>red</code>, <code>purple</code> e muitas outras. Para cores personalizadas, contudo, podes utilizar códigos hexadecimais (<code>#147ACC</code>), valores RGB &nbsp;(<code>rgb(20, 122, 204)</code>) e até mesmo valores HSL (<code>hsl(145, 59%, 30%)</code>).</p><pre><code class="language-css">p {
  color: rgba(244, 145, 14, 0.80); // laranja vivo
}

h2 {
 color: #FA8072; //salmão 
}</code></pre><p>Também podes adicionar um valor alfa ou transparência às cores. A transparência permite que seja sobreposto texto sobre uma imagem e que se mantenha a imagem parcialmente visível através do texto, ou pode ser utilizada para alterar a tonalidade da cor, caso não existam outros elementos à frente ou atrás do texto. Utiliza <code>rgba()</code> ou <code>hsla()</code> e preenche os teus valores de cor. O valor alfa fica em último e é uma percentagem convertida em número decimal (por exemplo, 20% é 0.2, 75% é 0.75, etc.).</p><pre><code class="language-css">body {
  background-color: hsl(184, 87%, 94%); // azul vivo
}</code></pre><p>O exemplo acima apresenta parágrafos estilizados a laranja vivo e com 20% de transparência, elementos h2 com cor-de-rosa salmão e a cor de fundo do body a azul vivo.</p><p>Para fazer com que as cores personalizadas funcionem em CSS, podes achar útil encontrar um selecionador de cores. Alguns editores de texto têm selecionadores de cor incorporados, como, por exemplo, o Visual Studio Code. Se pesquisares "color picker" no Google ou no DuckDuckGo, encontrarás um selecionador de cor que possas utilizar. O Google Chrome e o Firefox também têm add-ons de seleção de cores que podes instalar. O Adobe Color CC não só ajuda a escolher uma cor, como também ajudará a escolher um esquema de cores para a tua página!</p><p>É uma boa ideia verificares se tens contraste suficiente entre o texto e as cores de fundo ao utilizar uma ferramenta como o Verificador de Contraste de Cor do WebAIM.</p><h2 id="cores-num-exemplo-de-css"><strong>Cores num exemplo de CSS</strong></h2><p>As cores em CSS são utilizadas para dar cor aos elementos nas tuas páginas web. Existem muitas formas de atribuir cores aos elementos. Podes utilizar o nome das próprias cores, os seus valores RGB ou os valores hexadecimais. Em CSS3, o hsl (tom-saturação-brilho) foi adicionado à especificação.</p><h3 id="nomes-de-cores"><strong>Nomes de cores</strong></h3><p>Atualmente, existem 140 nomes de cor suportados em HTML, que podem ser atribuídos em regras CSS simplesmente ao escrever o nome da cor. Por exemplo:</p><h3 id="sintaxe"><strong><strong><strong>S</strong></strong>i<strong><strong>ntax</strong></strong>e</strong></h3><pre><code class="language-text">p {
  color: green;
}</code></pre><p>Esta regra altera a cor de letra de todos os elementos &lt;p&gt; para verde.<br>Podes ver a lista completa das 140 cores aqui: <a href="https://www.w3schools.com/colors/colors_names.asp">https://www.w3schools.com/colors/colors_names.asp</a></p><h3 id="valores-rgb"><strong>Valores <strong><strong>RGB</strong></strong></strong></h3><p>RGB significa “Red”, “Green” e “Blue” (vermelho, verde e azul, em Português) e também podemos atribuir cores ao escrever o seu valor RGB nas nossas regras. Um valor RGB teria este aspeto: rgb(255,0,0), onde cada número define a quantidade de cada cor que estará na mistura final.</p><p>Os valores variam entre 0 e 255. No nosso exemplo, podemos observar que apenas o primeiro valor é 255, enquanto que os outros dois estão definidos para 0. Isto quer dizer que existe apenas vermelho no nosso valor e o respetivo elemento será pintado de vermelho. Um valor RGB de (0, 0, 0) resulta em preto e um valor de (255, 255, 255) resulta em branco.</p><p>É impossível tentar memorizar todos os códigos de cor. Por essa razão, existem inúmeras ferramentas on-line para escolheres as cores que desejas para os teus projetos. Por exemplo: <a href="https://www.w3schools.com/colors/colors_picker.asp">https://www.w3schools.com/colors/colors_picker.asp</a> ou <a href="http://htmlcolorcodes.com/color-picker/">http://htmlcolorcodes.com/color-picker/</a>.</p><pre><code class="language-css">p {
  color: rgb(0, 255, 0);
}</code></pre><p>Esta regra altera a cor do texto de todos os elementos p para verde, tal como acima.</p><h3 id="valores-hexadecimais"><strong>Valores hexadecimais</strong></h3><p>Valores hexadecimais são mais uma forma de definir cores em CSS e funciona de modo bastante semelhante aos valores RGB.</p><p>Um código hexadecimal aleatório teria este aspeto: <code>#29432b</code>, onde os dois primeiros caracteres após o cardinal (<code>#</code>) correspondem à quantidade de vermelho na mistura, os segundos dois correspondem à quantidade de verde e os últimos dois correspondem à quantidade de azul.</p><p>Os valores <code>#000000</code> e <code>#ffffff</code> correspondem a preto e a branco, respetivamente.<br>Podes encontrar os códigos de cor hexadecimais específicos ao utilizar as mesmas ferramentas mencionadas para os valores RGB.</p><h3 id="sintaxe-1"><strong>Sintaxe</strong></h3><pre><code class="language-text">p {
  color: #00fe00;
}</code></pre><p>Esta regra também altera a cor do texto de todos os elementos p para verde.</p><h3 id="hsl"><strong><strong><strong>HSL</strong></strong></strong></h3><p>O HSL tem três valores. O primeiro é <strong><strong><strong><strong>Hue</strong></strong></strong> </strong>(tom)<strong><strong>,</strong></strong> que é medido em graus. Então, 0 (ou 360) representa a cor vermelho, aos 120 é verde e aos 240 é azul.</p><p>O segundo valor é <strong><strong><strong><strong>Saturation</strong></strong></strong></strong> (saturação), que tem um valor em percentagem com um intervalo de 0 a 100%.</p><p>E o terceiro valor é <strong><strong><strong><strong>Lightness</strong></strong></strong></strong> (brilho), que também tem um valor em percentagem com um intervalo de 0 a 100%. 0% é preto escuro, 50% é meio termo, 100% é branco.</p><h3 id="sintaxe-2"><strong>Sintaxe</strong></h3><pre><code class="language-text">p {
  color: hsl(0, 100%, 50%);
}</code></pre><h3 id="resultado"><strong>Resultado</strong></h3><p><a href="https://jsfiddle.net/qcw2n145/">JSfiddle</a></p><h3 id="por-que-utilizar-valores-rgb-ou-hex"><strong>Por que utilizar valores<strong><strong> RGB o</strong></strong>u<strong><strong> HEX?</strong></strong></strong></h3><p>Os nomes de cores só abrangem 140 valores, enquanto que os valores RGB e HEX têm 16,777,216 de combinações possíveis. Por isso, se quiseres que os teus projetos tenham exatamente o aspeto que imaginaste, deves utilizar estas duas opções e aproveitar os nomes de cores para simulações e testes.</p><h3 id="a-palavra-chave-currentcolor"><strong>A palavra-chave <em>currentColor</em></strong></h3><p>A palavra-chave <em>currentColor</em>, tal como o nome sugere, é um valor de cor válido em CSS. Isto representa o valor específico da propriedade <code>color</code> do elemento. Isto permite-te utilizar o valor da propriedade <code>color</code> para propriedades que não recebem este valor quando ele não é explicitamente definido.</p><p>Por exemplo, se declarares cada <code>div</code> para ter um contorno de 3px com a cor <code>currentColor</code>, significa que o contorno de cada <code>div</code> será da mesma cor que o valor da sua propriedade <code>color</code><a href="http://jsfiddle.net/tjkp0cm3/">:</a></p><pre><code class="language-css">div{
  /* A palavra-chave currentColor para o valor da cor, o que significa que o contorno terá o valor da respetiva propriedade de cor da div */
  border: 3px solid currentColor;
}

/* Esta div terá contorno verde, porque o seu valor de cor é verde. */
#div1{
  color: green;
}

/* Esta div terá contorno azul, porque o seu valor de cor é azul. */
#div2{
  color: blue;
}</code></pre><h3 id="aplica-o-pr-tica-com-um-svg"><strong>Aplicação prática com um<strong><strong> SVG</strong></strong></strong></h3><p>Aqui está um exemplo muito comum na web – um botão com um ícone SVG e texto dentro dele. A cor do contorno, texto e ícones altera ao passar o rato por cima do botão. A imagem abaixo retrata o estado inicial e o estado quando o rato está por cima do botão, por ordem.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/button_variations.png" class="kg-image" alt="button_variations" width="497" height="390" loading="lazy"></figure><p>Os ícones de fontes também podem ser utilizados para este propósito, mas existem várias vantagens em utilizar SVG em linha em vez de ícones de fontes. Isto pode fazer com que os SVGs sejam a escolha de muitos programadores. Citando o <a href="https://css-tricks.com/icon-fonts-vs-svg/">CSS-Tricks</a>,</p><blockquote>Pode ser frustrante posicionar um ícone de fonte. Os ícones são inseridos por meio de pseudoelementos, e dependem de <code>line-height</code>, <code>vertical-align</code>, <code>letter-spacing</code>, <code>word-spacing</code>, como o fonte está desenhada (tem espaço natural à sua volta? tem informação de kerning?). Então, o tipo de <code>display</code> dos pseudoelementos causa efeito se essas propriedades tiverem ou não algum efeito. Um SVG tem apenas a dimensão que tem.<br><br>Resumindo, por vezes pode ser frustrante utilizar ícones de fonte em conjunto com o texto.</blockquote><p>Poderíamos utilizar este nosso código para alcançar este comportamento desejado:</p><pre><code class="language-css">button {
  color: #016898;
}

.emailIcon {
  fill: #016898;
}

button:hover {
  color: #19B5FE;
}

button:hover .emailIcon {
  fill: #19B5FE;
}</code></pre><p>Agora, em vez de alterar explicitamente a cor de <code>fill</code> (preenchimento) do SVG ao passar o rato por cima, podemos definir o preenchimento para <code>currentColor</code>. Isto altera automaticamente a cor do SVG para o valor da propriedade <code>color</code> do botão. Agora só precisamos de alterar a propriedade <code>color</code> do botão. Isto torna o código CSS mais curto e inteligente:</p><pre><code class="language-css">.emailIcon {
  fill: currentColor;
}

button {
  color: #016898;
}

button:hover {
  color: #19B5FE;
}</code></pre><p>Dá uma vista de olhos ao exemplo em <a href="https://repl.it/NNt9/2">https://repl.it/NNt9/2</a>.</p><h2 id="exemplo-de-media-queries-em-css3"><strong>Exemplo de<strong><strong> </strong></strong>m<strong><strong>edia </strong></strong>q<strong><strong>ueries </strong></strong>em <strong><strong>CSS3</strong></strong></strong></h2><p>As <em>media queries</em> permitem-te ter estilos diferentes para tamanhos de dispositivos/ecrãs diferentes.</p><p>A melhor abordagem ao desenhar um site responsivo é pensar primeiro em dispositivos móveis; o que significa que começas a criar a tua página com o aspeto e conteúdo da versão para dispositivos móveis.</p><p>Podes pensar que com uns tamanhos escalonáveis ( %, vw ou vh ) a tua página se adapte de forma perfeita a qualquer dispositivo. Isso, porém, não vai acontecer. Talvez para um aspeto muito básico, mas garantidamente não funcionará em páginas mais comuns ou complexas!</p><p>Ao desenhares a tua página para dispositivos mais pequenos, o teu foco será no conteúdo principal. Num ecrã maior, terás de readaptar alguns tamanhos de letra, margens, paddings, entre outros, de modo a manter a tua página confortável e legível. Também vais querer/precisar adicionar mais conteúdo, as partes que não achaste fundamentais e preencher o espaço vazio criado pelo tamanho do ecrã.</p><p>O processo de pensamento deve ser:</p><ol><li>Que conteúdo apresentar?</li><li>Como organizar?</li><li>Dimensões?</li></ol><h3 id="a-sintaxe-b-sica"><strong>A sintaxe básica</strong></h3><pre><code class="language-css">    @media only screen and (min-width: 768px) {
      p {padding: 30px;}
    }</code></pre><p>A tag <code>p</code> terá um padding de 30px assim que o ecrã atingir a largura mínima de 768px.</p><h3 id="a-sintaxe-de-and"><strong>A sintaxe de<strong><strong> AND</strong></strong></strong></h3><pre><code class="language-css">  @media only screen and (min-height: 768px) and (orientation: landscape) {
    p {padding: 30px;}
  }</code></pre><p>A tag <code>p</code> terá um padding de 30px assim que o ecrã atingir a altura mínima de 768px e a orientação do ecrã esteja no modo <em>landscape</em>.</p><h3 id="a-sintaxe-de-or"><strong>A sintaxe de<strong><strong> OR</strong></strong></strong></h3><pre><code class="language-css">    @media only screen and (min-width: 768px), (min-resolution: 150dpi) {
      p {padding: 30px;}
    }</code></pre><p>A tag <code>p</code> terá um padding de 30px assim que o ecrã atingir a largura mínima de 768px ou a sua resolução atinja no mínimo 150dpi.</p><h2 id="exemplo-de-fontes-no-css"><strong>Exemplo de fontes no <strong><strong>CSS</strong></strong></strong></h2><p>As diferentes propriedades de fonte do CSS definem o tamanho, peso, estilo, altura de linha e fonte/tipo de letra do texto na página.</p><h3 id="fonte"><strong><strong><strong>Font</strong></strong>e</strong></h3><p>A fonte ou tipo de letra do texto é definida ao utilizar a propriedade <code>font-family</code>.</p><p>Esta propriedade funciona com um sistema de reserva – se o teu navegador não suportar a primeira fonte, este tentará cada uma das fontes subsequentes até encontrar uma que seja suportada. Se o nome da fonte for maior do que uma palavra, este deve estar entre aspas. Por exemplo:</p><pre><code class="language-css">p {
    font-family: "Times New Roman", Times, serif;   
}</code></pre><p>A fonte Times New Roman é constituída por três palavras e deve ser colocada entre aspas. Por outro lado, <em>serif </em>é apenas uma palavra e não precisa das aspas.</p><p>O último item na lista deve ser sempre uma fonte genérica, como <em>serif</em>, <em>sans-serif</em>, <em>monospace</em>, <em>cursive</em>, <em>fantasy</em>, <em>system-ui</em>.</p><h3 id="estilo-de-fonte"><strong>Estilo de fonte</strong></h3><p>A propriedade <code>font-style</code> pode ser utilizada para tornar o texto itálico ou oblíquo.</p><p>Existem três valores possíveis para esta propriedade:</p><ul><li>normal - O texto é apresentado no modo normal</li><li>italic - O texto é apresentado em <em><em>itá</em>lico</em></li><li>oblique - O texto é apresentado inclinado</li></ul><pre><code class="language-css">.normal {
    font-style: normal;
}

.italic {
    font-style: italic;
}

.oblique {
    font-style: oblique;
}</code></pre><h3 id="tamanho-de-letra"><strong>Tamanho de letra</strong></h3><p>Utiliza a propriedade <code>font-size</code> para ajustar o tamanho do texto. O tamanho de letra predefinido é <code>16px</code> em maior parte dos navegadores.</p><p>Aqui estão os valores de tamanho de letra mais utilizados:</p><ul><li><code>px</code> (pixeis)</li><li><code>em</code> - <code>1em</code> – o tamanho de letra do elemento pai</li><li><code>rem</code> – o tamanho de letra do elemento raíz</li><li><code>%</code> - percentagens</li></ul><pre><code class="language-css">.with-pixels {
    font-size: 14px;
}

.with-ems {
    font-size: 0.875em;
}

.with-absolute {
    font-size: large;
}

.with-percentage {
    font-size: 80%;
}</code></pre><h3 id="peso-da-fonte"><strong>Peso da fonte</strong></h3><p>A propriedade <code>font-weight</code> ajusta o peso do texto. Esta propriedade aceita valores de palavra-chave como <code>bold</code> ou <code>normal</code>, além de valores numéricos de palavra-chave, como <code>400</code> &nbsp;<code>700</code>.</p><p>Aqui estão alguns valores de palavras-chave e palavras-chave numéricas comuns:</p><!--kg-card-begin: html--><table style="box-sizing: inherit; margin: 0.5em 0px 2.5em; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Oxygen, Ubuntu, Cantarell, &quot;Open Sans&quot;, &quot;Helvetica Neue&quot;, sans-serif; font-size: 1.6rem; vertical-align: top; border-spacing: 0px; border-collapse: collapse; display: inline-block; overflow-x: auto; max-width: 100%; width: auto; white-space: nowrap; background: radial-gradient(at left center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 0px center / 10px 100% no-repeat scroll, radial-gradient(at right center, rgba(0, 0, 0, 0.2) 0px, rgba(0, 0, 0, 0) 75%) 100% center / 10px 100% scroll rgb(255, 255, 255); color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">VALORES DE PALAVRA-CHAVE</th><th style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: 700; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 1.2rem; vertical-align: baseline; color: var(--gray85); letter-spacing: 0.2px; text-align: center; text-transform: uppercase; background-color: var(--gray10);">VALORES DE PALAVRA-CHAVE NUMÉRICOS</th></tr></thead><tbody style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">100</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">thin</code></td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">300</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">light</code></td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">400</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">normal</code></td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">500</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">medium</code></td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">700</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">bold</code></td></tr><tr style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to right, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-size: 20px 100%; background-repeat: no-repeat; text-align: center;">900</td><td style="box-sizing: inherit; margin: 0px; padding: 6px 12px; border: var(--gray10) 1px solid; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; background-image: linear-gradient(to left, rgb(255, 255, 255) 50%, rgba(255, 255, 255, 0) 100%); background-position: 100% 0px; background-size: 20px 100%; background-repeat: no-repeat; text-align: center;"><code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">black</code></td></tr></tbody></table><!--kg-card-end: html--><p>O valor predefinido para o peso da fonte é <code>400</code> ou <code>normal</code>.</p><pre><code class="language-css">p {
   font-weight: bold
}</code></pre><p><strong><strong>Not</strong>a<strong>: </strong></strong>nem todas as palavras-chave ou palavras-chave numéricas estão disponíveis para todas as famílias de fonte. Por exemplo, se estiveres a carregar uma fonte do Google Fonts, precisarás de selecionar todos os pesos de fonte que desejas utilizar.</p><h2 id="exemplo-de-alinhamento-de-texto-em-css"><strong>Exemplo de alinhamento de texto em <strong><strong>CSS</strong></strong></strong></h2><p>Esta propriedade do CSS descreve o alinhamento horizontal do conteúdo em linha no seu bloco pai. <code>text-align</code> não controla o alinhamento dos elementos do bloco, este afeta apenas o seu conteúdo em linha.</p><h3 id="valores-"><strong>Valores<strong><strong>:</strong></strong></strong></h3><p>A propriedade <code>text-align</code> é especificada como uma única palavra-chave escolhida a partir da lista de valores abaixo:</p><p><code>text-align: left;</code> alinha o texto à esquerda</p><p><code>text-align: right;</code> alinha o texto à direita</p><p><code>text-align: center;</code> alinha o texto ao centro</p><p><code>text-align: justify;</code> faz com que as linhas tenham todas a mesma largura</p><p><code>text-align: justify-all;</code> faz com que as linhas tenham todas a mesma largura, incluindo a última linha</p><p><code>text-align: start;</code> alinha a última frase ao início da linha</p><p><code>text-align: end;</code> alinha a última frase ao final da linha</p><p><code>text-align: match-parent;</code> calcula o início e fim do valor na direção do elemento pai e substitui pelo valor apropriado de left ou right.</p><p><strong>Valores de alinhamento de bloco<strong><strong><strong> (</strong></strong></strong>sintaxe não predefinida<strong><strong><strong>)</strong></strong></strong></strong>:</p><p><code>text-align: -moz-center;</code></p><p><code>text-align: -webkit-center;</code></p><p><strong>Valores globais</strong>:</p><p><code>text-align: inherit;</code> herda do seu elemento pai</p><p><code>text-align: initial;</code> valor predefinido</p><p><code>text-align: unset;</code> aplica quer o valor <em>inherit</em> quer o <em>initial</em>, com base nas propriedades predefinidas do elemento</p><h2 id="exemplo-do-modelo-de-caixas-do-css"><strong>Exemplo do modelo de caixas do <strong><strong>CSS</strong></strong></strong></h2><p>Compreender o modelo de caixas do CSS é crucial para sermos capazes de organizar corretamente uma página web.</p><p>Quando um navegador renderiza (desenha) uma página web, cada elemento, por exemplo, um pedaço de texto ou uma imagem, é desenhado como uma caixa retangular seguindo as regras do modelo de caixas do CSS.</p><p>No centro da caixa está o próprio conteúdo, que ocupa uma determinada altura e largura. Esta região é conhecida como <strong>área de conteúdo</strong>. A dimensão da área de conteúdo pode ser determinada automaticamente, ou então podes definir explicitamente uma altura e largura (ver nota abaixo sobre <code>box-sizing</code>).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/content-area.jpg" class="kg-image" alt="content-area" width="343" height="216" loading="lazy"></figure><p>À volta da área de conteúdo, existe uma região conhecida como <strong>área de p<strong><strong><strong>adding</strong></strong></strong></strong>. A dimensão do <em>padding </em>pode ser a mesma a toda a volta (definido com <code>padding</code>), ou então podes definir o <em>padding </em>de maneira individual para o topo, direita, baixo e esquerda (com <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code> e <code>padding-left</code>).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/padding-area.jpg" class="kg-image" alt="padding-area" width="343" height="216" loading="lazy"></figure><p>De seguida temos a <strong><strong><strong><strong>Á</strong></strong></strong>rea de Contorno</strong>. Isto cria um contorno à volta do elemento e do seu <em>padding</em>. Podes definir a grossura (<code>border-width</code>), cor (<code>border-color</code>) e estilo (<code>border-style</code>) do contorno. As opções de estilo incluem <code>none</code> (sem contorno), <code>solid</code>, <code>dashed</code>, <code>dotted</code> e muitas mais.</p><p>Adicionalmente, podes definir o contorno nos 4 lados de maneira individual; por exemplo, o contorno do topo com <code>border-top-width</code>, <code>border-top-color</code> e <code>border-top-style</code> para a largura do contorno, cor e estilo (ver nota abaixo sobre <code>box-sizing</code>).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/border-area.jpg" class="kg-image" alt="border-area" width="399" height="261" loading="lazy"></figure><p>Por último, existe a <strong>área de margem</strong>. Isto cria espaço livre à volta do elemento, do padding e do contorno. Novamente, podes definir de modo individual as margens para o topo, direita, baixo e esquerda (com <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code> e <code>margin-left</code>). Em algumas circunstâncias, o colapso de margens ocorre e as margens de elementos adjacentes podem ser partilhadas.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/margin-area2.jpg" class="kg-image" alt="margin-area2" width="399" height="261" loading="lazy"></figure><p><strong><strong><strong><strong>Prop</strong></strong></strong>riedade <strong><strong><strong><code>box-sizing</code></strong></strong>:</strong></strong> O valor predefinido para esta propriedade é <code>content-box</code>. Se utilizares a predefinição, então o modelo da caixa permitirá que o autor especifique a dimensão da área de conteúdo. No entanto, é possível utilizar isto para especificar a dimensão da área de contorno. Isto é feito ao alterar a propriedade <code>box-sizing</code> para <code>border-box</code>. Isto pode por vezes criar layouts mais facilmente. Podes definir a propriedade <code>box-sizing</code> por elemento, da maneira que desejares.</p><h2 id="cursores-do-css"><strong>Cursores do <strong><strong>CSS</strong></strong></strong></h2><p>A propriedade <em>cursor</em> especifica o tipo de cursor a ser exibido quando se passa o rato por cima de um elemento. Tem 36 valores possíveis:</p><pre><code class="language-css">    .auto            { cursor: auto; }
    .default         { cursor: default; }
    .none            { cursor: none; }
    .context-menu    { cursor: context-menu; }
    .help            { cursor: help; }
    .pointer         { cursor: pointer; }
    .progress        { cursor: progress; }
    .wait            { cursor: wait; }
    .cell            { cursor: cell; }
    .crosshair       { cursor: crosshair; }
    .text            { cursor: text; }
    .vertical-text   { cursor: vertical-text; }
    .alias           { cursor: alias; }
    .copy            { cursor: copy; }
    .move            { cursor: move; }
    .no-drop         { cursor: no-drop; }
    .not-allowed     { cursor: not-allowed; }
    .all-scroll      { cursor: all-scroll; }
    .col-resize      { cursor: col-resize; }
    .row-resize      { cursor: row-resize; }
    .n-resize        { cursor: n-resize; }
    .e-resize        { cursor: e-resize; }
    .s-resize        { cursor: s-resize; }
    .w-resize        { cursor: w-resize; }
    .ns-resize       { cursor: ns-resize; }
    .ew-resize       { cursor: ew-resize; }
    .ne-resize       { cursor: ne-resize; }
    .nw-resize       { cursor: nw-resize; }
    .se-resize       { cursor: se-resize; }
    .sw-resize       { cursor: sw-resize; }
    .nesw-resize     { cursor: nesw-resize; }
    .nwse-resize     { cursor: nwse-resize; }</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/04/24_cursor_styles.gif" class="kg-image" alt="24_cursor_styles" width="692" height="213" loading="lazy"></figure><p>Também podes definir uma imagem como cursor.</p><pre><code class="language-text">.custom-cursor {
  cursor: url(cursor-image.png);
}</code></pre> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
