Existe-t-il des moyens en CSS pour donner des contours à du texte de différentes couleurs? Je veux mettre en évidence certaines parties de mon texte pour le rendre plus intuitif - comme les noms, les liens, etc. Le changement des couleurs des liens, etc. est courant de nos jours, donc je veux quelque chose de nouveau.
329
Réponses:
Il existe une propriété expérimentale de webkit appelée
text-stroke
dans CSS3, j'essaie de faire fonctionner cela depuis un certain temps, mais je n'ai pas réussi jusqu'à présent.Ce que j'ai fait à la place, c'est la
text-shadow
propriété déjà prise en charge (prise en charge dans Chrome, Firefox, Opera et IE 9 je crois).Utilisez quatre ombres pour simuler un texte tracé:
J'ai fait une démo pour toi ici
Et un exemple survolé est disponible ici
Comme Jason C l'a mentionné dans les commentaires, la
text-shadow
propriété CSS est désormais prise en charge par tous les principaux navigateurs, à l'exception d'Opera Mini. Où cette solution fonctionnera pour la compatibilité descendante (pas vraiment un problème concernant les navigateurs qui se mettent à jour automatiquement), je pense que letext-stroke
CSS devrait être utilisé.la source
text-shadow
jusqu'à IE10. Curieusement, IE9 prend en chargebox-shadow
mais pastext-shadow
.text-shadow
du navigateur pour . Il semble qu'actuellement (3 ans après la publication de cette réponse), il est pris en charge par tous les principaux navigateurs, à l'exception d'Opera Mini, qui affiche un "support partiel" (il ignoreblur-radius
).text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
text-shadow
soutien, nontext-stroke
. Ce qui n'est pris en charge que par webkit pour le moment.Edit:
text-stroke
est maintenant assez mature et implémenté dans la plupart des navigateurs . C'est plus facile, plus net et plus précis. Si le public de votre navigateur peut le prendre en charge, vous devez maintenant utiliser d'text-stroke
abord, au lieu detext-shadow
.Vous pouvez et devez le faire avec juste l'
text-shadow
effet sans aucun décalage:Pourquoi? Lorsque vous décalez plusieurs effets d'ombre, vous commencerez à remarquer des coins irréguliers et irréguliers:
avoir des effets d'ombre de texte dans une seule position élimine les décalages, ce qui signifie que si vous sentez que c'est trop mince et préférez un contour plus sombre à la place, pas de problème - vous peut répéter le même effet (en gardant la même position et le même flou), plusieurs fois. Ainsi:
Voici un échantillon d'un seul effet (en haut), et le même effet répété 14 fois (en bas):
Notez également: les lignes devenant si fines, c'est une très bonne idée de désactiver le rendu sous-pixel à l'aide de
-webkit-font-smoothing: antialiased
.la source
font-smoothing
option, cela a grandement amélioré la sortie en chrome!text-stroke
n'est pas le même que contour viatext-shadow
.text-stroke
n'a pas la possibilité de faire apparaître le contour en dehors du texte, ce qui signifie que le contour saigne dans le texte, ce qui le rend souvent très horrible. En d'autres termes, iltext-stroke
ne remplace pas lestext-shadow
contoursFacile! SVG à la rescousse.
Il s'agit d'une méthode simplifiée:
Voici une démo plus complexe .
la source
Vous pouvez essayer d'empiler plusieurs ombres floues jusqu'à ce que les ombres ressemblent à un trait, comme ceci:
Voici un violon: http://jsfiddle.net/GGUYY/
Je le mentionne juste au cas où quelqu'un serait intéressé, bien que je n'appellerais pas cela une solution car elle échoue de diverses manières:
la source
Je cherchais une solution de texte-cross-browser qui fonctionne lorsqu'il est superposé sur des images d'arrière-plan. pense que j'ai une solution pour cela qui n'implique pas de balisage supplémentaire, js et fonctionne dans IE7-9 (je n'ai pas testé 6), et ne cause pas de problèmes d'alias.
Il s'agit d'une combinaison de l'utilisation de CSS3 text-shadow, qui a un bon support sauf IE ( http://caniuse.com/#search=text-shadow ), puis de l'utilisation d'une combinaison de filtres pour IE. La prise en charge des traits de texte CSS3 est actuellement médiocre.
Filtres IE
Le filtre lumineux ( http://www.impressivewebs.com/css3-text-shadow-ie/ ) a l'air terrible, donc je ne l'ai pas utilisé.
La réponse de David Hewitt impliquait l'ajout de filtres à ombre portée dans une combinaison de directions. ClearType est ensuite supprimé malheureusement, nous nous retrouvons donc avec un texte mal aliasé.
J'ai ensuite combiné certains des éléments suggérés sur useragentman avec les filtres dropshadow.
Mettre ensemble
Cet exemple serait du texte noir avec un trait blanc. J'utilise des classes html conditionnelle par la façon de cibler IE ( http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ ).
la source
filter: glow(color=white,strength=1);
Ajout juste de cette réponse. "Caresser" le texte n'est pas la même chose que "Décrire"
Les contours sont superbes. Caresser a l'air horrible.
La solution SVG répertoriée ailleurs a le même problème. Si vous voulez un plan, vous devez mettre le texte deux fois. Une fois caressé et encore pas caressé.
Caresser EST PAS Décrivant
PS: j'aimerais savoir comment faire en sorte que le SVG soit de la bonne taille de tout texte arbitraire. J'ai le sentiment qu'il est assez compliqué de générer le svg, de l'interroger avec javascript pour obtenir les extensions puis d'appliquer les résultats. S'il y a une manière non js plus simple, j'aimerais savoir.
la source
J'ai obtenu de meilleurs résultats avec 6 ombres différentes:
la source
la source
Ce mixin pour SASS donnera des résultats fluides, en utilisant 8 axes:
Et CSS normal:
la source
Travailler avec des traits plus épais devient un peu compliqué, si vous avez le plaisir d'essayer ce mixin, pas parfait et en fonction du poids du trait, il génère une bonne quantité de css.
la source
Plusieurs ombres de texte ..
Quelque chose comme ça:
Démo: http://jsfiddle.net/punosound/gv6zs58m/
la source
Générateur d'ombres de texte
Il y a beaucoup de bonnes réponses ici. Il semblerait que l'ombre du texte soit probablement le moyen le plus fiable de le faire. Je n'entrerai pas dans les détails sur la façon de faire cela avec text-shadow car d'autres l'ont déjà fait, mais l'idée de base est que vous créez plusieurs ombres de texte autour de l'élément de texte. Plus le contour du texte est grand, plus vous avez besoin d'ombres de texte.
Toutes les réponses soumises (au moment de cette publication) fournissent des solutions statiques pour l'ombre du texte. J'ai adopté une approche différente et j'ai écrit ce JSFiddle qui accepte les valeurs de couleur de contour, de flou et de largeur en entrée et génère la propriété d'ombre de texte appropriée pour votre élément. Remplissez simplement les blancs, vérifiez l'aperçu et cliquez pour copier le CSS et le coller dans votre feuille de style.
Annexe inutile
Apparemment, les réponses qui incluent un lien vers un JSFiddle ne peuvent être publiées que si elles contiennent également du code. Vous pouvez ignorer complètement cette annexe si vous le souhaitez. C'est le JavaScript de mon violon qui génère la propriété text-shadow. Veuillez noter que vous n'avez pas besoin d'implémenter ce code dans vos propres travaux:
la source
J'avais aussi ce problème, et ce
text-shadow
n'était pas une option parce que les coins auraient l'air mauvais (à moins d'avoir beaucoup d'ombres), et je ne voulais pas de flou, donc ma seule autre option était de faire ce qui suit: Avoir 2 divs, et pour le div d'arrière-plan, mettez un-webkit-text-stroke
dessus, qui permet alors d'avoir un contour aussi grand que vous le souhaitez.En utilisant cela, j'ai pu obtenir une ligne de sortie , car la
stroke-width
méthode n'était pas une option si vous voulez que votre texte reste lisible avec un très grand contour (car avecstroke-width
le contour commence à l'intérieur du lettrage qui le rend non lisible lorsque la largeur devient plus grand que les lettres.Remarque: la raison pour laquelle j'avais besoin d'un tel contour gras était que j'émulais les étiquettes de rue dans "google maps" et je voulais un gros halo blanc autour du texte. Cette solution a parfaitement fonctionné pour moi.
Voici un violon montrant cette solution
la source
Voici le fichier CSS, j'espère que vous obtiendrez ce que vous voulez
la source