CSS gradient linear e radial: transições de cores em elementos!

CSS gradient é um efeito degradê de variação de cores que podem ser aplicadas por meio de uma função CSS em elementos HTML. Basicamente, existem dois formatos de aplicação: a linear, que como o nome sugere, apresenta o efeito em forma horizontal, vertical ou inclinada; e o efeito radial, em que a cor é propagada a partir de um ponto central.

Existem diversas ferramentas online que criam códigos CSS, são as chamadas CSS gradient generator. Entretanto, é importante entender como esses recursos funcionam para explorar ao máximo todas as possibilidades de utilização. Para demonstrar como o gradiente trabalha, preparamos este post que contém os seguintes tópicos:

Continue com a gente e boa leitura!

O que é a propriedade CSS linear gradient?

A função linear-gradient() é utilizada em conjunto com propriedades que aceitam a aplicação de imagem, entre elas background-image, border-image, entre outras. Na prática, ela cria um efeito degradê em forma linear e é aplicada como uma imagem de fundo — CSS background gradient. Ela pode ser utilizada em qualquer elemento HTML, porém é preciso ao menos duas cores para que o efeito funcione.

Qual a sua sintaxe?

A sintaxe da função linear-gradient() CSS é:   

linear-gradient([ <angle> | to <direction> ], <start-color> [position], ..., <last-color> [position], ...)

No qual:

  • angle: não é obrigatório e representa o ângulo, ou seja, a inclinação linear do efeito. O valor padrão é 180deg, que corresponde a 180 graus e indica o efeito na posição horizontal aplicado de cima para baixo;
  • direction: representa a direção em que o efeito será aplicado. Os valores possíveis são left ou right para indicar o lado esquerdo ou direito e top ou bottom para representar o lado superior ou inferior do elemento;
  • start-color, last-color…: indicam as cores que serão utilizadas para construir o efeito;
  • position: valor opcional e representa a posição em relação ao elemento em que a cor será aplicada. É indicada em percentual e pode ser composta apenas pela posição inicial ou, também, pela posição final – o que permite a divisão das cores de forma sólida.

Definindo a direção do da transição gradiente

Como mencionamos, a função linear-gradient() deve ter duas ou mais cores para a aplicação do efeito. Existem diferentes formas de configurar como a transição de cores será feita. Confira como elas funcionam, a seguir.

De cima para baixo: default

Perceba, na sintaxe da função linear-gradient(), que os parâmetros angle ou direction e position são opcionais. Isso significa que existe um valor padrão predefinido pelos navegadores para eles. Portanto, se nada for informado, o sentido default do efeito será de cima para baixo, ou seja, a primeira cor será posicionada no topo do elemento e a segunda, na posição inferior.

Assim, se quisermos aplicar um efeito degradê de cima para baixo, não precisamos escrever a indicação “to bottom”, pois ela será aplicada automaticamente. Veja um código de exemplo em que o degradê será o mesmo nas duas alternativas:

background-image: linear-gradient(to bottom, green, black);
background-image: linear-gradient(green, black);

Também podemos inverter o sentido, ou seja, fazer com que a primeira cor fique na posição inferior em direção à parte superior do elemento. Nesse caso, precisamos indicar o valor do parâmetro tamanho como to top.

background-image: linear-gradient(to top, green, black);

Da esquerda para a direita: to right

A indicação to right significa que a primeira cor será aplicada no lado esquerdo do elemento em direção ao lado direito. Assim, o efeito será no sentido vertical. Já se quisermos que o degradê seja aplicado da direita para a esquerda, podemos utilizar o valor to left.

background-image: linear-gradient(to right, green, black);
background-image: linear-gradient(to left, green, black);

Diagonal: to bottom right

É possível combinar as direções para fazer efeitos em diagonal. Para isso, devemos indicar os cantos correspondentes. Ao utilizarmos o valor to bottom right, por exemplo, dizemos ao navegador para iniciar o efeito do lado superior esquerdo em direção ao inferior direito.

background-image: linear-gradient(to bottom right, green, black);

Também podemos combinar outros cantos do elemento para inverter a inclinação do efeito. Veja algumas possibilidades:

  • to bottom left: para iniciar no canto superior direito em direção ao inferior esquerdo;
  • to top right: para iniciar no canto inferior esquerdo em direção ao superior direito;
  • to top left: para iniciar no canto inferior direito em direção ao superior esquerdo.

Definindo o ângulo do CSS gradient: angle

Outra forma de definir a direção em que o efeito será aplicado no elemento é a indicação do ângulo. Como mencionamos, o valor padrão é 180deg, que cria o efeito iniciando da parte superior em direção à parte inferior – isso representa uma linha horizontal e equivale à indicação to bottom.

A posição inicial, ou seja, o ângulo 0º, é equivalente à indicação to top, em que a cor inicial é posicionada na parte inferior em direção ao topo do elemento. Já o ângulo de 45º, por exemplo, corresponde ao valor top right, que inicia o efeito de baixo para cima e da esquerda para a direita. Veja alguns exemplos:

background-image: linear-gradient(45deg, green, red); /* igual a top right */
background-image: linear-gradient(top right, green, red); /* igual a 45deg */
background-image: linear-gradient(90deg, green, red);
background-image: linear-gradient(225deg, green, red);

Vale ressaltar que a linguagem de estilos CSS aceita as seguintes unidades de medidas para indicar a angulação:

  • deg: que corresponde a uma volta de 360º;
  • grad: em que a volta mede 400 grados;
  • rad: a medida é feita em radianos e uma volta corresponde a 2π;
  • turn: em que a volta equivale a 1 turn.

Usando várias cores no CSS gradiente

É possível utilizar diversas cores para construir o efeito degradê. Por padrão, a aplicação da cor é proporcional à quantidade de cores. Assim, se tivermos duas cores, elas serão divididas em 50% para cada uma. Já, se adicionarmos mais uma, a divisão automática corresponderá a 33,33% respectivamente e assim por diante.

Também podemos aplicar a função linear-gradient() de modo que ela não apresente o efeito de transição suave – ou seja, serão exibidas cores sólidas. Uma forma de fazer isso é definir os pontos iniciais e finais para cada cor intermediária, conforme o exemplo abaixo:

background-image: linear-gradient(white 30% ,green 30% 50%, white 50% 70%, green 70% ); /* efeito de cores sólidas */
background-image: linear-gradient(white, green, white, green); /* efeito com transição suave */
background-image: linear-gradient(white 20%, green 30%, white 50%, green 80% ); /* efeito com transição suave */

Usando transparência no CSS gradient

Para suavizar ainda mais o efeito de transição, podemos utilizar transparências com a função linear-gradient(). Para isso, devemos definir as cores com a função rgba(), em que o último parâmetro corresponde ao índice de transparência, que pode variar de 0 a 1. Dessa forma, podemos criar efeitos com a utilização da mesma cor, alterando apenas o nível de transparência. Veja um exemplo:

background-image: linear-gradient(rgba(30, 102, 7, 1), rgba(30, 102, 7, 0.2));

Também podemos utilizar a palavra transparent para indicar o efeito. Entretanto, nesse caso a transparência é aplicada totalmente no local correspondente, ou seja, não é possível indicar a intensidade como fizemos no exemplo acima.

background-image: linear-gradient(green, transparent, green);

Definindo a repetição do gradiente linear: repeating-linear-gradient()

A função repeating-linear-gradient() funciona semelhante à linear-gradient(), entretanto, o efeito é aplicado diversas vezes no elemento até o preenchimento do espaço disponível. Veja um exemplo de código:

background-image: repeating-linear-gradient(white 20%, green 30% ,black 40%);

O que é a propriedade CSS radial gradient?

A função radial-gradient() também cria um efeito de transição entre duas ou mais cores. A principal diferença em relação ao gradiente linear é que ela é aplicada a partir do ponto central do elemento e irradia de forma circular ou elíptica.

Qual é a sintaxe da função radial-gradient()?

A sintaxe da função radial-gradient() é:

radial-gradient([<shape>] || [<size>] [at <position>], <start-color> [<size>] [at <position>], ..., <last-color> [<size>] [at <position>]);

No qual:

  • shape: correspondem ao formato do efeito, que pode ser circular (circle) ou elíptico (ellipse);
  • size: corresponde ao tamanho do gradiente;
  • position: indica a posição do efeito, o valor padrão é o centro do elemento;
  • start-color: representa a cor inicial;
  • last-color: indica a cor final.

Definindo o espaço de gradiente entre as cores

Se nada for definido, as cores são distribuídas de forma proporcional entre o espaço disponível no elemento. Para restringir esse valor, devemos indicar o percentual ou o tamanho em pixels que queremos atribuir no atributo size. Veja um exemplo:

background-image: radial-gradient(orange 20%,LightGoldenRodYellow 30%, blue);

Definindo a forma do gradiente: shape

A forma do gradiente pode ter dois valores específicos: circular (circle) ou elíptico (ellipse). Se nada for mencionado, o valor padrão é circle. Um complemento para a definição do formato é o uso do atributo size, que pode conter os seguintes valores:

  • farthest-corner;
  • closest-side;
  • closest-corner;
  • farthest-side.

Por fim, também podemos definir o formato e o tamanho do gradiente por meio da atribuição dos valores de largura e altura. Veja alguns exemplos de código:

background-image: radial-gradient(20% 40%, orange, LightGoldenRodYellow, blue); /* formato elíptico */
background-image: radial-gradient(50px 80px, orange, LightGoldenRodYellow, blue); /* formato elíptico */
background-image: radial-gradient(ellipse, orange, LightGoldenRodYellow, blue); /* formato elíptico */
background-image: radial-gradient( orange, LightGoldenRodYellow, blue); /* formato circular */
background-image: radial-gradient(40% 40%, orange, LightGoldenRodYellow, blue); /* formato circular */
background-image: radial-gradient(40px 40px, orange, LightGoldenRodYellow, blue); /* formato circular */
background-image: radial-gradient( at top left, orange, LightGoldenRodYellow, blue); /* formato circular posicionado no canto superior esquerdo do elemento */
background-image: radial-gradient( at top left, orange, LightGoldenRodYellow, blue); /* formato elíptico posicionado no canto superior esquerdo do elemento */

Repete o gradiente radial: repeating-radial-gradient()

A função repeating-radial-gradient() permite que o efeito definido para o gradiente seja aplicado várias vezes no espaço disponível. Dessa forma, é possível construir efeitos interessantes com esse recurso.

Vale ressaltar que é preciso definir os limites das cores, especialmente o da última cor para indicar como será a repetição. Caso isso não seja feito, o resultado poderá ser o mesmo que o da função radial-gradient() ou, ainda, não será o de uma repetição contínua como o esperado. Veja alguns exemplos:

background-image: radial-gradient(orange,LightGoldenRodYellow, blue); /* aplicação da função radial-gradient() */
background-image: repeating-radial-gradient(orange,LightGoldenRodYellow, blue ); /*mesmo resultado que a função radial-gradient() */
background-image: repeating-radial-gradient(orange,LightGoldenRodYellow, blue 10%); /*definição do ponto de repetição na última cor*/
background-image: repeating-radial-gradient(orange 20%,LightGoldenRodYellow 30%, blue 40%); /* modificação do efeito */

Qual é a compatibilidade com os navegadores?

O gradiente CSS pode não funcionar da maneira adequada em todos os navegadores, especialmente os mais antigos e, assim, causar alguma falha na aplicação web durante a utilização pela pessoa usuária. Para evitar esse problema, confira a partir de qual versão os principais navegadores oferecem suporte ao recurso CSS gradients:

  • Internet Explorer: 10;
  • Edge: 12;
  • Firefox: suporte parcial a partir da versão 3.6 e completo após a 36;
  • Chrome: parcial, a partir da 4 e total da versão 10 em diante;
  • Safari: suporte parcial a partir da versão 4;
  • Opera: parcial, na 11.5 e total a partir da 12.1;
  • iOS Safari: parcial, a partir da versão 3.2;
  • Android Browser: 4;
  • Opera Mobile: 12;
  • Chrome for Android: 89;
  • Firefox for Android: 86;
  • Samsung Internet: 4.

As funções para a criação de efeitos CSS gradient ajudam a criar aplicações front-end muito mais elegantes. Por isso, é importante entender a diferença entre elas e como utilizá-las em diferentes situações, como para adicionar efeitos em um botão ou para servir como imagem de fundo de um elemento HTML.

Gostou do nosso conteúdo sobre a aplicação de efeitos gradiente? Então, confira o que faz e como se tornar uma pessoa programadora!