A distância é determinada por uma fonte usada. Tente fontes seguras para a web.
Alexei Danchenkov
1
Atualmente, o CSS3 tem muitas novas propriedades de decoração de texto. Verifique alligator.io/css/text-decoration Exemplo: text-underline-position: under;e text-decoration-skip: ink;Observe que isso provavelmente não é compatível com os navegadores antigos.
Não, mas você pode usar algo como border-bottom: 1px solid #000e padding-bottom: 3px.
Se você deseja a mesma cor do "sublinhado" (que no meu exemplo é uma borda), basta deixar de fora a declaração de cores, ou seja, border-bottom-width: 1pxe border-bottom-style: solid.
Para várias linhas, você pode agrupar textos de várias linhas em um espaço dentro do elemento. Por exemplo <a href="#"><span>insert multiline texts here</span></a>, basta adicionar border-bottome paddingna <span>- Demo
Meu único problema com esse truque é quando estou usando a altura da linha igual à altura da div e depois o alinhamento vertical: middle; para centralizá-lo, não posso usar esse truque porque o sublinhado termina abaixo da div.
deweydb
@deweydb: Que tal adicionar o fundo de preenchimento também à div do contêiner? jsfiddle.net/dYfjc/1
chelmertz
+1 Eu não sabia como deixar de fora a propriedade color para herdar a cor da fonte - isso economizará muito suor e lágrimas no futuro!
Larry
9
Não sei bem por que essa resposta tem tantos votos positivos. Isso não funciona completamente com textos de várias linhas.
3
Para várias linhas, você pode agrupar textos de várias linhas em um espaço dentro do elemento. Por exemplo <a href="#"><span>insert multiline texts here</span></a>, basta adicionar borda inferior e preenchimento no <span>. jsfiddle.net/Aishaterr/vrpb2ey7/1
Daniel Hernandez
133
Atualização 2019: o CSS Working Group publicou um rascunho para o nível 4 de decoração de texto que adicionaria uma nova propriedade text-underline-offset(além de text-decoration-thickness) para permitir o controle sobre o posicionamento exato de um sublinhado. No momento da redação deste documento, é um rascunho em estágio inicial e não foi implementado por nenhum navegador, mas parece que eventualmente tornará a técnica abaixo obsoleta.
Resposta original abaixo.
O problema com o uso border-bottomdiretamente é que mesmo com padding-bottom: 0, o sublinhado tende a ser muito longe afastado do texto para uma boa aparência. Portanto, ainda não temos controle completo.
Uma solução que fornece precisão de pixel é usar o :afterpseudo elemento:
Isso não funcionará para o meu problema específico, mas é um truque fantástico. 1
11
Boa em torno do trabalho, mas isso não vai funcionar para âncoras que abranger várias linhas
Willster
@ última criança Este é melhor do que sublinhado, mas com texto embrulhar Isto não trabalho para cada linha
Nishantha
Um problema é que uma borda inferior e um sublinhado são duas coisas diferentes. Por exemplo, parte do texto deve se estender abaixo do sublinhado. Se você estilizar tags a como botões, não terá liberdade de usar a borda inferior como sublinhado.
Anders Lindén
10
Imagine dizer a alguém que é novo no desenvolvimento da Web, designer gráfico, usuário comum ou sua mãe que é necessário adicionar um espaço controlado entre o texto e o sublinhado e eles se perguntarão o que você está fazendo com sua vida. .
MarcGuay 26/05
79
Você pode usar isso text-underline-position: under
Obrigado! Se você está tentando criar um sublinhado tracejado e vê que ele é desenhado sem espaço entre a parte inferior do texto e a linha, isso corrige o problema.
Jonathan Cross
6
Esta é a resposta correta para navegadores modernos sem nenhuma solução alternativa.
Muito interessante. Ótimo texto explicativo. Obrigado!
Jordan Starrk
Suportado no Firefox a partir de 74, conforme o mesmo link.
GSerg
11
Entrar nos detalhes do estilo visual text-decoration:underlineé praticamente inútil, então você terá que fazer algum tipo de hack text-decoration:underlinee remover e substituí-lo por outra coisa até que uma versão mágica e distante do CSS nos dê mais controle .
Isso funcionou para mim:
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>
Se você tiver uma cor de plano de fundo sólida, tente adicionar uma fina text-strokeou text-shadowda mesma cor do plano de fundo para deixar os descendentes bonitos.
Infelizmente, o link eager.io não funciona mais. Você se lembra qual foi o truque para tornar os descendentes mais agradáveis?
Kano
1
@ Kano - Eu acredito que estava usando sombra de texto na mesma cor que um fundo sólido.
Squarecandy
Além disso, com a técnica acima, você pode definir a cor do sublinhado diferente do texto; portanto, às vezes, eu o deixo mais claro que o texto, o que torna as colisões com os descendentes menos um problema para facilitar a leitura.
Squarecandy
7
Sei que é uma pergunta antiga, mas a configuração de texto de linha única display: inline-blocke a configuração de heightfuncionaram bem para eu controlar a distância entre uma borda e o texto.
Eu não precisava definir a altura. Eu apenas o envolvi em outra div e, como eu queria que fosse centralizada, apenas defina o alinhamento do texto na div externa.
Guy Lowe
6
@ A resposta do último filho é uma ótima resposta!
No entanto, adicionar uma borda ao meu H2 produzia um sublinhado maior que o texto.
Se você estiver escrevendo seu CSS dinamicamente, ou se, como eu, tiver sorte e souber qual será o texto, faça o seguinte:
altere contentpara algo do tamanho certo (ou seja, o mesmo
texto) defina a cor da fonte como transparent(ou rgba(0,0,0,0))
para sublinhar <h2>Processing</h2>(por exemplo), altere o código do último filho para:
H2s são elementos de bloco que podem explicar por que o sublinhado foi maior que o texto. Talvez display: inline-blockconserte isso. Substituir o texto por contentparece um hack que pode quebrar de várias maneiras.
Você precisaria usar a propriedade largura da borda e a propriedade padding. Eu adicionei algumas animações para parecer mais legal:
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>
Você pode substituir o segundo 100%por algo mais pxou emajustar a posição vertical do sublinhado. Também é possível usar calcse você deseja adicionar preenchimento vertical, por exemplo:
Claro que você também pode criar seu próprio padrão png base64 com outra cor, altura e design, por exemplo: aqui: http://www.patternify.com/ - basta definir largura e altura quadradas em 2x1.
text-underline-position: under;
etext-decoration-skip: ink;
Observe que isso provavelmente não é compatível com os navegadores antigos.text-underline-offset
aqui: bugs.chromium.org/p/chromium/issues/…Respostas:
Não, mas você pode usar algo como
border-bottom: 1px solid #000
epadding-bottom: 3px
.Se você deseja a mesma cor do "sublinhado" (que no meu exemplo é uma borda), basta deixar de fora a declaração de cores, ou seja,
border-bottom-width: 1px
eborder-bottom-style: solid
.Para várias linhas, você pode agrupar textos de várias linhas em um espaço dentro do elemento. Por exemplo
<a href="#"><span>insert multiline texts here</span></a>
, basta adicionarborder-bottom
epadding
na<span>
- Demofonte
<a href="#"><span>insert multiline texts here</span></a>
, basta adicionar borda inferior e preenchimento no<span>
. jsfiddle.net/Aishaterr/vrpb2ey7/1Atualização 2019: o CSS Working Group publicou um rascunho para o nível 4 de decoração de texto que adicionaria uma nova propriedade
text-underline-offset
(além detext-decoration-thickness
) para permitir o controle sobre o posicionamento exato de um sublinhado. No momento da redação deste documento, é um rascunho em estágio inicial e não foi implementado por nenhum navegador, mas parece que eventualmente tornará a técnica abaixo obsoleta.Resposta original abaixo.
O problema com o uso
border-bottom
diretamente é que mesmo compadding-bottom: 0
, o sublinhado tende a ser muito longe afastado do texto para uma boa aparência. Portanto, ainda não temos controle completo.Uma solução que fornece precisão de pixel é usar o
:after
pseudo elemento:Alterando a
bottom
propriedade (números negativos são aceitáveis), você pode posicionar o sublinhado exatamente onde deseja.Um problema com esta técnica a ter em atenção é que ela se comporta um pouco esquisita com as bandagens.
fonte
Você pode usar isso
text-underline-position: under
Veja aqui para mais detalhes: https://css-tricks.com/almanac/properties/t/text-underline-position/
Veja também a compatibilidade do navegador .
fonte
Aqui está o que funciona bem para mim.
fonte
text-underline-position
não é suportada no Firefox como por developer.mozilla.org/en-US/docs/Web/CSS/...Entrar nos detalhes do estilo visual
text-decoration:underline
é praticamente inútil, então você terá que fazer algum tipo de hacktext-decoration:underline
e remover e substituí-lo por outra coisa até que uma versão mágica e distante do CSS nos dê mais controle .Isso funcionou para mim:
Aqui está uma versão com todas as propriedades proprietárias para alguma compatibilidade com versões anteriores:
Atualização: versão SASSY
Eu fiz um scss mixin para isso. Se você não usa o SASS, a versão regular acima ainda funciona muito bem ...
então use-o assim:
Atualização 2: Dica dos Descenders
Se você tiver uma cor de plano de fundo sólida, tente adicionar uma fina
text-stroke
outext-shadow
da mesma cor do plano de fundo para deixar os descendentes bonitos.Crédito
Esta é uma versão simplificada da técnica que encontrei originalmente em https://eager.io/app/smartunderline , mas o artigo foi retirado.
fonte
Sei que é uma pergunta antiga, mas a configuração de texto de linha única
display: inline-block
e a configuração deheight
funcionaram bem para eu controlar a distância entre uma borda e o texto.fonte
@ A resposta do último filho é uma ótima resposta!
No entanto, adicionar uma borda ao meu H2 produzia um sublinhado maior que o texto.
Se você estiver escrevendo seu CSS dinamicamente, ou se, como eu, tiver sorte e souber qual será o texto, faça o seguinte:
altere
content
para algo do tamanho certo (ou seja, o mesmotexto) defina a cor da fonte como
transparent
(ourgba(0,0,0,0)
)para sublinhar
<h2>Processing</h2>
(por exemplo), altere o código do último filho para:fonte
display: inline-block
conserte isso. Substituir o texto porcontent
parece um hack que pode quebrar de várias maneiras.Veja meu violino .
Você precisaria usar a propriedade largura da borda e a propriedade padding. Eu adicionei algumas animações para parecer mais legal:
fonte
Uma alternativa para textos ou links com várias linhas, você pode agrupar seus textos em um espaço dentro de um elemento de bloco.
você pode simplesmente adicionar borda inferior e preenchimento no
<span>
.Você pode se referir a esse violino. https://jsfiddle.net/Aishaterr/vrpb2ey7/2/
fonte
Se você quiser:
sublinhado, você pode usar a imagem de fundo com 1 pixel de altura
repeat-x
e100% 100%
posição:Você pode substituir o segundo
100%
por algo maispx
ouem
ajustar a posição vertical do sublinhado. Também é possível usarcalc
se você deseja adicionar preenchimento vertical, por exemplo:Claro que você também pode criar seu próprio padrão png base64 com outra cor, altura e design, por exemplo: aqui: http://www.patternify.com/ - basta definir largura e altura quadradas em 2x1.
Fonte de inspiração: http://alistapart.com/article/customunderlines
fonte
Se você estiver usando
text-decoration: underline;
, poderá adicionar espaço entre sublinhado e texto usandotext-underline-position: under;
Para saber mais As propriedades da posição de sublinhado de texto, você pode ver aqui
fonte
Consegui fazê-lo usando o U (Underline Tag)
fonte
Isto é o que eu uso:
html:
css:
fonte
O que eu uso:
fonte