Existe alguma maneira de fazer um corte de texto transparente de um efeito de fundo como o da imagem a seguir, com CSS?
Seria triste perder todo o SEO precioso por causa das imagens substituindo o texto.
Primeiro pensei em sombras, mas não consigo descobrir nada ...
A imagem é o fundo do site, uma <img>
tag posicionada de forma absoluta
css
svg
fonts
css-shapes
Love Dager
fonte
fonte
<h1><img alt="Some Text" /></h1>
ser menos amigável do que SEO<h1>Some Text</h1>
. Tradicionalmente, o problema com as imagens é que elas acabam de ser despejadas na página sem nenhuma marcação de suporte.Respostas:
É possível com css3, mas não é compatível com todos os navegadores
Com fundo-clipe: texto; você pode usar um fundo para o texto, mas você terá que alinhá-lo com o fundo da página
http://jsfiddle.net/JGPuZ/1337/
Alinhamento Automático
Com um pouco de javascript, você pode alinhar o fundo automaticamente:
http://jsfiddle.net/JGPuZ/1336/
fonte
background-clip:text
é uma opção fora do padrão apenas para Webkit. CSS3 não permite otext
valor para este atributo ( consulte ).Embora isso seja possível com CSS, uma abordagem melhor seria usar um SVG embutido com máscara SVG . Essa abordagem tem algumas vantagens sobre CSS:
CodePen Demo: máscara de texto SVG
Se você deseja tornar o texto selecionável e pesquisável, você precisa incluí-lo fora da
<defs>
tag. O exemplo a seguir mostra uma maneira de fazer isso mantendo o texto transparente com a<use>
tag:fonte
<text>
lado externo da<defs>
peça. (aliás, não tenho certeza de como os rastreadores SE lidam com o conteúdo SVG em defs). Aqui está uma maneira de manter o que o OP deseja, com um terrível exploit de bug do FF: jsfiddle.net/tfneqxxbUma maneira que funciona na maioria dos navegadores modernos (exceto isto é, borda), embora apenas com um fundo preto, é usar
em seu elemento de texto e, em seguida, coloque o plano de fundo desejado atrás dele. Multiply mapeia basicamente o código de cor 0-255 para 0-1 e então multiplica isso pelo que quer que esteja por trás dele, então o preto permanece preto e o branco multiplica por 1 e efetivamente se torna transparente. http://codepen.io/nic_klaassen/full/adKqWX/
fonte
color-dodge
, uselighten
ouscreen
onmix-blend-mode
Ele é possível, mas até agora apenas com os navegadores Webkit base (Chrome, Safari, RockMelt, qualquer coisa com base no projeto Chromium.)
O truque é ter um elemento dentro do branco que tenha o mesmo fundo que o corpo, então usar
-webkit- background-clip: text;
no elemento interno que basicamente significa "não estenda o fundo além do texto" e use texto transparente.http://jsfiddle.net/BWRsA/
fonte
Acho que você poderia conseguir algo assim usando
background-clip
, mas ainda não testei.Veja este exemplo:
http://www.css3.info/wp-content/uploads/2008/03/webkit-backgroundcliptext_color.html
(apenas Webkit, ainda não sei como mudar o fundo preto para um branco)
fonte
Acabei de descobrir uma nova maneira de fazer isso brincando, não tenho certeza de como funciona (se alguém quiser explicar, por favor, faça).
Parece funcionar muito bem e não requer fundos duplos ou JavaScript.
Aqui está o código: JSFIDDLE
fonte
Você pode usar uma fonte invertida / negativa / reversa e aplicá-la com a
font-face="…"
regra CSS. Você pode ter que brincar com o espaçamento das letras para evitar pequenos espaços brancos entre as letras.Se você não precisa de uma fonte específica, é simples. Baixe um agradável, por exemplo, desta coleção de fontes invertidas .
Se você precisar de uma fonte específica (por exemplo, "Open Sans"), é difícil. Você deve converter sua fonte existente em uma versão invertida. Isso é possível manualmente com Font Creator, FontForge etc., mas é claro que queremos uma solução automatizada. Ainda não consegui encontrar instruções para isso, mas algumas dicas:
fonte
Você pode usar o plugin jQuery Patternizer de myadzel para obter esse efeito em vários navegadores. No momento, não existe uma maneira entre navegadores de fazer isso apenas com CSS.
Você usa o Patternizer adicionando
class="background-clip"
elementos HTML onde deseja que o texto seja pintado como um padrão de imagem e especifica a imagem em umdata-pattern="…"
atributo adicional . Veja a fonte da demonstração . O Patternizer criará uma imagem SVG com texto preenchido com padrão e a subirá ao elemento HTML renderizado de forma transparente.Se, como na imagem de exemplo da pergunta, o padrão de preenchimento do texto deve ser parte de uma imagem de fundo que se estende além do elemento "padronizado", vejo duas opções (não testado, meu favorito primeiro):
fonte
basta colocar esse css
fonte
Eu precisava fazer um texto que se parecesse exatamente com o da postagem original, mas não poderia simplesmente fingir alinhando fundos, porque há alguma animação por trás do elemento. Ninguém parece ter sugerido isso ainda, então aqui está o que eu fiz: (tentei tornar a leitura o mais fácil possível).
Basta jogá-lo em sua janela.onload, definir o plano de fundo do corpo de acordo com sua imagem e assistir a mágica acontecer!
fonte
Não é possível com CSS agora, infelizmente.
Sua melhor aposta é simplesmente usar uma imagem (provavelmente um PNG) e colocar um bom texto alt / título nela.
Alternativamente, você pode usar um SPAN ou um DIV e ter a imagem como plano de fundo com o texto que deseja para fins de SEO dentro dele, mas com recuo de texto fora da tela.
fonte
mix-blend-mode
também é uma possibilidade para esse tipo de efeito.fonte