Existe-t-il un moyen de faire un texte transparent coupé d'un effet d' arrière-plan comme celui de l'image suivante, avec CSS?
Il serait triste de perdre tout précieux SEO à cause des images remplaçant le texte.
J'ai d'abord pensé aux ombres mais je ne peux rien comprendre ...
L'image est l'arrière-plan du site, une <img>
balise positionnée en absolu
css
svg
fonts
css-shapes
Amour Dager
la source
la source
<h1><img alt="Some Text" /></h1>
référencement est moins convivial que<h1>Some Text</h1>
. Traditionnellement, le problème avec les images était qu'elles venaient d'être vidées sur la page sans balisage de prise en charge.Réponses:
C'est possible avec css3 mais ce n'est pas pris en charge dans tous les navigateurs
Avec background-clip: texte; vous pouvez utiliser un arrière-plan pour le texte, mais vous devrez l'aligner avec l'arrière-plan de la page
http://jsfiddle.net/JGPuZ/1337/
Alignement automatique
Avec un peu de javascript, vous pouvez aligner l'arrière-plan automatiquement:
http://jsfiddle.net/JGPuZ/1336/
la source
background-clip:text
c'est une option non standard uniquement Webkit. CSS3 n'autorise pas latext
valeur de cet attribut ( voir ).Bien que cela soit possible avec CSS, une meilleure approche serait d'utiliser un SVG en ligne avec un masquage SVG . Cette approche présente certains avantages par rapport au CSS:
Démo CodePen: masque de texte SVG
Si vous souhaitez rendre le texte sélectionnable et consultable, vous devez l'inclure en dehors de la
<defs>
balise. L'exemple suivant montre un moyen de le faire en conservant le texte transparent avec la<use>
balise:la source
<text>
extérieur de la<defs>
pièce. (btw je ne sais pas comment les robots SE traitent le contenu SVG dans defs). Voici un moyen de garder ce que OP veut, avec un horrible exploit de bug FF: jsfiddle.net/tfneqxxbUne façon qui fonctionne sur la plupart des navigateurs modernes (à l'exception du bord par exemple), bien qu'avec un arrière-plan noir, consiste à utiliser
dans votre élément de texte, puis mettez l'arrière-plan de votre choix. Multiplier mappe essentiellement le code de couleur 0-255 à 0-1, puis multiplie cela par tout ce qui se trouve derrière, de sorte que le noir reste noir et blanc multiplié par 1 et devient effectivement transparent. http://codepen.io/nic_klaassen/full/adKqWX/
la source
color-dodge
,lighten
ouscreen
surmix-blend-mode
Il est possible, mais jusqu'à présent uniquement avec les navigateurs basés sur Webkit (Chrome, Safari, Rockmelt, quoi que ce soit sur la base du projet Chromium.)
L'astuce est d'avoir un élément dans le blanc qui a le même arrière-plan que le corps, puis de l'utiliser
-webkit- background-clip: text;
sur l'élément intérieur qui signifie essentiellement "ne pas étendre l'arrière-plan au-delà du texte" et d'utiliser du texte transparent.http://jsfiddle.net/BWRsA/
la source
Je suppose que vous pourriez réaliser quelque chose comme ça en utilisant
background-clip
, mais je ne l'ai pas encore testé.Voir cet exemple:
http://www.css3.info/wp-content/uploads/2008/03/webkit-backgroundcliptext_color.html
(Webkit uniquement, je ne sais pas encore comment changer le fond noir en fond blanc)
la source
Je viens de découvrir une nouvelle façon de faire cela tout en déconnant, je ne suis pas tout à fait sûr de savoir comment cela fonctionne (si quelqu'un d'autre veut expliquer, faites-le).
Cela semble très bien fonctionner et ne nécessite aucun double arrière-plan ni JavaScript.
Voici le code: JSFIDDLE
la source
Vous pouvez utiliser une police inversée / négative / inversée et l'appliquer avec la
font-face="…"
règle CSS. Vous devrez peut-être jouer avec l'espacement des lettres pour éviter les petits espaces blancs entre les lettres.Si vous n'avez pas besoin d'une police spécifique, c'est simple. Téléchargez-en un sympathique, par exemple à partir de cette collection de polices inversées .
Si vous avez besoin d'une police spécifique (par exemple, "Open Sans"), c'est difficile. Vous devez convertir votre police existante en une version inversée. Ceci est possible manuellement avec Font Creator, FontForge etc., mais nous voulons bien sûr une solution automatisée. Je n'ai pas encore trouvé d'instructions pour cela, mais quelques conseils:
la source
Vous pouvez utiliser de myadzel Patternizer plugin jQuery pour obtenir cet effet à travers les navigateurs. Pour le moment, il n'y a pas de moyen multi-navigateurs de le faire avec seulement CSS.
Vous utilisez Patternizer en ajoutant
class="background-clip"
aux éléments HTML où vous souhaitez que le texte soit peint en tant que modèle d'image et en spécifiant l'image dans undata-pattern="…"
attribut supplémentaire . Voir la source de la démo . Patternizer créera une image SVG avec du texte rempli de motifs et la calera sur l'élément HTML rendu de manière transparente.Si, comme dans l'image d'exemple de la question, le motif de remplissage de texte doit faire partie d'une image d'arrière-plan s'étendant au-delà de l'élément "à motifs", je vois deux options (non testées, ma préférée en premier):
la source
il suffit de mettre ce css
la source
J'avais besoin de créer un texte qui ressemblait exactement à celui de l'article original, mais je ne pouvais pas simplement le simuler en alignant les arrière-plans, car il y a une certaine animation derrière l'élément. Personne ne semble encore avoir suggéré cela, alors voici ce que j'ai fait: (J'ai essayé de le rendre aussi facile à lire que possible.)
Jetez-le simplement dans votre window.onload, réglez l'arrière-plan du corps à votre image et regardez la magie opérer!
la source
Pas possible avec CSS pour le moment j'en ai peur.
Votre meilleur pari est simplement d'utiliser une image (probablement un PNG) et de placer un bon texte de remplacement / titre dessus.
Alternativement, vous pouvez utiliser un SPAN ou un DIV et avoir l'image comme arrière-plan avec votre texte que vous souhaitez à des fins de référencement à l'intérieur, mais le mettre en retrait hors de l'écran.
la source
mix-blend-mode
est également une possibilité pour ce genre d'effet.la source