Imagens com fundo transparente no CSS
- Sabia que é possível remover o fundo de uma imagem via código CSS?
- Basta adicionar a propriedade
“mix-blend-mode”
como“multiply”
- Veja o exemplo abaixo:
HTML
<img src="/assets/logo.png" class="logo" />
CSS
.logo {
mix-blend-mode: multiply;
}
React
- Essa solução é viável para quem precisa ter um controle da imagem tanto em temas claros, quanto em temas escuros (dark/light mode).
- Nesse exemplo abaixo a ideia era que a imagem permanecesse com suas cores originais no modo claro e que no modo escuro fosse aplicado a transparência nas partes brancas da imagem e que todo seu conteúdo fosse alterado para a cor branca.
- Veja abaixo o exemplo:
<Box
sx={
mixBlendMode: themeName === "dark" ? "plus-lighter" : "multiply",
}
>
<img
src={img}
width={props.width}
height={props.height}
style={
filter:
themeName === "dark"
? "grayscale(1) contrast(1) invert(1) brightness(130%)"
: "none",
}
/>
</Box>
Observações:
- O componente React está envolvido uma Box do MUI, mas poderia ser uma
div
comstyle
. - Quanto maior o brilho
brightness
mais a imagem fica branca; - Quanto maior o contraste
contrast
mais pixelada a imagem fica; - A chamada ao
themeName === "dark"
é um context global do React;
Conclusão
- E isso resolveu o problema! 👊
- A imagem fica com suas cores originais no modo claro, porém no modo escuro é aplicada a transparência e a cor é alterada ajustada para branco em toda foto.