La distance est déterminée par une police utilisée. Essayez les polices Web sécurisées.
Alexei Danchenkov
1
CSS3 a beaucoup de nouvelles propriétés de décoration de texte de nos jours. Veuillez consulter alligator.io/css/text-decoration Exemple: text-underline-position: under;et text-decoration-skip: ink;veuillez noter que ce n'est probablement pas rétrocompatible avec les anciens navigateurs.
Non, mais vous pourriez aller avec quelque chose comme border-bottom: 1px solid #000et padding-bottom: 3px.
Si vous voulez la même couleur que le "soulignement" (qui dans mon exemple est une bordure), il vous suffit de laisser de côté la déclaration de couleur, c'est border-bottom-width: 1px-à- dire et border-bottom-style: solid.
Pour les multilignes, vous pouvez encapsuler vos textes multilignes dans un intervalle à l'intérieur de l'élément. Par exemple, <a href="#"><span>insert multiline texts here</span></a>il suffit d'ajouter border-bottomet paddingsur la <span>- Démo
Mon seul problème avec cette astuce est lorsque j'utilise une hauteur de ligne égale à la hauteur de div, puis un alignement vertical: middle; pour le centrer, je ne peux pas utiliser cette astuce car le soulignement se retrouve sous le div.
deweydb
@deweydb: Que diriez-vous d'ajouter le padding-bottom au conteneur div également? jsfiddle.net/dYfjc/1
chelmertz
+1 Je ne savais pas qu'il fallait laisser la propriété color pour hériter de la couleur de la police - cela sauvera beaucoup de sueur et de larmes à l'avenir!
Larry
9
Je ne sais pas pourquoi cette réponse a autant de votes positifs. Cela ne fonctionne pas complètement avec les textes multilignes.
3
Pour les multilignes, vous pouvez encapsuler vos textes multilignes dans un intervalle à l'intérieur de l'élément. Par exemple, <a href="#"><span>insert multiline texts here</span></a>il suffit d'ajouter une bordure inférieure et un rembourrage sur le <span>. jsfiddle.net/Aishaterr/vrpb2ey7/1
Daniel Hernandez
133
Mise à jour 2019: le groupe de travail CSS a publié un projet de décoration de texte niveau 4 qui ajouterait une nouvelle propriété text-underline-offset(ainsi que text-decoration-thickness) pour permettre de contrôler l'emplacement exact d'un soulignement. Au moment de la rédaction de ce document, il s'agit d'un projet préliminaire et n'a été implémenté par aucun navigateur, mais il semble que cela rendra la technique ci-dessous obsolète.
Réponse originale ci-dessous.
Le problème avec l'utilisation border-bottomdirecte est que même avec padding-bottom: 0, le soulignement a tendance à être trop éloigné du texte pour bien paraître. Nous n'avons donc toujours pas un contrôle complet.
Une solution qui vous donne une précision en pixels est d'utiliser le :afterpseudo-élément:
Cela ne fonctionnera pas pour mon problème particulier, mais c'est une astuce fantastique. +1
11
Bon travail, mais cela ne fonctionnera pas pour les ancres qui s'étendent sur plusieurs lignes
Willster
@ last-child Celui-ci est meilleur que le soulignement, mais avec l'
habillage de
Un problème est qu'un bord inférieur et un soulignement sont deux choses différentes. Par exemple, une partie du texte doit s'étendre sous le soulignement. Si vous définissez des a-tags comme des boutons, vous n'avez aucune liberté d'utiliser border-bottom comme soulignement.
Anders Lindén
10
Imaginez dire à quelqu'un qui est nouveau dans le développement Web, un graphiste, un utilisateur moyen ou votre maman, que c'est ce qui est nécessaire pour ajouter un espace contrôlé entre le texte et c'est souligné et ils se demanderont ce que vous faites de votre vie .
MarcGuay
79
Vous pouvez utiliser ceci text-underline-position: under
Merci! Si vous essayez de faire un soulignement en pointillés et de voir qu'il est dessiné sans espace entre le bas du texte et la ligne, cela résout le problème.
Jonathan Cross
6
C'est la bonne réponse pour les navigateurs modernes sans aucune solution de contournement.
Très intéressant. Grande légende. Je vous remercie!
Jordan Starrk
Pris en charge dans Firefox à partir de 74, selon le même lien.
GSerg
11
Entrer dans les détails du style visuel de text-decoration:underlineest à peu près futile, donc vous allez devoir aller avec une sorte de piratage les supprime text-decoration:underlineet le remplace par quelque chose d'autre jusqu'à ce qu'une future version lointaine magique de CSS nous donne plus de contrôle .
Cela a fonctionné pour moi:
a {background-image: linear-gradient(180deg, rgba(0,0,0,0),
rgba(0,0,0,0)81%,#22222281.1%,#22222285%,
rgba(0,0,0,0)85.1%,
rgba(0,0,0,0));text-decoration: none;}
<ahref="#">Lorem ipsum</a> dolor sit amet, <ahref="#">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor <ahref="#">invidunt ut labore.</a>
Si vous avez une couleur d'arrière-plan unie, essayez d'ajouter une fine text-strokeou text-shadowde la même couleur que votre arrière-plan pour rendre les descendants agréables.
Crédit
Il s'agit d'une version simplifiée de la technique que j'ai trouvée à l'origine sur https://eager.io/app/smartunderline , mais l'article a depuis été retiré.
Malheureusement, le lien eager.io ne fonctionne plus. Vous rappelez-vous quel était le hack pour rendre les descendeurs plus beaux?
kano
1
@Kano - Je crois qu'il utilisait l'ombre de texte de la même couleur qu'un arrière-plan uni.
squarecandy
De plus, avec la technique ci-dessus, vous pouvez définir une couleur de soulignement différente du texte, donc parfois je la définis pour être plus claire que le texte, ce qui rend les collisions avec les descendants moins problématiques pour la lisibilité.
squarecandy
7
Je sais que c'est une vieille question, mais pour le réglage du texte sur une seule ligne display: inline-block, puis le réglage, cela heighta bien fonctionné pour moi pour contrôler la distance entre une bordure et le texte.
Je n'avais pas besoin de régler la hauteur. Je l'ai juste enveloppé dans une autre div et comme je voulais qu'il soit centré, j'ai simplement défini l'alignement du texte sur la div.
Guy Lowe
6
@ la réponse du dernier enfant est une excellente réponse!
Cependant, l'ajout d'une bordure à mon H2 a produit un soulignement plus long que le texte.
Si vous écrivez dynamiquement votre CSS, ou si comme moi vous avez de la chance et savez quel sera le texte, vous pouvez faire ce qui suit:
changer le contenten quelque chose de la bonne longueur (c'est-à-dire le même
texte) définissez la couleur de la police sur transparent(ou rgba(0,0,0,0))
pour souligner <h2>Processing</h2>(par exemple), changez le code du dernier enfant en:
Les H2 sont des éléments de bloc qui pourraient expliquer pourquoi le soulignement était plus long que le texte. Peut display: inline-block- être le réparerait. Remplacer le texte par contentressemble à un hack qui pourrait se casser de plusieurs façons.
Vous devez utiliser la propriété de largeur de bordure et la propriété de remplissage. J'ai ajouté une animation pour le rendre plus cool:
body{background-color:lightgreen;}
a{text-decoration:none;color:green;border-style:solid;border-width:0px0px1px0px;transition: all .2s ease-in;}a:hover{color:darkblue;border-style:solid;border-width:0px0px1px0px;padding:2px;}
<ahref='#'>Somewhere ... over the rainbow (lalala)</a> , blue birds, fly... (tweet tweet!), and I wonder (hmm) about what a <i><ahref="#">what a wonder-ful world!</a> World!</i>
Vous pouvez remplacer le second 100%par autre chose comme pxou empour ajuster la position verticale du soulignement. Vous pouvez également utiliser calcsi vous souhaitez ajouter un rembourrage vertical, par exemple:
Bien sûr, vous pouvez également créer votre propre motif png base64 avec une autre couleur, hauteur et design, par exemple ici: http://www.patternify.com/ - il suffit de définir la largeur et la hauteur du carré à 2x1.
Si vous utilisez text-decoration: underline;, vous pouvez ajouter de l'espace entre le soulignement et le texte en utilisanttext-underline-position: under;
Pour en savoir plus Les propriétés text-underline-position, vous pouvez voir ici
text-underline-position: under;
ettext-decoration-skip: ink;
veuillez noter que ce n'est probablement pas rétrocompatible avec les anciens navigateurs.text-underline-offset
ici: bugs.chromium.org/p/chromium/issues/…Réponses:
Non, mais vous pourriez aller avec quelque chose comme
border-bottom: 1px solid #000
etpadding-bottom: 3px
.Si vous voulez la même couleur que le "soulignement" (qui dans mon exemple est une bordure), il vous suffit de laisser de côté la déclaration de couleur, c'est
border-bottom-width: 1px
-à- dire etborder-bottom-style: solid
.Pour les multilignes, vous pouvez encapsuler vos textes multilignes dans un intervalle à l'intérieur de l'élément. Par exemple,
<a href="#"><span>insert multiline texts here</span></a>
il suffit d'ajouterborder-bottom
etpadding
sur la<span>
- Démola source
<a href="#"><span>insert multiline texts here</span></a>
il suffit d'ajouter une bordure inférieure et un rembourrage sur le<span>
. jsfiddle.net/Aishaterr/vrpb2ey7/1Mise à jour 2019: le groupe de travail CSS a publié un projet de décoration de texte niveau 4 qui ajouterait une nouvelle propriété
text-underline-offset
(ainsi quetext-decoration-thickness
) pour permettre de contrôler l'emplacement exact d'un soulignement. Au moment de la rédaction de ce document, il s'agit d'un projet préliminaire et n'a été implémenté par aucun navigateur, mais il semble que cela rendra la technique ci-dessous obsolète.Réponse originale ci-dessous.
Le problème avec l'utilisation
border-bottom
directe est que même avecpadding-bottom: 0
, le soulignement a tendance à être trop éloigné du texte pour bien paraître. Nous n'avons donc toujours pas un contrôle complet.Une solution qui vous donne une précision en pixels est d'utiliser le
:after
pseudo-élément:En changeant le
bottom
propriété (les nombres négatifs conviennent), vous pouvez positionner le soulignement exactement où vous le souhaitez.Un problème avec cette technique pour se méfier est qu'elle se comporte un peu bizarrement avec les sauts de ligne.
la source
Vous pouvez utiliser ceci
text-underline-position: under
Voir ici pour plus de détails: https://css-tricks.com/almanac/properties/t/text-underline-position/
Voir également la compatibilité du navigateur .
la source
Voici ce qui fonctionne bien pour moi.
la source
text-underline-position
n'est pas pris en charge sous Firefox selon developer.mozilla.org/en-US/docs/Web/CSS/…Entrer dans les détails du style visuel de
text-decoration:underline
est à peu près futile, donc vous allez devoir aller avec une sorte de piratage les supprimetext-decoration:underline
et le remplace par quelque chose d'autre jusqu'à ce qu'une future version lointaine magique de CSS nous donne plus de contrôle .Cela a fonctionné pour moi:
Voici une version avec toutes les propriétés propriétaires pour une certaine compatibilité descendante:
Mise à jour: version SASSY
J'ai fait un mixage scss pour ça. Si vous n'utilisez pas SASS, la version régulière ci-dessus fonctionne toujours très bien ...
puis utilisez-le comme ceci:
Mise à jour 2: Astuce des descendeurs
Si vous avez une couleur d'arrière-plan unie, essayez d'ajouter une fine
text-stroke
outext-shadow
de la même couleur que votre arrière-plan pour rendre les descendants agréables.Crédit
Il s'agit d'une version simplifiée de la technique que j'ai trouvée à l'origine sur https://eager.io/app/smartunderline , mais l'article a depuis été retiré.
la source
Je sais que c'est une vieille question, mais pour le réglage du texte sur une seule ligne
display: inline-block
, puis le réglage, celaheight
a bien fonctionné pour moi pour contrôler la distance entre une bordure et le texte.la source
@ la réponse du dernier enfant est une excellente réponse!
Cependant, l'ajout d'une bordure à mon H2 a produit un soulignement plus long que le texte.
Si vous écrivez dynamiquement votre CSS, ou si comme moi vous avez de la chance et savez quel sera le texte, vous pouvez faire ce qui suit:
changer le
content
en quelque chose de la bonne longueur (c'est-à-dire le mêmetexte) définissez la couleur de la police sur
transparent
(ourgba(0,0,0,0)
)pour souligner
<h2>Processing</h2>
(par exemple), changez le code du dernier enfant en:la source
display: inline-block
- être le réparerait. Remplacer le texte parcontent
ressemble à un hack qui pourrait se casser de plusieurs façons.Voir mon violon .
Vous devez utiliser la propriété de largeur de bordure et la propriété de remplissage. J'ai ajouté une animation pour le rendre plus cool:
la source
Une alternative pour les textes ou liens multilignes, vous pouvez encapsuler vos textes dans un intervalle à l'intérieur d'un élément de bloc.
alors vous pouvez simplement ajouter une bordure inférieure et un rembourrage sur le
<span>
.Vous pouvez vous référer à ce violon. https://jsfiddle.net/Aishaterr/vrpb2ey7/2/
la source
Si tu veux:
souligner, vous pouvez utiliser une image d' arrière-plan de 1 pixel de hauteur avec
repeat-x
et100% 100%
position:Vous pouvez remplacer le second
100%
par autre chose commepx
ouem
pour ajuster la position verticale du soulignement. Vous pouvez également utilisercalc
si vous souhaitez ajouter un rembourrage vertical, par exemple:Bien sûr, vous pouvez également créer votre propre motif png base64 avec une autre couleur, hauteur et design, par exemple ici: http://www.patternify.com/ - il suffit de définir la largeur et la hauteur du carré à 2x1.
Source d'inspiration: http://alistapart.com/article/customunderlines
la source
Si vous utilisez
text-decoration: underline;
, vous pouvez ajouter de l'espace entre le soulignement et le texte en utilisanttext-underline-position: under;
Pour en savoir plus Les propriétés text-underline-position, vous pouvez voir ici
la source
J'ai pu le faire en utilisant le U (balise de soulignement)
la source
C'est ce que j'utilise:
html:
css:
la source
Ce que j'utilise:
la source