Changement de la couleur du soulignement

j'ai ce code ici:

echo "<u><font color='red'><br>$username</font></u>";

tout d'Abord, comme vous pouvez le voir, il est souligné (). Deuxièmement, tout le texte est tout rouge. Eh bien, est-ce qu'il y a de toute façon de laisser le texte ($username) rouge mais le soulignement noir?

28
demandé sur friedemann_bach 2012-09-24 05:12:53

13 réponses

Pas de. Le meilleur que vous pouvez faire est d'utiliser un border-bottom avec une couleur différente, mais ce n'est pas vraiment , soulignant.

12
répondu Ignacio Vazquez-Abrams 2012-09-24 01:14:20

il y a maintenant une nouvelle propriété css3 pour ceci: texte-Décoration-Couleur

ainsi vous pouvez maintenant avoir du texte dans une couleur et un texte-décoration souligné - dans une couleur différente... sans avoir besoin d'un élément "wrap" supplémentaire

p {
  text-decoration: underline;
  -webkit-text-decoration-color: red; /* safari still uses vendor prefix */
  text-decoration-color: red;
}
<p>black text with red underline in one element - no wrapper elements here!</p>

Codepen

NB:

1) La prise en charge du navigateur est limitée pour le moment à Firefox et Chrome (entièrement pris en charge à partir de V57) et Safari

2) Vous pouvez également utiliser le texte-décoration shorthand propriété qui ressemble à ceci:

<text-decoration-line> || <text-decoration-style> || <text-decoration-color>

... donc en utilisant le raccourci text-decoration - l'exemple ci-dessus serait simplement:

p {
  text-decoration: underline red;
}

p {
  text-decoration: underline red;
}
<p>black text with red underline in one element - no wrapper elements here!</p>
49
répondu Danield 2017-10-25 11:38:22

mise à jour de l'auteur:

cette réponse est périmée car texte-Décoration-Couleur est maintenant pris en charge par la plupart des navigateurs modernes.


:pseudo + em

afin de reproduire avec précision la taille, la largeur de la course et le positionnement de la text-decoration:underline sans introduire extra HTML markup , vous devez utiliser un pseudo-element avec em unités. Cela permet une mise à l'échelle précise de l'élément et du comportement natif sans markup supplémentaire.



CSS

`a {
  text-decoration: none;
  display: inline-table;
}

a:after {
  content: "";
  border-bottom: 0.1em solid #f00;
  display: table-caption;
  caption-side: bottom;
  position: relative;
  margin-top:-0.15em;
}`

en utilisant display: table-caption et caption-side sur le pseudo-élément et affichage inline-table , nous pouvons forcer le navigateur à aligner verticalement à la fois la ligne et le lien avec précision, même lorsqu'il est mis à l'échelle.

dans ce cas, nous utilisons inline-table au lieu de inline-block pour forcer le pseudo à s'afficher sans avoir besoin de spécifier la hauteur ou les valeurs négatives.



exemples

JSFIDDLE : https://jsfiddle.net/pohuski/8yfpjuod/8/

CODEPEN : http://codepen.io/pohuski/pen/vEzxPj / (example with scaling)

Testé Avec Succès Sur:

Internet Explorer: 8, 9, 10, 11

Firefox: 41, 40, 39, 38, 37, 36

Chrome: 45, 44, 43, 42

Safari: 8, 7, 6.2

Safari Mobile: 9.0, 8.0

Navigateur Android: 4.4, 2.3

Dolphin Mobile: 8, 11.4

21
répondu Huski 2018-06-01 01:58:41

dans la pratique, il est possible, si vous utilisez span élément au lieu de font :

<style>
u { color: black; }
.red { color: red }
</style>
<u><span class='red'><br>$username</span></u>

voir jsfiddle . Semble fonctionner sur Chrome, Safari, Firefox, IE, Opera (testé sur Win 7 avec les versions les plus récentes).

le code dans la question devrait fonctionner, aussi, mais il ne fonctionne pas pour une raison quelconque sur les navigateurs WebKit (Chrome, Safari).

Par le CSS : "Le couleur(s) requis pour la décoration de texte doit être dérivée de la "couleur" de la valeur de propriété de l'élément sur lequel 'text-decoration' est fixé. La couleur des décorations doit rester la même, même si les éléments descendants ont des valeurs de "couleur" différentes."

12
répondu Jukka K. Korpela 2012-09-24 04:17:37

la façon la plus facile que j'ai abordé ce problème est avec CSS:

<style>
.redUnderline {
    color: #ff0000;
    border-bottom: 1px solid #000000;
}
</style>
<span class="redUnderline">$username</span>

Aussi, pour une réelle souligner, si votre article est un lien, cela fonctionne:

<style>
a.blackUnderline {
   color: #000000;
   text-decoration: underline;
}
.red {
    color: #ff0000;
}
</style>
<a href="" class="blackUnderline"><span class="red">$username</span></a>
6
répondu AE Grey 2012-09-24 01:23:44

vous pouvez également utiliser la propriété box-shadow pour simuler un soulignement.

voici un violon . L'idée est d'utiliser deux ombres de boîte superposées pour positionner la ligne au même endroit qu'un soulignement.

a.underline {
    text-decoration: none;
    box-shadow: inset 0 -4px 0 0 rgba(255, 255, 255, 1), inset 0 -5px 0 0 rgba(255, 0, 0, 1);
}
4
répondu Berry Blue 2014-06-20 19:12:42

une autre façon que celle décrite par danield est d'avoir un affichage de la largeur du conteneur enfant en ligne, et la couleur de la tipographie que vous voulez. La largeur de l'élément parent le texte-décoration, et la couleur de soulignement que vous voulez. Comme ceci:

div{text-decoration:underline;color:#ff0000;display:inline-block;width:50px}
div span{color:#000;display:inline}
<div>
  <span>Hover me, i can have many lines</span>
</div>
3
répondu Samuel Tesler 2015-02-22 21:32:40

un pseudo-élément fonctionne mieux.

a, a:hover {
  position: relative;
  text-decoration: none;
}
a:after {
  content: '';
  display: block;
  position: absolute;
  height: 0;
  top:90%;
  left: 0;
  right: 0;
  border-bottom: solid 1px red;
}

voir jsfiddle .

vous n'avez pas besoin d'éléments supplémentaires, vous pouvez le positionner aussi près ou aussi loin que vous le voulez à partir du texte( border-bottom est un peu loin à mon goût), il n'y a pas de couleurs supplémentaires qui apparaissent si votre lien est sur un fond de couleur différente (comme avec le box-shadow trick), et il fonctionne dans tous les navigateurs (texte-Décoration-Couleur seulement soutient Firefox encore).

possible inconvénient: le lien ne peut pas être position:statique, mais ce n'est probablement pas un problème la grande majorité du temps. Mettez-le en relation et tout va bien.

2
répondu Johnny5k 2014-07-18 00:39:29

vous pouvez utiliser ce CSS pour "simuler" un soulignement:

text-decoration: none;
border-bottom: 1px solid #000;
1
répondu Gung Foo 2013-03-26 06:14:15

vous pouvez envelopper votre <span> avec un <a> et utiliser ce petit plugin JQuery pour colorer le soulignement. Vous pouvez modifier la couleur en passant un paramètre du plugin.

    (function ($) {
        $.fn.useful = function (params) {

            var aCSS = {
                'color' : '#d43',
                'text-decoration' : 'underline'
            };

            $.extend(aCSS, params);

            this.wrap('<a></a>');
            var element = this.closest('a');
            element.css(aCSS);
            return element;
        };
    })(jQuery);

alors vous appelez en écrivant ceci:

    $("span.name").useful({color:'red'});

$(function () {

        var spanCSS = {
            'color' : '#000',
            'text-decoration': 'none'
        };
        
        $.fn.useful = function (params) {
            
            var aCSS = {
                'color' : '#d43',
                'text-decoration' : 'underline'
            };

            $.extend(aCSS, params);
            this.wrap('<a></a>');
            this.closest('a').css(aCSS);
        };

        // Use example:
        $("span.name").css(spanCSS).useful({color:'red'});



    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<section class="container">

    <div class="user important">
        <span class="name">Bob</span>
        -
        <span class="location">Bali</span>
    </div>

    <div class="user">
        <span class="name">Dude</span>
        -
        <span class="location">Los Angeles</span>
    </div>


    <div class="user">
        <span class="name">Gérard</span>
        -
        <span class="location">Paris</span>
    </div>

</section>
1
répondu Tristan C 2016-08-23 12:04:56

ici, nous pouvons créer le soulignement avec la couleur dans le texte

<u style="text-decoration-color: red;">The color of the lines should now be red!</u>

ou

La couleur des lignes doit maintenant être rouge!

<h1 style=" text-decoration:underline; text-decoration-color: red;">The color of the lines should now be red!</u>
1
répondu shraddha Tripathi 2017-03-13 10:27:50

je pense que la façon la plus facile de faire ceci est dans votre css, utilisez:

text-decoration-color: red;

Cela va changer la couleur du soulignement sans changer la couleur de votre texte. Bonne chance!

1
répondu Cassie H. 2017-07-03 18:12:55

Problème avec border-bottom est la distance supplémentaire entre le texte et la ligne. Le problème avec text-decoration-color est le manque de support du navigateur. Donc ma solution est l'utilisation d'une image de fond d'écran avec une ligne. Ceci supporte n'importe quel markup, couleur(s) et style de la ligne. top (12px dans mon exemple) dépend de line-height de votre texte.

 u {
    text-decoration: none;
    background: transparent url(blackline.png) repeat-x 0px 12px;
}
0
répondu JanP 2016-03-23 15:25:56