Função scale(): Aumentando e diminuindo elementos
Saiba como mudar o tamanho de um elemento de forma proporcional ou não.
A função scale() da propriedade transform é usada para mudar o tamanho de um elemento. Você pode fazer um elemento parecer maior ou menor, como se estivesse usando uma lupa ou um redutor. Isso é extremamente útil para criar efeitos de zoom, destacar elementos interativos ou simplesmente ajustar a proporção de um item visualmente.
Pense na função scale() como uma "lupa mágica" que você aplica ao seu elemento. Ela o faz parecer maior ou menor, mas o espaço que ele realmente ocupa no layout (seu tamanho original) não muda.
Como funciona scale()
A função scale() aceita um ou dois valores numéricos (fatores de escala) que representam o quanto o elemento deve ser ampliado ou reduzido ao longo dos eixos X (horizontal) e Y (vertical).
1. scale(fator) (2D)
Esta é a forma mais comum e escala o elemento proporcionalmente, aplicando o mesmo fator de escala tanto na largura quanto na altura.
fator: Um número que representa o fator de escala.1: O elemento mantém seu tamanho original.- Maior que
1: O elemento é ampliado. Ex:1.5aumenta em 50%. - Entre
0e1: O elemento é reduzido. Ex:0.5reduz pela metade. 0: O elemento se torna invisível (tamanho zero).- Valores negativos: O elemento é espelhado e escalado.
Sintaxe: transform: scale(<fator>);
Exemplos:
transform: scale(1.2);- Aumenta o elemento em 20% (1.2 vezes o tamanho original) tanto na largura quanto na altura.
transform: scale(0.7);- Reduz o elemento em 30% (0.7 vezes o tamanho original) tanto na largura quanto na altura.
2. scale(fatorX, fatorY) (2D)
Permite escalar o elemento de forma não proporcional, aplicando fatores de escala diferentes para a largura e a altura.
fatorX: Fator de escala para o eixo horizontal (largura).fatorY: Fator de escala para o eixo vertical (altura).
Sintaxe: transform: scale(<fatorX>, <fatorY>);
Exemplos:
transform: scale(2, 0.5);- Dobra a largura do elemento e reduz sua altura pela metade.
transform: scale(1, 1.5);- Mantém a largura original e aumenta a altura em 50%.
3. scaleX(fatorX) (2D)
Escala o elemento apenas ao longo do eixo horizontal (X).
Sintaxe: transform: scaleX(<fatorX>);
Exemplo:
transform: scaleX(1.8);- Aumenta a largura do elemento em 80%.
4. scaleY(fatorY) (2D)
Escala o elemento apenas ao longo do eixo vertical (Y).
Sintaxe: transform: scaleY(<fatorY>);
Exemplo:
transform: scaleY(0.6);- Reduz a altura do elemento em 40%.
5. scaleZ(fatorZ) (3D)
Escala o elemento ao longo do eixo de profundidade (Z). Para que scaleZ() tenha um efeito visível, o elemento precisa estar em um contexto 3D (com perspective no ancestral) e ter alguma profundidade para ser escalada (por exemplo, um elemento 3D ou um elemento com transform: translateZ() aplicado).
Sintaxe: transform: scaleZ(<fatorZ>);
Exemplo:
transform: scaleZ(2);- Dobra a profundidade percebida do elemento.
6. scale3d(fatorX, fatorY, fatorZ) (3D)
Esta é a forma 3D completa, permitindo escalar o elemento em todos os três eixos de uma vez.
Sintaxe: transform: scale3d(<fatorX>, <fatorY>, <fatorZ>);
Exemplo:
transform: scale3d(1.2, 1.2, 1.5);- Aumenta largura e altura em 20%, e a profundidade em 50%.
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Função scale()</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
flex-wrap: wrap;
gap: 30px;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f4f4f4;
padding: 20px;
perspective: 1000px; /* Para ver o efeito 3D */
}
.box {
width: 120px;
height: 120px;
background-color: #4CAF50;
border: 2px solid #388E3C;
display: flex;
justify-content: center;
align-items: center;
color: white;
font-weight: bold;
font-size: 1.1em;
transition: transform 0.3s ease-out; /* Transição suave */
cursor: pointer;
transform-style: preserve-3d; /* Para 3D */
}
.box:hover {
background-color: #66BB6A;
}
/* --- Exemplos de scale() --- */
.scale-proportional-box:hover {
transform: scale(1.3); /* Aumenta 30% proporcionalmente */
}
.scale-non-proportional-box:hover {
transform: scale(1.5, 0.7); /* Aumenta largura em 50%, diminui altura em 30% */
}
.scale-x-box:hover {
transform: scaleX(2); /* Dobra a largura */
}
.scale-y-box:hover {
transform: scaleY(0.5); /* Reduz a altura pela metade */
}
.scale-z-box {
/* Para ver scaleZ, o elemento precisa ter alguma 'profundidade' */
transform: rotateX(20deg) rotateY(20deg); /* Damos uma rotação inicial para que a profundidade seja visível */
}
.scale-z-box:hover {
transform: rotateX(20deg) rotateY(20deg) scaleZ(3); /* Aumenta a profundidade percebida */
}
.scale3d-box {
transform: rotateX(20deg) rotateY(20deg);
}
.scale3d-box:hover {
transform: rotateX(20deg) rotateY(20deg) scale3d(1.1, 1.1, 2); /* Escala em X, Y e Z */
}
</style>
</head>
<body>
<div class="box scale-proportional-box">scale(fator)</div>
<div class="box scale-non-proportional-box">scale(X,Y)</div>
<div class="box scale-x-box">scaleX(X)</div>
<div class="box scale-y-box">scaleY(Y)</div>
<div class="box scale-z-box">scaleZ(Z)</div>
<div class="box scale3d-box">scale3d(X,Y,Z)</div>
</body>
</html>
Resultado:
- Passe o mouse sobre cada caixa para ver o efeito de
scale()em ação. - Observe como a caixa
scale-z-boxparece "engrossar" ou "afinar" quando você passa o mouse, devido à escala na profundidade.
Pontos Chave:
- Fator de Escala:
1é o tamanho original. Valores maiores que1aumentam, valores menores que1diminuem. - Não afeta o layout: Assim como
translate()erotate(),scale()é uma transformação visual e não altera o espaço que o elemento ocupa no fluxo do documento. - Ponto de Pivô: Por padrão, a escala ocorre a partir do centro do elemento. Você pode mudar isso com a propriedade
transform-origin, que veremos em uma lição futura. - Contexto 3D: Para
scaleZ()escale3d()terem um efeito visual de profundidade, um elemento ancestral precisa ter a propriedadeperspectivedefinida, e o elemento em si precisa ter alguma "profundidade" para ser escalada (geralmente por outras transformações 3D).
A função scale() é excelente para criar efeitos de destaque, zoom em imagens, botões interativos e outras animações que envolvem a mudança de tamanho de elementos.