• CSS - Une bordure autour des lettres

    CSS - Une bordure autour des lettres

    En CSS, on connaît bien-sûr les bordures autour des éléments. On sait aussi faire des arrondis. Mais ajouter une bordure autour des lettres d'un texte ou d'un titre, c'est déjà moins évident. Mais c'est bien-sûr possible… Avec plusieurs ombres sur le même texte. Ce sera l'astuce du jour :

    Une ombre, deux ombres, trois ombres…

    Avant d'entrer dans le vif du sujet, un petit rappel s'impose :

    La propriété CSS pour réaliser des ombres pour du texte se nomme text-shadow et a l'avantage de pouvoir comporter plusieurs séries de valeurs : il suffit de les séparer par une virgule.

    Par exemple, si je veux une ombre cyan en bas et une ombre magenta en haut d'un titre, je n'ai qu'à écrire les valeurs pour ces deux cas de figure et séparer chaque suite par une virgule :

    h1{text-shadow:0 4px 0 #00ecff, 0 -4px 0 #ff4045;}

    Je rappelle la syntaxe ici, pour cette propriété :

    text-shadow: NlargeurMesure NhauteurMesure NflouMesure Couleur;}

    Le premier chiffre concerne la largeur, le second la hauteur, le troisième l'amplitude du flou (toujours en unité de longueur). Pour ces deux chiffres, la mesure doit être précisée (em, rem, px…) sauf pour un zéro, et ils peuvent être négatifs (un - devant) pour les ombres vers le haut ou la gauche. Et pour terminer, on note la couleur de l'ombre (fonction rgba acceptée pour la transparence si besoin).

    Résultat de notre exemple :

    Exemple de texte avec deux ombres

    Oui, on est d'accord que là c'est moche :oops:. Mais c'est juste pour l'exemple.
    Notons que le navigateur affiche les ombres dans l'ordre inverse de la lecture du code : la dernière ombre sera affichée derrière les précédentes déclarées. Dans notre exemple, l'ombre cyan à été déclarée avant l'ombre magenta ; ce sera donc l'ombre cyan qui sera affichée devant la seconde.

    Technique 1 : une simple règle CSS

    Sachez qu'il existe déjà une règle CSS pour ajouter un contour au texte. Il s'agit de text-stroke. :vhap:

    -webkit-text-stroke: 2px;
    -webkit-text-stroke-color: #d60;

    Malheureusement, elle n'est pas encore supportée par tous les navigateurs Web. C'est son gros désavantage. :cry:

    Mais visuellement, c'est parfait. Essayez sur Firefox, vous aurez un résultat impeccable :

    Texte décoré avec text-stroke

    Observez que l'épaisseur de la bordure se répand exactement sur l'axe du contour au lieu de s'étaler à l'extérieur.

    À défaut, voici donc deux autres techniques pour remplacer cette propriété :

    Technique 2 : répétition d'ombre floue

    La première technique consiste à répéter une ombre floue derrière le texte, jusqu'à ce qu'elle forme un aspect opaque.

    Le nombre de répétition dépend de la taille du flou. Pour 2 pixels, comptez 20 fois la même ombre. Voici un exemple :

    text-shadow: 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60, 0 0 2px #d60;

    Résultat :

    Texte avec 20 ombres floues de 4px

    Notez que cette technique donne un bord peu net, fort arrondi et nécessite beaucoup de répétition pour des bordures épaisses.

    Technique 3 : une ombre opaque sur tous les angles

    La seconde technique est plus précise :

    Elle consiste à réaliser 8 ombres opaques qui iront chacune dans un angle.
    Démonstration :

    text-shadow: 2px 0 0 #d60, 2px 2px 0 #d60, 0 2px 0 #d60, -2px 2px 0 #d60, -2px 0 0 #d60, -2px -2px 0 #d60, 0 -2px 0 #d60, 2px -2px 0 #d60;

    Résultat :

    Texte avec 8 ombres opaques sur 2px

    Le rendu est plus précis au niveau des angles. Mais un inconvénient apparaît d'autant plus sur les pointes des caractères, que les ombres sont éloignées du texte. Voici un exemple flagrant :

    C K X Y

    C'est moche, hein ! :eek: Pour limiter ce défaut et lisser le tout au pixel près, il faudrait multiplier les 8 ombres par le nombre de pixels de large que fait l'épaisseur du texte.

    En revanche, 8 ombres sont largement suffisantes pour un texte d'un pixel de large, ou pour des polices d'écriture bien rondes.

    La technique vous paraît trop laborieuse à coder ?
    Ne vous cassez pas la tête : utilisez ce générateur de code CSS en ligne.
    Il vous fera tout le boulot à votre place ! :likeaboss: Merci au généreux développeur qui nous partage son application en ligne.

    Bon développement à tous ! :hap:


    Tags Tags : , , , , , , ,
  • Commentaires

    1
    Emi
    Jeudi 14 Octobre 2021 à 10:24
    Emi

    C'est top ! Mais je ne trouve pas comment appliquer le CSS qu'à un seul mot dans ma ligne, il y a encore qqun pour m'aider ? HELP ! Merci :)

      • Jeudi 14 Octobre 2021 à 10:35

        Bonjour,

        Oui, je suis encore en vie !

        Pour un seul mot dans une ligne, il faut aller dans le code HTML, et encadrer le mot d'une balise SPAN, comme ceci afin de l'isoler :

        <span>mot</span>

        Ensuite, dans cette balise, on ajoute un attribut STYLE contenant le code css comme ça :

        <span style="mon code css ici">mot</span>

         

        NB : dans une balise STYLE, on écrit le code CSS comme dans les accolades, mais sans passer à la ligne, comme ça :

        nom-de-la-propriété: valeur; nom-d-une-autre-propriété: valeur1, valeur2; nom-d-une-autre-propriété: fonction(valeur1,valeur2,valeur3);

        Cela donne par exemple :

        <span style="text-stroke: 2px; -webkit-text-stroke: 2px;">Hello!</span>

    2
    Emi
    Jeudi 14 Octobre 2021 à 12:16
    Emi

    Mais tu es un Dieu pour une noob comme moi ! Mille mercis !

    Comme je suis une noob, déjà j'arrive pas à changer mon fond couleur, en fait je voudrais que le texte soit blanc avec contour noir. Et sur le titre j'ai l'impression qu'il n'y a pas de code HTML, que je n'ai accès qu'au css personnalisé du titre... Me trompe-je ?

    Encore merci à toi 

      • Jeudi 14 Octobre 2021 à 13:11

        Pour un titre blanc avec une bordure noire, je mettrais ce code :color:#fff;text-shadow: 2px 0 0 #000, 2px 2px 0 #000, 0 2px 0 #000, -2px 2px 0 #000, -2px 0 0 #000, -2px -2px 0 #000, 0 -2px 0 #000, 2px -2px 0 #000;

        Mais pour répondre plus précisément, j'aurais besoin de contexte : quel titre ? Celui du site ? Celui en tête d'article ? Dans l'article ?

    3
    Emi
    Jeudi 14 Octobre 2021 à 13:31
    Emi

    Encore merci pour ta réponse !

    Alors c'est pour le Titre dans un bloc en-tête plein écran violet

      • Lundi 18 Octobre 2021 à 09:23

        Si c'est le titre d'en-tête du site, le code est à placer dans Apparence, Modifier le thème, Ajouter du CSS.

        Pour le fond complet c'est :
        #header{background: purple;}
        Et si ça ne fonctionne pas il faut ajouter espace + !important :
        #header{background: purple !important;}

        Pour mettre le fond du titre lui-même (surlignage), c'est :
        #header-link a{background: purple;}
        Et du coup, il faudrait ajouter à la suite (juste avant l’accolade finale) la règle ajoutant la bordure noire :
        text-shadow: 2px 0 0 #000, 2px 2px 0 #000, 0 2px 0 #000, -2px 2px 0 #000, -2px 0 0 #000, -2px -2px 0 #000, 0 -2px 0 #000, 2px -2px 0 #000;

        Et pour la couleur du titre, c'est dans Apparence, Modifier le thème, En-tête, Titre, cocher Couleur et mettre :
        #fff
        (En profiter pour le mettre éventuellement en gras si besoin (bouton B).)

        Cordialement.

        PS: Je ne vais pas te faire un cours de HTML/CSS, mais pour ce qui nous occupe, je te dirais simplement que les espaces sont importants dans le code CSS. Ils sont nécessaires pour séparer les valeurs à l'intérieur des règles, ou pour déterminer une hiérarchie dans le ciblage des éléments HTML. En revanche, les passages à la lignes ne sont pas importants, du moment qu'on les fait en dehors d'une ligne de règle. Par exemple, on peut écrire comme ceci :

        #element-cible
        {
        regle: valeur;
        seconde-regle: valeur, valeur;
        }

    4
    Emi
    Jeudi 4 Novembre 2021 à 09:55
    Emi

    Hello !

    Merci pour ta réponse, je ne la vois que maintenant désolé du retard :/ 

    En fait j'ai moitié de mon titre en plein et moitié en contour, j'ai bricolé un truc qui a l'air de fonctionné. Dommage qu'on ne puisse pas t'envoyer de photo :/ ou peut-être tant mieux pour ne pas que tu fasses une syncope ! shocked

     

      • Mardi 9 Novembre 2021 à 12:21

        Hello!

        Bah je pense que si, moi j'ai un bouton "insérer une image" : capture d'écran

        Après je clique sur "uploader un fichier" et c'est bon. glasses

    5
    Emi
    Mercredi 10 Novembre 2021 à 10:53
    Emi

    L'option uploader une image ne s'affiche pas chez moi :( 

      • Mercredi 10 Novembre 2021 à 11:12

        Étrange... Bon pas grave : pour bien faire il me faudrait un lien pour voir le titre en question. Tu fais tes tests sur un blog non publié ?

    6
    Emi
    Mercredi 10 Novembre 2021 à 12:45
    Emi

    Oui, c'est bien ça :) je fais des tests sur le site en maintenance :) je l'ai désactivé, si tu veux jeter un coup d'œil  https://flamazingstudio.com/index.php/produit/le-t-shirt/

      • Mercredi 10 Novembre 2021 à 13:33

        D'accord, je pensais qu'il s'agissait d'un blog sur cette plateforme (Eklablog).

        Depuis mon navigateur, le titre apparaît ainsi :

        Capture d'écran

        cool Ça m'a l'air réussi : ça reprend l'identité visuelle du logo.

        Tu cherchais à montrer l'ensemble du titre "LE T-SHIRT" avec une bordure, et pas seulement "SHIRT" ? Je ne comprends pas ce que tu cherches à faire précisément.

    7
    emi
    Mercredi 10 Novembre 2021 à 14:00
    emi

    Le visuel que tu as c'est le résultat que je voulais :) mais pour ça j'ai dû faire une bidouille, je sais pas si c'est très catholique mais ça a fonctionné ! J'ai dû mettre le bout de code dans l'emplacement titre du module. En back office c'est pas ouf, mais ça fonctionne !

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :