SW Core
SW Core / CSS / Object-fit

Object-fit CSS

A foto não cabe na caixa? Escolha se ela corta, cabe inteira ou estica — e qual pedaço fica aparecendo.

O que é

Toda hora uma foto tem um formato e a caixa do site tem outro: foto deitada num quadrado de perfil, retrato num banner largo. As classes of-* dizem como a imagem se ajeita dentro da caixa, sem ficar deformada: of-cov preenche e corta as sobras (o mais usado), of-con mostra a foto inteira e deixa sobrar espaço. As classes obp-* escolhem qual parte fica aparecendo quando corta — por exemplo, o topo, para não cortar o rosto de uma pessoa.

É só CSS, e vale para <img> e <video>. Para funcionar, a imagem precisa de uma caixa com largura e altura e ocupar essa caixa toda (w-fl h-fl). O jeito mais fácil de dar altura à caixa é uma proporção pronta: ar-sq, ar-16-9… (página Proporção).

Quando usar

  • Foto de produto, notícia ou capa numa grade de cards todos iguais: of-cov.
  • Logo de cliente ou produto recortado que não pode perder nenhum pedaço: of-con.
  • Foto de pessoa numa caixa mais larga que alta: of-cov obp-t (mantém o rosto).
  • Vídeo de fundo de uma seção, sem faixa preta: of-cov no <video>.

Comece aqui

  1. 1

    Coloque o SW Core no <head>. As classes estão no arquivo principal.

    <link rel="stylesheet" href="swcore/swcore.min.css">
  2. 2

    Uma caixa com proporção (aqui quadrada) e a foto ocupando ela toda, com o modo de encaixe. A foto é deitada; a caixa é quadrada: o of-cov corta as laterais.

    Paisagem
    <div class="ar-sq r-m ov-hi">
      <img src="/paisagem.jpg" alt="Paisagem" class="w-fl h-fl blk of-cov">
    </div>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Os 5 modos de encaixe

A mesma foto deitada (16:9) dentro de uma caixa quadrada. Muda só a classe of-* da imagem.

of-cov — preenche e corta as sobras (o mais usado) <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-cov"> </div>
of-con — aparece inteira, sobra espaço <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-con"> </div>
of-fil — estica para caber (deforma) <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-fil"> </div>
of-non — tamanho original, sem ajuste <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-non"> </div>
of-scd — como o of-con, mas nunca aumenta <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-scd"> </div>

2. Qual pedaço aparece (obp-*)

Com of-cov uma parte da foto some. O obp-* escolhe o que fica: t topo, b baixo, l esquerda, r direita, c centro. Aqui, uma foto em pé dentro de uma caixa larga.

obp-t — topo (bom para rosto) <div class="ar-16-9 w-fl r-m ov-hi"> <img src="https://picsum.photos/id/1027/600/900" alt="" class="w-fl h-fl blk of-cov obp-t"> </div>
obp-c — centro (o padrão) <div class="ar-16-9 w-fl r-m ov-hi"> <img src="https://picsum.photos/id/1027/600/900" alt="" class="w-fl h-fl blk of-cov obp-c"> </div>
obp-b — baixo <div class="ar-16-9 w-fl r-m ov-hi"> <img src="https://picsum.photos/id/1027/600/900" alt="" class="w-fl h-fl blk of-cov obp-b"> </div>
obp-l — esquerda <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-cov obp-l"> </div>
obp-r — direita <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-cov obp-r"> </div>

3. Os quatro cantos

Os cantos juntam as duas letras: tl topo-esquerda, tr topo-direita, bl baixo-esquerda, br baixo-direita. Faz diferença quando a foto sobra nos dois sentidos (ex.: com of-non).

obp-tl — canto de cima à esquerda <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-non obp-tl"> </div>
obp-tr — canto de cima à direita <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-non obp-tr"> </div>
obp-bl — canto de baixo à esquerda <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-non obp-bl"> </div>
obp-br — canto de baixo à direita <div class="ar-sq w-fl bg-sur bd r-m ov-hi"> <img src="https://picsum.photos/id/1039/800/450" alt="" class="w-fl h-fl blk of-non obp-br"> </div>

Tabela de opções

PalavraO que fazExemplo
Modo de encaixe
of-covPreenche a caixa toda e corta o que sobra. Não deforma.<img class="w-fl h-fl of-cov">
of-conA foto aparece inteira; sobra espaço vazio nas bordas. Não deforma.<img class="w-fl h-fl of-con">
of-filEstica para preencher — deforma a foto.<img class="w-fl h-fl of-fil">
of-nonFica no tamanho original, sem ajuste nenhum (corta se for maior).<img class="w-fl h-fl of-non">
of-scdIgual ao of-con, mas nunca aumenta uma foto pequena.<img class="w-fl h-fl of-scd">
Pedaço que aparece
obp-cCentro — é o padrão do navegador.class="of-cov obp-c"
obp-tTopo, no centro.class="of-cov obp-t"
obp-bBaixo, no centro.class="of-cov obp-b"
obp-lEsquerda, no meio.class="of-cov obp-l"
obp-rDireita, no meio.class="of-cov obp-r"
obp-tlCanto de cima à esquerda.class="of-cov obp-tl"
obp-trCanto de cima à direita.class="of-cov obp-tr"
obp-blCanto de baixo à esquerda.class="of-cov obp-bl"
obp-brCanto de baixo à direita.class="of-cov obp-br"
Atalho
media-fillFaz tudo de uma vez: largura e altura 100% + of-cov. (Mora na página Proporção.)<img class="media-fill">

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Equipe: fotos de pessoas em caixas iguais, sem cortar o rosto Ao vivo
Carlos, gerente
Carlos Gerente
Juliana, atendimento
Juliana Atendimento
Renata, financeiro
Renata Financeiro
<figure class="m-0">
  <div class="ar-4-3 r-m ov-hi">
    <img src="/carlos.jpg" alt="Carlos, gerente" class="w-fl h-fl blk of-cov obp-t">
  </div>
  <figcaption class="mt-2"><strong>Carlos</strong> <span class="t-mut t-p">Gerente</span></figcaption>
</figure>
Logos de clientes: todos inteiros, do mesmo tamanho Ao vivo
Cliente 1
Cliente 2
Cliente 3
Cliente 4
<div class="ar-3-2 bg-sur bd r-m p-m">
  <img src="/logo-cliente.png" alt="Nome do cliente" class="w-fl h-fl blk of-con">
</div>
Vídeo de fundo que preenche a seção sem faixa preta Referência
<section class="rel ar-21-9 ov-hi">
  <video class="abs-fill w-fl h-fl of-cov" autoplay muted loop playsinline>
    <source src="/fundo.mp4" type="video/mp4">
  </video>
  <h1 class="rel">Sua chamada aqui</h1>
</section>

Precisa de quê

  • swcore.min.css — todas as classes desta página.

Cuidados — erros comuns

  • Nada acontece? A imagem precisa ocupar a caixa toda (w-fl h-fl) e a caixa precisa ter altura (ex.: ar-sq). Só com of-cov e sem altura, a imagem continua do tamanho dela.
  • of-* e obp-* vão na imagem, não na div em volta.
  • obp-* só aparece quando sobra foto para escolher (com of-cov ou of-non). Com of-con a foto já aparece inteira.
  • Evite of-fil: ele deforma (gente fica "gorda" ou "magra"). Quase sempre o certo é of-cov.
  • Não use obp-* achando que é opacidade: opacidade é op-*; obp é a posição da foto.

O que ele não faz

  • Só existem as 9 posições prontas (cantos, lados e centro). Para um ponto exato (ex.: 30% da esquerda), não há classe.
  • Não funciona em imagem de fundo feita por CSS (background-image) — só em <img> e <video>.