stamatios
← Voltar ao feed
Moldura de quadro transborda com bordas de foto derramando no chão, metáfora do overflow do elemento imagem em HTML
Dev & Engenharia · Produto & Design

Imagens HTML podem vazar: entenda object-fit e border-radius

resumo de ~3 min

A imagem como contêiner e conteúdo

O elemento HTML <img> não é apenas uma superfície que exibe uma imagem. Ele é um elemento substituído: funciona como um contêiner definido pelo CSS, enquanto o recurso indicado por src atua como seu conteúdo, com dimensões naturais próprias. Essa relação permite falar em transbordamento, mesmo que o elemento não contenha outros elementos HTML.

Como o conteúdo transborda

Nos navegadores, o overflow aplicado por padrão ao elemento é clip, que recorta o conteúdo excedente. Esse comportamento fica evidente com object-fit: cover. A propriedade preserva a proporção intrínseca da imagem, mas pode fazer com que o conteúdo fique maior que a área do elemento; por padrão, as partes excedentes são recortadas. Se overflow: visible for definido, esse conteúdo pode aparecer fora do contêiner.

O border-radius produz outro caso: como a imagem continua sendo retangular, seu conteúdo pode ultrapassar visualmente os cantos arredondados. Já object-position, como em object-position: 50px 0, desloca o conteúdo da imagem sem mover o elemento que o contém, criando novamente uma área de transbordamento.

O papel de object-fit

Além dos conhecidos valores cover e contain, a propriedade aceita none. Nesse caso, o conteúdo substituído não é redimensionado para caber na caixa de conteúdo do elemento. Se uma imagem com dimensão natural de 300 por 300 for colocada em um <img> dimensionado, por exemplo, com width: 80vw e height: 80vh, ela mantém seu tamanho intrínseco. Assim, poderá transbordar quando o elemento for menor que a imagem.

O valor padrão de object-fit é fill, que faz o efeito oposto: redimensiona o conteúdo para preencher a caixa de conteúdo do elemento, independentemente de suas dimensões naturais. O artigo ressalta que o elemento e o recurso têm tamanhos que podem ser controlados separadamente, embora o conteúdo de elementos substituídos esteja fora do modelo comum de formatação do CSS. Suas dimensões naturais, contudo, participam de vários cálculos de layout.

Aplicações e ressalvas

A publicação apresenta demonstrações de efeitos de foco, transições, animações tridimensionais, revelação de imagens, animações de entrada com @starting-style, um carregador de tela e uma decoração com corner-shape, indicada como disponível apenas no Chrome naquele momento. Um dos exemplos usa object-fit: none e anima object-position nos eixos horizontal e vertical; animation-composition: add permite combinar esses movimentos.

Esses efeitos também podem ser construídos com técnicas mais convencionais. A vantagem apontada é dispensar elementos ou pseudo-elementos adicionais, algo útil quando não é possível alterar a estrutura HTML. Nos comentários, um leitor observa que os exemplos podem ser recentes e que versões ESR ou estáveis baseadas em Firefox mais antigo talvez ainda recortem o conteúdo nos limites do elemento.

A conclusão é que o <img> esconde mecanismos pouco percebidos, mas aproveitáveis para criar efeitos visuais somente com CSS. O texto não recomenda necessariamente essas técnicas menos intuitivas; apresenta-as como alternativas para compreender e explorar o comportamento de imagens.