Introdução

Digamos que você esteja trabalhando em um projeto e precise cortar uma imagem para exibição, mas perceba que não tem acesso a seu editor de imagens favorito. Não se preocupe. O CSS oferece um conjunto de propriedades que possibilitam o corte de imagens no seu navegador.

Este artigo explica como usar essas propriedades por meio de oito exemplos diferentes. No final, uma imagem cortada é exibida em seu navegador, e você está equipado com as oito técnicas a seguir para cortar imagens com CSS.

Usando ajuste do objeto e posição do objeto Corte da proporção com calc () e padding-top Usando transformações CSS Corte circular com border-radius Usando dimensões pai e imagem com estouro e largura Movimente para cortar com margem superior e margem inferior Movimente para cortar com margem esquerda, margem direita e largura Usando o clipe-path () function

A marcação de imagem moderna

Antes de começarmos a fatiar e cortar imagens, vamos revisar a marcação HTML moderna recomendada para imagens.

Em HTML , imagens são considerados elementos substituídos definidos pela tag . Como a maioria das tags HTML, a tag aceita atributos. Esses atributos determinam como a imagem é renderizada. Dois desses atributos são largura e altura, que definem a largura e a altura da imagem.

Antes do desenvolvimento moderno da web, você não precisava especificar a largura e a altura da imagem no HTML-em vez disso, você fazia então no CSS. Com o passar do tempo, as coisas mudaram. Os navegadores evoluíram e, claro, as recomendações mudaram. Agora, essas recomendações são:

Especifique a largura e altura da imagem por meio dos atributos de largura e altura na tag HTML Carregue lentamente sua imagem por meio do atributo de carregamento com um valor de lazy

Ambas as recomendações são descritos no próximo bloco de código, seguido pela explicação de por que isso é necessário.

O texto alternativo da imagem

Quando você especifica a largura e a altura no HTML, o navegador reserva um espaço para a imagem antes de fazer o download durante a renderização da página da web.

Isso fica evidente no próximo GIF. É óbvio que a imagem ainda não foi baixada, mas o navegador já reservou seu espaço na página.

Se seus arquivos CSS contiverem código que modifica ainda mais a largura e altura da imagem, o navegador fará essas modificações sem causar uma mudança no layout da página.

Por outro lado, se você não especificar a largura e a altura no HTML, o navegador não reservará espaço para a imagem durante renderização de página da web. Portanto, quando a imagem for baixada, o navegador terá que calcular suas dimensões antes de ser exibida na posição especificada. Eventualmente, devido à sua hierarquia de documentos, isso causa uma mudança de layout e outros elementos na página se movem repentinamente.

Isso fica evidente no próximo GIF. Observe como o texto abaixo da imagem é empurrado para baixo repentinamente quando a imagem é baixada.

Isso é considerado ruim para a experiência do usuário.

Há mais uma coisa que você preciso fazer antes de começar a fatiar e cortar, ou seja: livrar-se do espaço abaixo de uma imagem.

A questão é: que espaço?

Vamos descobrir.

Removendo o espaço sob uma imagem

Em HTML, as imagens são embutidas por padrão, o que pode causar algumas peculiaridades. Ao colocar uma imagem dentro de outro contêiner, você notará um espaço abaixo da imagem.

Isso é mostrado na próxima imagem. A imagem é colocada dentro de um parágrafo, conforme destacado no navegador DevTools. A parte inferior da imagem se alinha com o texto do parágrafo, a menos que as letras tenham glifos extras, como q, y, p ou g.

Nem o preenchimento nem a margem eliminarão este espaço.

A correção é alterar o valor da propriedade de exibição da imagem para block-ou qualquer outro valor diferente de inline-e o espaço será cuidado.

img {display: block;/* Isso elimina o espaço abaixo de uma imagem */largura: 100%; altura: automático; }

Este bloco de código anterior é usado em todos os exemplos subsequentes neste artigo.

Agora, vamos começar a fatiar e cortar.

Técnicas de corte de imagem

Recortar uma imagem usando o ajuste ao objeto e a posição do objeto

Os nomes das propriedades usadas nesta técnica dizem exatamente o que farão. o ajuste de objeto permite que você ajuste um objeto, como uma imagem, dentro de um determinado contêiner. Ele aceita os seguintes valores:

contém preenchimento da capa herdar inicial nenhum reverter redução de escala não definido

Por outro lado, a posição do objeto permite que você mova este objeto dentro desse contêiner especificando sua posição ao longo da horizontal e vertical planos, ou melhor ainda, os eixos X e Y.

Isso permite que você dite a seção da imagem que é mostrada na tela, cortando efetivamente a imagem.

O código essencial que recorta a imagem é descrito no próximo bloco de código.

.cropped-image {largura: 100%; ajuste ao objeto: capa; posição do objeto: 200px 211px; }

Verifique o CodePen abaixo para o código completo.

Veja a Caneta
using-object-fit-object-fit-with-object-position
de Habdul Hazeez ( @ziizium )
em CodePen .

Vantagens

Você só precisa de duas linhas de código para cortar a imagem

Desvantagens

Dependendo dos valores pelos quais você passa pela posição do objeto, a imagem recortada pode desaparecer da vista em janelas de exibição menores. Você pode ajustar os valores da posição do objeto usando uma consulta de mídia para evitar este

corte da proporção de aspecto com calc () e padding-top

Você pode cortar uma imagem na proporção desejada, mas requer um pouco de esforço extra.

Primeiro, você precisará do que é chamado de hack quadrado perfeito. Este hack permite que você crie uma imagem quadrada colocando-a dentro de um contêiner de imagem que tenha as seguintes características:

Sua altura é definida como 0 O valor de preenchimento superior é o mesmo que a largura do contêiner O valor da propriedade position é definido como relativo

Depois, você faz o seguinte para a imagem:

Defina a largura e altura da imagem como 100% Defina o valor da propriedade da posição da imagem como absoluto com um valor superior de 0

Agora, especifique sua proporção de aspecto desejada como o valor de preenchimento superior do contêiner de imagem usando a função calc ().

.aspect-ratio-box {position: relative; largura: 100%; altura: 0; acolchoamento superior: calc (100% * (100/300)); }. Imagem cortada {posição: absoluta; topo: 0; largura: 100%; altura: 100%; ajuste ao objeto: capa; }

Você encontrará a implementação completa no CodePen no link abaixo.

Veja a Caneta
Corte de proporção com calc () e padding-top
por Habdul Hazeez ( @ziizium )
em CodePen .

Vantagens

Comparado ao ajuste ao objeto, você notará que este método cria uma imagem responsiva

Desvantagens

Mais código é necessário para conseguir isso, em comparação com o uso de ajuste de objeto

Cortar uma imagem com transformações CSS

Cortar com transformações CSS baseia-se no anterior discutiu a técnica de corte da proporção de aspecto. A principal diferença aqui é que usaremos a propriedade CSS transform para dimensionar, mover e girar a imagem.

O seguinte bloco de código é responsável por cortar a imagem.

. imagem cortada {posição: absoluta; topo: 0; largura: 100%; altura: 100%; ajuste ao objeto: capa; posição do objeto: 55%; transformar: escala (0,5) translação (0, 5%) girar (30 graus); }

Você também pode verificar o CodePen para a implementação completa.

Ver a Caneta
Cortar imagem usando CSS Transforms
de Habdul Hazeez ( @ziizium )
em CodePen .

Vantagens

Este método garante que a imagem seja responsiva

Desvantagens

Você ainda precisa usar mais código para obter esta

imagem circular com raio de borda

Quando você precisa recortar uma imagem em um círculo, esta técnica está entre suas opções, a outra sendo clip-path (), que nós’discutirei mais tarde neste artigo.

Seu ingrediente principal é a propriedade border-radius com um valor de 50%.

Antes de você se apressar e adicionar este valor border-radius ao seu-ser imagens arredondadas, observe o código no CodePen com link abaixo. Você notará que, para obter o círculo de que precisamos, temos que usar a técnica do quadrado perfeito que discutimos na seção anterior.

.cropped-image {position: absolute; altura: 100%; largura: 100%; topo: 0; raio da borda: 50%;/* Isso resulta no círculo */}

Implementação completa:

Veja a caneta
Crop-image-to-circle-with-border-radius
por Habdul Hazeez ( @ziizium )
em CodePen .

Sem esse hack, você obterá uma estrutura oval em forma de ovo, conforme mostrado na imagem abaixo.

Vantagens

Você pode obter uma imagem perfeitamente circular e responsiva

Desvantagens

Mais código é usado com este método do que quando você usa a função clip-path () com o valor circle (), que é essencialmente uma única linha de código

Usando dimensões pai e imagem com estouro e largura

Esta técnica emprega a largura, propriedades de altura e margem para cortar efetivamente a imagem.

Você especifica uma largura e d altura no contêiner da imagem, bem como na própria imagem.

Para o contêiner da imagem, os valores dessas propriedades são projetados para cortar as partes inferior e direita da imagem. Os valores de largura e altura aplicados à própria imagem são usados ​​para dimensionar a imagem. Por fim, você adiciona valores de margem, que movimentarão a imagem.

Como resultado, a imagem é cortada.

Aqui está o código responsável:

.cropped {height: 200px; }.Cropped-image {largura: 400px; altura: 300px; margem: 21px 0 0-158px; }

O CodePen contém a implementação completa.

Veja a Caneta
Recortar imagem usando-parent-image-dimension-with-overflow-and-margin
por Habdul Hazeez ( @ziizium )
em CodePen .

<✓Vantagens

Você tem muito mais flexibilidade e precisão quando se trata de cortar sua imagem

Desvantagens

Quando você especifica a largura e altura da imagem como 100%, a imagem cortada fica oculta em janelas de exibição menores

Panorâmica para cortar com margem superior e margem inferior

Esta técnica usa as margens superior e inferior e as aplica à própria imagem. Eles também podem ser usados ​​com a propriedade overflow com um valor definido como oculto no contêiner pai.

.cropped-image {largura: 100%; altura: 100%; margem: 33,12% 0;/* Este é responsável pelo recorte */}

Veja a Caneta
Pan-to-Crop-image-using-Top-Bottom-margin
por Habdul Hazeez ( @ziizium )
em CodePen .

Vantagens

Menos código é necessário

Desvantagens

Esta técnica de corte não é adequada para imagens destinadas a janelas de visualização menores Valores altos de margem negativa podem obscurecer os elementos da página da web colocados antes da imagem cortada

Movimente para cortar com margem esquerda, margem direita e largura

Isso é semelhante à técnica discutida anteriormente, mas aqui, você faz uso das margens direita e esquerda para recortar a imagem. Isso permite especificar a largura da imagem cortada.

Aqui está o código responsável:

.cropped-image {width: 100%; margem: 0 34,88%; }

O CodePen contém a implementação completa.

Veja a caneta
Pan-to-crop-with-Right-Left-margin-and-largura
de Habdul Hazeez ( @ziizium )
em CodePen .

Vantagens

A imagem cortada é responsiva

Desvantagens

Você está limitado a cortar ao longo do eixo X, ou seja, a linha horizontal

Recortar com a função clip-path ()

Salvei o classiest para o final! Com a combinação da função clip-path () e seu valor polygon (), suas habilidades de recorte são limitadas apenas por sua imaginação.

O próximo bloco de código é o código clip-path () responsável para o recorte da imagem anterior.

.cropped-image {height: 100%; trajeto do clipe: polígono (50% 0%, 0% 100%, 100% 100%); }

Se você tiver dificuldade em entender o código do caminho do clipe () acima, este artigo sobre animações CSS usando clip-path () detalha como ler, entender e plotar seu próprio código clip-path ().

O CodePen abaixo também contém a implementação completa.

Veja a Caneta
Cortar imagem com CSS-clip-path ()
por Habdul Hazeez ( @ziizium )
em CodePen .

Acessibilidade

Se uma imagem contiver informações que serão perdidas ao cortá-la, independentemente de janela de visualização do navegador, é melhor não cortar a imagem.

É recomendável verificar o suporte do navegador antes de usar algumas propriedades CSS abordadas neste artigo. A maioria das técnicas são suportadas por navegadores da web modernos, mas você deve observar que o ajuste do objeto e o caminho do clipe () não são suportados pelo Internet Explorer da Microsoft.

Se você não tiver certeza se algo é ou não compatível, você pode empregar uma ferramenta online como Posso usar para revisar o mais recente.

Desempenho

A imagem que usei nas demos do CodePen deste artigo é bem grande, 1920 x 1282 a 459 kB. Ao usar imagens em seus projetos, certifique-se de não enviar arquivos grandes para seus usuários e desperdiçar sua largura de banda.

Se estiver usando arquivos de imagem PNG, você pode usar uma ferramenta como TinyPNG para compactá-los.

Conclusão

Este artigo explica como cortar imagens com CSS usando oito exemplos diferentes e discute rapidamente as vantagens e desvantagens de cada método. A maioria desses exemplos é compatível com a maioria dos navegadores modernos, com o Internet Explorer 11 sendo uma exceção notável.