¿Hay alguna forma de hacer un texto transparente recortado de un efecto de fondo como el de la siguiente imagen, con CSS?
Sería triste perder todo el precioso SEO debido a que las imágenes reemplazan al texto.
Primero pensé en las sombras pero no puedo descifrar nada ...
La imagen es el fondo del sitio, una <img>
etiqueta de posición absoluta.
css
svg
fonts
css-shapes
Love Dager
fuente
fuente
<h1><img alt="Some Text" /></h1>
sea menos amigable con el SEO que<h1>Some Text</h1>
. Tradicionalmente, el problema con las imágenes ha sido que se han descargado en la página sin un marcado de apoyo.Respuestas:
Es posible con css3 pero no es compatible con todos los navegadores
Con clip de fondo: texto; puede usar un fondo para el texto, pero tendrá que alinearlo con el fondo de la página
http://jsfiddle.net/JGPuZ/1337/
Alineación automática
Con un poco de javascript puedes alinear el fondo automáticamente:
http://jsfiddle.net/JGPuZ/1336/
fuente
background-clip:text
es una opción no estándar, solo para Webkit. CSS3 no permite eltext
valor de este atributo ( ver ).Aunque esto es posible con CSS, un mejor enfoque sería utilizar un SVG en línea con enmascaramiento SVG . Este enfoque tiene algunas ventajas sobre CSS:
Demostración de CodePen: máscara de texto SVG
Si su objetivo es hacer que el texto se pueda seleccionar y buscar, debe incluirlo fuera de la
<defs>
etiqueta. El siguiente ejemplo muestra una forma de hacerlo manteniendo el texto transparente con la<use>
etiqueta:fuente
<text>
exterior de la<defs>
pieza. (por cierto, no estoy seguro de cómo los rastreadores SE tratan el contenido SVG en defs). Aquí hay una manera de mantener lo que OP quiere, con un horrible exploit de error de FF: jsfiddle.net/tfneqxxbUna forma que funciona en la mayoría de los navegadores modernos (excepto, por ejemplo, edge), aunque solo con un fondo negro, es usar
en su elemento de texto y luego coloque el fondo que desee detrás de eso. Multiplica básicamente asigna el código de color 0-255 a 0-1 y luego multiplica eso por lo que esté detrás de él, por lo que el negro permanece en blanco y negro se multiplica por 1 y efectivamente se vuelve transparente. http://codepen.io/nic_klaassen/full/adKqWX/
fuente
color-dodge
,lighten
oscreen
enmix-blend-mode
Que es posible, pero hasta ahora sólo con navegadores basados en Webkit (Chrome, Safari, RockMelt, todo basado en el proyecto Chromium.)
El truco es tener un elemento dentro del blanco que tenga el mismo fondo que el cuerpo, luego usarlo
-webkit- background-clip: text;
en el elemento interno que básicamente significa "no extender el fondo más allá del texto" y usar texto transparente.http://jsfiddle.net/BWRsA/
fuente
Supongo que podrías lograr algo así usando
background-clip
, pero aún no lo he probado.Vea este ejemplo:
http://www.css3.info/wp-content/uploads/2008/03/webkit-backgroundcliptext_color.html
(solo Webkit, todavía no sé cómo cambiar el fondo negro por uno blanco)
fuente
Acabo de descubrir una nueva forma de hacer esto mientras jugaba, no estoy completamente seguro de cómo funciona (si alguien más quiere explicarlo, hágalo).
Parece funcionar muy bien y no requiere fondos dobles ni JavaScript.
Aquí está el código: JSFIDDLE
fuente
Puede utilizar una fuente invertida / negativa / inversa y aplicarla con el
font-face="…"
regla CSS. Puede que tenga que jugar con el espaciado entre letras para evitar pequeños espacios en blanco entre las letras.Si no necesita una fuente específica, es simple. Descarga una que te guste, por ejemplo, de esta colección de fuentes invertidas .
Si necesita una fuente específica (por ejemplo, "Open Sans"), es difícil. Tienes que convertir tu fuente existente en una versión invertida. Esto es posible manualmente con Font Creator, FontForge, etc., pero, por supuesto, queremos una solución automatizada. Todavía no pude encontrar instrucciones para eso, pero algunas sugerencias:
fuente
Puede utilizar el complemento jQuery Patternizer de myadzel para lograr este efecto en todos los navegadores. En este momento, no existe una forma de hacerlo en varios navegadores con solo CSS.
Use Patternizer agregando
class="background-clip"
elementos HTML donde desea que el texto se pinte como un patrón de imagen y especifique la imagen en undata-pattern="…"
atributo adicional . Vea la fuente de la demostración . Patternizer creará una imagen SVG con texto relleno de patrón y la superpondrá al elemento HTML renderizado de forma transparente.Si, como en la imagen de ejemplo de la pregunta, el patrón de relleno de texto debe ser parte de una imagen de fondo que se extienda más allá del elemento "modelado", veo dos opciones (sin probar, mi favorita primero):
fuente
solo pon ese CSS
fuente
Necesitaba hacer un texto que se viera exactamente como en la publicación original, pero no podía simplemente fingir alineando los fondos, porque hay algo de animación detrás del elemento. Nadie parece haber sugerido esto todavía, así que esto es lo que hice: (Traté de hacerlo lo más fácil de leer posible).
¡Solo tira eso en tu window.onload, configura el fondo del cuerpo a tu imagen y observa cómo sucede la magia!
fuente
No es posible con CSS en este momento, me temo.
Su mejor opción es simplemente usar una imagen (probablemente un PNG) y colocar un buen texto alternativo / título en ella.
Alternativamente, puede usar un SPAN o un DIV y tener la imagen como fondo con el texto que desea para fines de SEO dentro, pero con sangría de texto fuera de la pantalla.
fuente
mix-blend-mode
también es una posibilidad para ese tipo de efecto.fuente