Entrer dans les détails du style visuel de text-decoration:underline
est plutôt futile, donc vous allez devoir utiliser une sorte de piratage qui supprime text-decoration:underline
et le remplace par autre chose jusqu'à ce qu'une version magique et lointaine de CSS nous donne plus de contrôle.
Cela a marché pour moi :
a {
background-image: linear-gradient(
180deg, rgba(0,0,0,0),
rgba(0,0,0,0) 81%,
#222222 81.1%,
#222222 85%,
rgba(0,0,0,0) 85.1%,
rgba(0,0,0,0)
);
text-decoration: none;
}
<a href="#">Lorem ipsum</a> dolor sit amet, <a href="#">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor <a href="#">invidunt ut labore.</a>
- Ajustez les valeurs en % (81% et 85%) pour modifier la distance entre la ligne et le texte.
- Ajustez la différence entre les deux valeurs en % pour modifier l'épaisseur du trait.
- ajuster les valeurs de couleur (#222222) pour changer la couleur du soulignement
- fonctionne avec des éléments en ligne multiples
- fonctionne avec n'importe quel fond
Voici une version avec toutes les propriétés propriétaires pour une certaine rétrocompatibilité :
a {
/* This code generated from: http://colorzilla.com/gradient-editor/ */
background: -moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 81%, rgba(0,0,0,1) 81.1%, rgba(0,0,0,1) 85%, rgba(0,0,0,0) 85.1%, rgba(0,0,0,0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,0,0,0)), color-stop(81%,rgba(0,0,0,0)), color-stop(81.1%,rgba(0,0,0,1)), color-stop(85%,rgba(0,0,0,1)), color-stop(85.1%,rgba(0,0,0,0)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* W3C */
text-decoration: none;
}
Mise à jour : version SASSY
J'ai créé un mixin scss pour cela. Si vous n'utilisez pas SASS, la version normale ci-dessus fonctionne toujours très bien...
@mixin fake-underline($color: #666, $top: 84%, $bottom: 90%) {
background-image: linear-gradient(
180deg, rgba(0,0,0,0),
rgba(0,0,0,0) $top,
$color $top + 0.1%,
$color $bottom,
rgba(0,0,0,0) $bottom + 0.1%,
rgba(0,0,0,0)
);
text-decoration: none;
}
puis utilisez-le comme suit :
$blue = #0054a6;
a {
color: $blue;
@include fake-underline(lighten($blue,20%));
}
a.thick {
color: $blue;
@include fake-underline(lighten($blue,40%), 86%, 99%);
}
Mise à jour 2 : Conseil sur les descendeurs
Si vous avez une couleur d'arrière-plan unie, essayez d'ajouter un mince text-stroke
o text-shadow
de la même couleur que votre arrière-plan pour que les descendantes aient un bel aspect.
Crédit
Il s'agit d'une version simplifiée de la technique que j'ai trouvée à l'origine chez https://eager.io/app/smartunderline mais l'article a depuis été retiré.
2 votes
Ce n'est pas exactement ce que vous demandiez, mais c'était une lecture intéressante sur le sujet : CSS Design : Soulignements personnalisés
0 votes
La distance est déterminée par la police utilisée. Essayez des polices sûres pour le web.
5 votes
CSS3 propose aujourd'hui un grand nombre de nouvelles propriétés de décoration du texte. Veuillez consulter le site alligator.io/css/text-decoration Exemple :
text-underline-position: under;
ytext-decoration-skip: ink;
Veuillez noter que cette solution n'est probablement pas rétrocompatible avec les anciens navigateurs.2 votes
Un autre bonne solution
6 votes
Vote pour
text-underline-offset
ici : bugs.chromium.org/p/chromium/issues/