539 votes

Bordure de police CSS ?

Avec toutes les nouveautés en matière de bordures CSS3 ( -webkit ...) est-il maintenant possible d'ajouter une bordure à votre police ? (Comme la bordure blanche solide autour du logo bleu de Twitter). Si ce n'est pas le cas, existe-t-il des astuces pas trop moches qui permettent de le faire en CSS/XHTML ou dois-je encore utiliser Photoshop ?

1096voto

Narcélio Filho Points 2945

Il existe une propriété CSS expérimentale appelée frappe du texte , supporté sur certains navigateurs derrière un préfixe -webkit .

h1 {
    -webkit-text-stroke: 2px black; /* width and color */

    font-family: sans; color: yellow;
}

<h1>Hello World</h1>

Une autre astuce possible serait d'utiliser quatre ombres, un pixel chacune dans toutes les directions, en utilisant la propriété text-shadow :

h1 {
    /* 1 pixel black shadow to left, top, right and bottom */
    text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

    font-family: sans; color: yellow;
}

<h1>Hello World</h1>

Mais elle devient floue pour une épaisseur de plus d'un pixel.

5 votes

Cela a fonctionné pour moi, j'ai ajouté seulement 1px "blur":text-shadow : -1px 0 1px black, 0 1px 1px black, 1px 0 1px black, 0 -1px 1px black

88 votes

Idéal si vous n'avez besoin que d'une bordure de 1px. Mais le problème se complique lorsque l'on utilise 2px ou plus.

2 votes

Note : il y a un bug avec le navigateur Andriod ( code.google.fr/p/Android/issues/detail?id=7531 ), si vous définissez le "flou" à 0px, aucun contour n'apparaît.

162voto

pixelass Points 1398

UPDATE

Voici un mixin SCSS pour générer le trait : http://codepen.io/pixelass/pen/gbGZYL

/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {List}            - text-shadow list
@function stroke($stroke, $color) {
  $shadow: ();
  $from: $stroke*-1;
  @for $i from $from through $stroke {
   @for $j from $from through $stroke {
      $shadow: append($shadow, $i*1px $j*1px 0 $color, comma);
    }
  }
  @return $shadow;
}
/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {Style}           - text-shadow
@mixin stroke($stroke, $color) {
  text-shadow: stroke($stroke, $color);
}

enter image description here

OUI vieille question avec des réponses acceptées (et bonnes)

MAIS... Au cas où quelqu'un en aurait besoin et déteste taper du code...

CECI est une bordure noire de 2px avec support CrossBrowser (pas IE) J'en avais besoin pour les polices @fontface donc il fallait que ce soit plus propre que les réponses vues précédemment... Je prends chaque côté en pixel pour m'assurer qu'il n'y a (presque) aucun vide pour les polices "floues" (dessinées à la main ou similaires). Des sous-pixels (0,5px) pourraient être ajoutés mais je n'en ai pas besoin.

Un code long pour juste la frontière ? ?? ...OUI !!!

text-shadow: 1px 1px 0 #000,
    -1px 1px 0 #000,
    1px -1px 0 #000,
    -1px -1px 0 #000,
    0px 1px 0 #000,
    0px -1px 0 #000,
    -1px 0px 0 #000,
    1px 0px 0 #000,
    2px 2px 0 #000,
    -2px 2px 0 #000,
    2px -2px 0 #000,
    -2px -2px 0 #000,
    0px 2px 0 #000,
    0px -2px 0 #000,
    -2px 0px 0 #000,
    2px 0px 0 #000,
    1px 2px 0 #000,
    -1px 2px 0 #000,
    1px -2px 0 #000,
    -1px -2px 0 #000,
    2px 1px 0 #000,
    -2px 1px 0 #000,
    2px -1px 0 #000,
    -2px -1px 0 #000;

0 votes

Mise à jour du code en raison d'un doublon de 0 2px 0 #000 et de ses éléments -/+. Le flou (0 avant #000) pourrait être supprimé mais j'ai tendance à le garder même s'il est à 0. Je dois également noter qu'il est recommandé d'avoir une version CSS minifiée ou compressée de votre code sur les sites de production et de garder une version commentée non compressée pour l'édition. Le code ci-dessus est un bon exemple de la raison pour laquelle un code CSS doit être minifié mais doit être séparé ligne par ligne pour l'édition.

0 votes

J'ai joué avec la propriété '-webkit-text-stroke' (principalement pour que les polices aient l'air plus jolies sur l'UGLY UGLY Windows) mais cela a rendu les temps de chargement beaucoup trop longs et a même fait planter mon site (mac Chrome 16). J'ai donc supprimé cette propriété avant même que la page ne puisse se charger. Je suppose que cela n'est prévu que pour des lignes de polices uniques. (Je l'utilisais pour 'body')

1 votes

Avez-vous effectué des tests de performance avec ce système ? J'ai constaté que l'ombre du texte ralentissait la page lors du défilement, par exemple.

56voto

David Thomas Points 111253

Vous pourriez peut-être émuler une frappe de texte, en utilisant le css text-shadow (ou -webkit-text-shadow / -moz-text-shadow ) et un flou très faible :

#element
{
  text-shadow: 0 0 2px #000; /* horizontal-offset vertical-offset 'blur' colour */
  -moz-text-shadow: 0 0 2px #000;
  -webkit-text-shadow: 0 0 2px #000;
}

Mais, bien qu'il soit plus largement disponible que le -webkit-text-stroke propriété, je doute qu'elle soit disponible pour la majorité de vos utilisateurs, mais cela pourrait ne pas être un problème (dégradation gracieuse, et tout ça).

4 votes

Il convient de noter qu'il est possible d'omettre totalement le troisième argument afin de ne pas avoir de flou du tout.

27voto

Colm Sloan Points 335

Pour approfondir certaines réponses qui ont mentionné -webkit-text-stroke, voici le code pour le faire fonctionner :

div {
  -webkit-text-fill-color: black;
  -webkit-text-stroke-color: red;
  -webkit-text-stroke-width: 2.00px; 
}

Un article approfondi sur l'utilisation du trait de texte est aquí et la liste des navigateurs qui prennent en charge le trait de texte est la suivante aquí .

17voto

andsve Points 348

Il semble exister une propriété "text-stroke", mais (du moins pour moi) elle ne fonctionne que dans Safari.

http://webkit.org/blog/85/introducing-text-stroke/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X