Odległość zależy od użytej czcionki. Wypróbuj czcionki internetowe.
Aleksiej Danchenkov
1
CSS3 ma obecnie wiele nowych właściwości do dekorowania tekstu. Sprawdź alligator.io/css/text-decoration Przykład: text-underline-position: under;i text-decoration-skip: ink;pamiętaj, że prawdopodobnie nie jest to wstecznie kompatybilne ze starszymi przeglądarkami.
Nie, ale możesz iść z czymś takim jak border-bottom: 1px solid #000i padding-bottom: 3px.
Jeśli chcesz tego samego koloru „underline” (co w moim przykładzie jest obramowanie), po prostu opuścić deklarację koloru, to border-bottom-width: 1pxi border-bottom-style: solid.
W przypadku multilinii możesz zawinąć tekst multilinii w rozpiętość wewnątrz elementu. Np <a href="#"><span>insert multiline texts here</span></a>wtedy wystarczy dodać border-bottomi paddingna <span>- Demo
Moim jedynym problemem związanym z tą sztuczką jest użycie linii o wysokości równej wysokości div, a następnie wyrównywanie w pionie: środek; aby go wyśrodkować, nie mogę użyć tej sztuczki, ponieważ wtedy podkreślenie kończy się poniżej div.
deweydb
@deweydb: Co powiesz na dodanie dolnego wypełnienia do div pojemnika? jsfiddle.net/dYfjc/1
chelmertz
+1 Nie wiedziałem o pozostawieniu właściwości color, aby odziedziczyć kolor czcionki - to pozwoli zaoszczędzić dużo potu i łez w przyszłości!
Larry,
9
Nie jestem pewien, dlaczego ta odpowiedź ma tak wiele pozytywnych opinii. Nie działa to całkowicie z tekstami wielowierszowymi.
3
W przypadku multilinii możesz zawinąć tekst multilinii w rozpiętość wewnątrz elementu. Np. Po <a href="#"><span>insert multiline texts here</span></a>prostu dodaj obramowanie do dołu i dopełnienie <span>. jsfiddle.net/Aishaterr/vrpb2ey7/1
Daniel Hernandez
133
Aktualizacja 2019: Grupa robocza CSS opublikowała wersję roboczą dekoracji tekstu na poziomie 4, która dodałaby nową właściwość text-underline-offset(a także text-decoration-thickness), aby umożliwić kontrolę nad dokładnym umieszczeniem podkreślenia. W chwili pisania tego tekstu jest to szkic na wczesnym etapie i nie został zaimplementowany przez żadną przeglądarkę, ale wygląda na to, że ostatecznie sprawi, że technika poniżej stanie się przestarzała.
Oryginalna odpowiedź poniżej.
Problem z wykorzystaniem border-bottombezpośrednio jest to, że nawet w przypadku padding-bottom: 0, podkreślenia wydaje się być zbyt daleko z dala od tekstu wyglądać dobrze. Więc nadal nie mamy pełnej kontroli.
Jednym z rozwiązań zapewniających dokładność pikseli jest użycie :afterpseudoelementu:
To nie zadziała w przypadku mojego konkretnego problemu, ale to fantastyczna sztuczka. +1
11
Dobra robota, ale to nie zadziała dla kotwic obejmujących wiele linii
Willster
@ last-child Ten jest lepszy niż podkreślenie, ale z zawijaniem tekstu nie zadziała dla każdej linii
Nishantha 18.04.15
Jednym z problemów jest to, że granica i podkreślenie to dwie różne rzeczy. Na przykład, jeśli część tekstu powinna rozciągać się poniżej podkreślenia. Jeśli stylizujesz a-tagi jako przyciski, nie masz żadnej swobody używania obramowania u dołu jako podkreślenia.
Anders Lindén,
10
Wyobraź sobie, że mówisz komuś, kto nie zna się na tworzeniu stron internetowych, projektantowi graficznemu, przeciętnemu użytkownikowi lub twojej mamie, że jest to konieczne, aby dodać kontrolowaną przestrzeń między tekstem a podkreśleniem, a on będzie się zastanawiać, co robisz ze swoim życiem .
Dzięki! Jeśli próbujesz wykonać podkreślenie przerywane i zobaczysz, że jest rysowany bez spacji między dolną częścią tekstu a linią, oznacza to, że problem został rozwiązany.
Jonathan Cross
6
To poprawna odpowiedź dla nowoczesnych przeglądarek bez żadnego obejścia.
Bardzo interesujące. Świetne objaśnienie. Dziękuję Ci!
Jordan Starrk
Obsługiwane w przeglądarce Firefox od 74, zgodnie z tym samym linkiem.
GSerg
11
Wnikanie w szczegóły stylu wizualnego text-decoration:underlinejest dość daremne, więc będziesz musiał przejść przez jakiś hack usuwający text-decoration:underlinei zamieniając go na coś innego, dopóki magiczna, daleko odległa wersja CSS da nam większą kontrolę .
To działało dla mnie:
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>
Niestety link eager.io już nie działa. Czy pamiętasz, co było włamaniem, aby zejście wyglądało ładniej?
kano
1
@Kano - Wydaje mi się, że używał cienia tekstowego w tym samym kolorze co jednolite tło.
squarecandy
Ponadto dzięki powyższej technice możesz ustawić kolor podkreślenia inny niż tekst, więc czasami ustawiam go jako jaśniejszy niż tekst, co sprawia, że kolizje z zstępującymi nie stanowią większego problemu dla czytelności.
squarecandy
7
Wiem, że to stare pytanie, ale ustawienie pojedynczego wiersza tekstu, display: inline-blocka następnie ustawienie heightdobrze działało dla mnie, aby kontrolować odległość między ramką a tekstem.
Nie musiałem ustawiać wysokości. Właśnie owinąłem go w inny div i ponieważ chciałem, aby był wyśrodkowany, po prostu ustawiłem wyrównanie tekstu na out div.
Guy Lowe,
6
Odpowiedź ostatniego dziecka jest świetną odpowiedzią!
Jednak dodanie granicy do mojego H2 spowodowało podkreślenie dłuższe niż tekst.
Jeśli dynamicznie piszesz CSS lub jeśli podobnie jak ja masz szczęście i wiesz, jaki będzie tekst, możesz wykonać następujące czynności:
zmień na contentcoś o odpowiedniej długości (tj. takiej samej
tekst) ustaw kolor czcionki na transparent(lub rgba(0,0,0,0))
aby podkreślić <h2>Processing</h2>(na przykład), zmień kod ostatniego dziecka na:
H2s to elementy blokowe, które mogą wyjaśniać, dlaczego podkreślenie było dłuższe niż tekst. Może display: inline-blockto naprawi. Zastąpienie tekstu tekstem contentprzypomina włamanie, które może przerwać się na wiele sposobów.
Konieczne będzie użycie właściwości width border i padding. Dodałem animację, aby wyglądała fajniej:
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>
Możesz zamienić drugi 100%na inny pxlub emdopasować pozycję podkreślenia w pionie. Możesz także użyć, calcjeśli chcesz dodać pionowe wypełnienie, np .:
Oczywiście możesz również stworzyć własny wzór base64 png z innym kolorem, wysokością i wzorem, np. Tutaj: http://www.patternify.com/ - po prostu ustaw szerokość i wysokość kwadratu na 2x1.
text-underline-position: under;
itext-decoration-skip: ink;
pamiętaj, że prawdopodobnie nie jest to wstecznie kompatybilne ze starszymi przeglądarkami.text-underline-offset
tutaj: bugs.chromium.org/p/chromium/issues/…Odpowiedzi:
Nie, ale możesz iść z czymś takim jak
border-bottom: 1px solid #000
ipadding-bottom: 3px
.Jeśli chcesz tego samego koloru „underline” (co w moim przykładzie jest obramowanie), po prostu opuścić deklarację koloru, to
border-bottom-width: 1px
iborder-bottom-style: solid
.W przypadku multilinii możesz zawinąć tekst multilinii w rozpiętość wewnątrz elementu. Np
<a href="#"><span>insert multiline texts here</span></a>
wtedy wystarczy dodaćborder-bottom
ipadding
na<span>
- Demoźródło
<a href="#"><span>insert multiline texts here</span></a>
prostu dodaj obramowanie do dołu i dopełnienie<span>
. jsfiddle.net/Aishaterr/vrpb2ey7/1Aktualizacja 2019: Grupa robocza CSS opublikowała wersję roboczą dekoracji tekstu na poziomie 4, która dodałaby nową właściwość
text-underline-offset
(a takżetext-decoration-thickness
), aby umożliwić kontrolę nad dokładnym umieszczeniem podkreślenia. W chwili pisania tego tekstu jest to szkic na wczesnym etapie i nie został zaimplementowany przez żadną przeglądarkę, ale wygląda na to, że ostatecznie sprawi, że technika poniżej stanie się przestarzała.Oryginalna odpowiedź poniżej.
Problem z wykorzystaniem
border-bottom
bezpośrednio jest to, że nawet w przypadkupadding-bottom: 0
, podkreślenia wydaje się być zbyt daleko z dala od tekstu wyglądać dobrze. Więc nadal nie mamy pełnej kontroli.Jednym z rozwiązań zapewniających dokładność pikseli jest użycie
:after
pseudoelementu:Zmieniając
bottom
właściwość (liczby ujemne są w porządku), możesz ustawić podkreślenie dokładnie tam, gdzie chcesz.Jednym z problemów z tą techniką, na którą należy uważać, jest to, że zachowuje się trochę dziwnie w przypadku zawijania linii.
źródło
Możesz tego użyć
text-underline-position: under
Zobacz więcej szczegółów: https://css-tricks.com/almanac/properties/t/text-underline-position/
Zobacz także zgodność przeglądarki .
źródło
Oto, co działa dla mnie dobrze.
źródło
text-underline-position
nie jest obsługiwany w przeglądarce Firefox zgodnie z developer.mozilla.org/en-US/docs/Web/CSS/…Wnikanie w szczegóły stylu wizualnego
text-decoration:underline
jest dość daremne, więc będziesz musiał przejść przez jakiś hack usuwającytext-decoration:underline
i zamieniając go na coś innego, dopóki magiczna, daleko odległa wersja CSS da nam większą kontrolę .To działało dla mnie:
Oto wersja ze wszystkimi zastrzeżonymi właściwościami dla niektórych kompatybilności wstecznej:
Aktualizacja: wersja SASSY
Zrobiłem dla tego mixin scss. Jeśli nie używasz SASS, powyższa zwykła wersja nadal działa świetnie ...
następnie użyj go w następujący sposób:
Aktualizacja 2: Wskazówka Descenders
Jeśli masz jednolity kolor tła, spróbuj dodać cienki
text-stroke
lubtext-shadow
w tym samym kolorze co tło, aby zejście wyglądało ładnie.Kredyt
Jest to uproszczona wersja techniki, którą pierwotnie znalazłem na https://eager.io/app/smartunderline , ale od tego czasu artykuł został usunięty.
źródło
Wiem, że to stare pytanie, ale ustawienie pojedynczego wiersza tekstu,
display: inline-block
a następnie ustawienieheight
dobrze działało dla mnie, aby kontrolować odległość między ramką a tekstem.źródło
Odpowiedź ostatniego dziecka jest świetną odpowiedzią!
Jednak dodanie granicy do mojego H2 spowodowało podkreślenie dłuższe niż tekst.
Jeśli dynamicznie piszesz CSS lub jeśli podobnie jak ja masz szczęście i wiesz, jaki będzie tekst, możesz wykonać następujące czynności:
zmień na
content
coś o odpowiedniej długości (tj. takiej samejtekst) ustaw kolor czcionki na
transparent
(lubrgba(0,0,0,0)
)aby podkreślić
<h2>Processing</h2>
(na przykład), zmień kod ostatniego dziecka na:źródło
display: inline-block
to naprawi. Zastąpienie tekstu tekstemcontent
przypomina włamanie, które może przerwać się na wiele sposobów.Zobacz moje skrzypce .
Konieczne będzie użycie właściwości width border i padding. Dodałem animację, aby wyglądała fajniej:
źródło
Alternatywą dla tekstów wielowierszowych lub linków jest możliwość zawinięcia tekstu w element wewnątrz bloku.
możesz po prostu dodać obramowanie do dołu i dopełnienie
<span>
.Możesz odwołać się do tego skrzypka. https://jsfiddle.net/Aishaterr/vrpb2ey7/2/
źródło
Jeśli chcesz:
Podkreślenie, można użyć 1 pikselach wysokość obrazu tła z
repeat-x
i100% 100%
stanowisko:Możesz zamienić drugi
100%
na innypx
lubem
dopasować pozycję podkreślenia w pionie. Możesz także użyć,calc
jeśli chcesz dodać pionowe wypełnienie, np .:Oczywiście możesz również stworzyć własny wzór base64 png z innym kolorem, wysokością i wzorem, np. Tutaj: http://www.patternify.com/ - po prostu ustaw szerokość i wysokość kwadratu na 2x1.
Źródło inspiracji: http://alistapart.com/article/customunderlines
źródło
Jeśli używasz
text-decoration: underline;
, możesz dodać spację między podkreśleniem a tekstem za pomocątext-underline-position: under;
Aby uzyskać więcej informacji o właściwościach podkreślenia tekstu, możesz zajrzeć tutaj
źródło
Udało mi się to zrobić za pomocą U (tag podkreślenia)
źródło
Oto, czego używam:
HTML:
css:
źródło
Czego używam:
źródło