O autor do artigo, cuja tradução publicamos hoje, propõe, usando CSS puro, criar um mecanismo para alterar a cor do texto do link quando você passa o mouse sobre ele. Mas isso não deve ser uma mudança de cor comum. A nova cor deve preencher o link da esquerda para a direita, substituindo a antiga.Para fazer isso, você pode recorrer a um dos quatro métodos descritos neste material. Considere esses métodos, prestando atenção especial a várias coisas importantes, como acessibilidade ao conteúdo, desempenho da solução e suporte ao navegador.Método # 1: usando background-clip: text
No momento da redação deste artigo, a propriedade background-clip: text é experimental. Não é suportado no Internet Explorer 11. Este método envolve a criação do chamado " texto eliminado " (texto que parece cortado em uma determinada superfície e o fundo é translúcido) com um gradiente acentuado . A marcação HTML consiste em um único elemento <a>
que descreve um hiperlink.<a href="#">Link Hover</a>
Vamos começar criando estilos para o link. O uso overflow: hidden
levará ao fato de que, quando você altera a aparência do link, tudo o que está além do escopo desse elemento é cortado.a {
position: relative;
display: inline-block;
font-size: 2em;
font-weight: 800;
color: royalblue;
overflow: hidden;
}
Precisamos usar um gradiente linear nítido com um valor de 50% para as cores inicial e final do link.a {
background: linear-gradient(to right, midnightblue, midnightblue 50%, royalblue 50%);
}
Use a propriedade background-clip
para aparar o gradiente. Vamos dar um valor text
para a exibição de texto. Usaremos as propriedades de background-size
e background-position
. Isso é feito para exibir a cor inicial.a {
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-size: 200% 100%;
background-position: 100%;
}
E, finalmente, adicione uma propriedade CSS ao estilo e estilo da transition
pseudo classe de hiperlink :hover
. Para que a nova cor para preencher o link da esquerda para a direita quando você passa o mouse sobre o link, use a propriedade background-position
.a {
transition: background-position 275ms ease;
}
a:hover {
background-position: 0 100%;
}
Aqui está um exemplo no CodePen. Embora essa técnica permita alcançar o efeito desejado, o Safari e o Chrome apararam os elementos de texto e sombra. Isso significa que eles não serão mostrados. A aplicação de estilos de texto, como sublinhar o texto usando a propriedade CSS text-decoration
, não funcionará. Portanto, se você deseja que os links sejam sublinhados, considere outras maneiras de personalizar o sublinhado .Método # 2: aplicando largura / altura
Este método é baseado no uso do atributo data- * que contém o mesmo texto que a tag <a>
. Aqui você usa o gerenciamento de propriedades width
(para preencher o link com cores da esquerda para a direita ou da direita para a esquerda) ou propriedades height
(para aplicar o efeito de cima para baixo ou de baixo para cima). Por exemplo, no nosso caso, um efeito é aplicado a uma propriedade width
que, quando você passa o mouse sobre um link, muda de 0 a 100%. Aqui está a marcação:<a href="#" data-content="Link Hover">Link Hover</a>
O CSS é semelhante ao usado no exemplo anterior, exceto pelas configurações da propriedade em segundo plano. Aqui, além disso, a propriedade funcionará bem text-decoration
:a {
position: relative;
display: inline-block;
font-size: 2em;
color: royalblue;
font-weight: 800;
text-decoration: underline;
overflow: hidden;
}
Isto é onde nós precisamos usar o texto do atributo data-content
. Este texto será colocado em cima do conteúdo da tag <a>
. Podemos usar um pequeno truque interessante aqui, que consiste em copiar texto de um atributo e derivá-lo usando uma função attr()
na propriedade de um content
pseudo-elemento de um link ::before
.a::before {
position: absolute;
content: attr(data-content);
top: 0;
left: 0;
color: midnightblue;
text-decoration: underline;
overflow: hidden;
transition: width 275ms ease;
}
Para que o texto não pule para uma nova linha, um estilo será aplicado ao pseudoelemento white-space: nowrap
. Para alterar a cor do link, defina o valor da propriedade CSS do color
pseudo - elemento ::before
e faça com que, no início, o valor da propriedade seja width
0:a::before {
width: 0;
white-space: nowrap;
}
Aumente o valor do width
pseudoelemento ::before
para 100% para aplicar o efeito ao passar o mouse sobre o link do mouse:a:hover::before {
width: 100%;
}
Aqui está um exemplo da aplicação desse método: Embora, agindo nas propriedades do elemento width
e height
atingindo o que precisamos, esse método é notável por baixa produtividade . Para obter uma mudança suave de cor a 60 quadros por segundo - é melhor usar as propriedades transform
ou opacity
Usar esta propriedade text-decoration
permite usar vários estilos de ênfase de texto em links animados. Aqui está um exemplo que demonstra isso, criado usando a terceira técnica, que consideraremos agora. É baseado no uso da propriedade CSS do clip-path .Método 3: usando o caminho do clipe
Aqui vamos usar a propriedade CSS clip-path
e o polígono, neste caso, o retângulo. O retângulo tem quatro cantos, o comprimento de dois lados aumenta quando você passa o mouse sobre o link. A figura se expande, um de seus lados se move da esquerda para a direita.Ele usa a mesma marcação do exemplo anterior:<a href="#" data-content="Link Hover">Link Hover</a>
Nós, novamente, usaremos o pseudoelemento ::before
. Mas o CSS é diferente aqui:a::before {
position: absolute;
content: attr(data-content);
color: midnightblue;
text-decoration: underline;
clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
transition: clip-path 275ms ease;
}
Diferentemente do método anterior, aqui a propriedade text-decoration: underline
deve ser configurada para o pseudo-elemento ::before
. Isso é necessário para que a mudança de cor afete não apenas o texto do link, mas também a linha que sublinha o link.Vejamos agora o código CSS da propriedade clip-path
:clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
As posições dos vértices do polígono na propriedade são clip-path
definidas em porcentagem, elas determinam as coordenadas na ordem correspondente à sua colocação no polígono:0 0
= canto superior esquerdo0 0
= canto superior direito0 100%
= canto inferior direito0 100%
= canto inferior esquerdo
A direção de aplicação do efeito de preenchimento pode ser alterada modificando as coordenadas. Agora que conhecemos as coordenadas, podemos fazer a figura crescer movendo-se da esquerda para a direita quando você passa o mouse sobre o link do mouse:a:hover::before {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
}
Aqui está uma versão funcional deste exemplo: essa técnica de animação de cores de link funciona muito bem, mas antes de usá-la, considere o suporte da propriedade em clip-path
diferentes navegadores. Criar transições CSS usando clip-path
é melhor do que usar a técnica height / width. No entanto, seu uso leva ao fato de o navegador executar operações de pintura com muitos recursos (desenho).Método # 4: usando transformação
A marcação usada aqui usa a técnica de mascaramento de elementos <span>
. Como usaremos o <span>
conteúdo que duplica o conteúdo do link no elemento , usaremos o atributo para melhorar a disponibilidade do conteúdo aria-hidden="true"
. Isso ocultará a repetição de texto dos leitores de tela.Esse texto não será dublado duas vezes:<a href="#"><span data-content="Link Hover" aria-hidden="true"></span>Link Hover</a>
O CSS para o elemento <span>
contém uma descrição da transição, que começa à esquerda:span {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
transform: translateX(-100%);
transition: transform 275ms ease;
}
Agora você precisa organizar o movimento do elemento <span>
para a direita, conforme mostrado abaixo.Para fazer isso, use o ::before
elemento pseudoelemento <span>
. E, como antes, vamos recorrer ao uso do atributo data-content
. Vamos mudar a posição do elemento, aplicando uma transformação transform: translateX(100%)
, movendo-o ao longo do eixo X
.span::before {
display: inline-block;
content: attr(data-content);
color: midnightblue;
transform: translateX(100%);
transition: transform 275ms ease;
text-decoration: underline;
}
Como no elemento <span>
, a posição do pseudoelemento ::before
será definida usando a construção transform: translateX(0)
:a:hover span::before {
transform: translateX(0);
}
Aqui está um exemplo no CodePen: embora esse método tenha o melhor suporte para vários navegadores acima, ele precisa de mais HTML e CSS para implementá-lo. No entanto, o uso de propriedades CSS transform
não prejudica o desempenho , seu uso não causa redesenho de elementos e, como resultado, leva à formação de transições suaves de CSS a 60 quadros por segundo.Sumário
Acabamos de analisar quatro métodos diferentes para obter o mesmo efeito usando CSS. Embora cada um deles tenha seus prós e contras, você pode ver que não há nada impossível em organizar a animação da cor do texto dos links quando você passa o mouse sobre eles. Esse é um pequeno efeito agradável, cuja utilização leva ao fato de que os links são percebidos como mais interativos.Queridos leitores! Você anima links em seus projetos?