Bearbeiten Sie die Linienstärke des CSS-Attributs "Unterstreichen"

117

Da Sie jeden Text in CSS wie folgt unterstreichen können:

H4 {text-decoration: underline;}

Wie können Sie dann auch die gezeichnete 'Linie' bearbeiten, die Farbe, die Sie auf der Linie erhalten, kann leicht als 'Farbe: Rot' angegeben werden, aber wie bearbeitet man die Höhe der Linie, dh die Dicke?

BSMP
quelle
10
h4 {border-bottom: 10px solid #000;}
Pranav 웃
@PranavKapoor - Schön! Das ist großartig, vielen Dank. Wie setze ich die Breite dieses Rahmens jetzt auf "Auto", damit nur das H4-Tag und nicht die gesamte Breite des enthaltenen Div begrenzt wird?
Sie können hinzufügen display:inline-block, um sicherzustellen, dass die Breite festgelegt ist. Es ist jedoch <h4>besser , ein Element im Inneren zu verwenden und das innere zu gestalten. Überprüfen Sie meine Antwort unten.
Pranav 웃
1
@PranavKapoor - wieder richtig! Du bist wie ein CSS-Ninja. Danke, Mann. Ich habe diese Antwort, die Sie im Kommentar gegeben haben, anstelle Ihrer unten angegebenen Antwort verwendet. Auf diese Weise finde ich es besser, da Sie Ihren Text nicht in ein anderes <u> -Tag einschließen müssen. Sie steuern dies vollständig von der CSS-Seite.
mögliches Duplikat der Dicke der Unterstreichung
Jukka K. Korpela

Antworten:

91

Hier ist eine Möglichkeit, dies zu erreichen:

HTML:

<h4>This is a heading</h4>

<h4><u>This is another heading</u></h4>

CSS:

 u {
    text-decoration: none;
    border-bottom: 10px solid black;
  }​

Hier ist ein Beispiel: http://jsfiddle.net/AQ9rL/

Pranav 웃
quelle
91
... oder mehrere Textzeilen
cfx
In diesem Fall müssen Sie den Text aus jeder Zeile vor und nach dem Zeilenumbruch mit <span>einschließen und den unteren Rand dort anwenden. Dies ist eine Problemumgehung, die in nicht fest codierten Szenarien schmerzhaft sein kann.
Fabián
@cfx wenn du kannst, kannst du das immer noch mit machen display: inline;(aber es wäre dann kein Block mehr, könnte aber jemandem helfen)
jave.web
Du hast meinen Tag gerettet. DANKE
Tessaracter
Dadurch ändert sich das Layout. Ein Rand zwingt andere Elemente, sich zu bewegen, im Gegensatz zu einem Unterstrich, der dies nicht tut.
Joel Karunungan
51

Vor kurzem musste ich mich mit FF befassen, dessen Unterstreichungen zu dick und zu weit vom Text in FF entfernt waren, und fand einen besseren Weg, um mit zwei Kastenschatten damit umzugehen:

.custom-underline{
    box-shadow: inset 0 0px 0 white, inset 0 -1px 0 black
}

Der erste Schatten wird auf den zweiten gelegt, und so können Sie den zweiten steuern, indem Sie den 'px'-Wert von beiden variieren.

Plus: verschiedene Farben, Dicke und Unterstreichungsposition

Minus: Kann nicht auf nicht festen Hintergründen verwendet werden

Hier habe ich einige Beispiele gemacht: http://jsfiddle.net/xsL6rktx/

anvar
quelle
4
Wie ordentlich. Ein Vorteil (zumindest für mich) in Bezug auf den unteren Rand ist, dass die "Liniendicke" zum Text hin zunimmt, wodurch die Lücke zwischen Text und Linie weniger groß wird.
Victor Häggqvist
Dabei erhalte ich zusätzlich zur Unterstreichung vertikale Linien mit einem halben Pixel.
yeahdixon
Scheint, als wäre es an einem Punkt eine perfekte Antwort gewesen, aber ich bekomme sehr, sehr dünne vertikale Linien auf jeder Seite des Elements in Chrome 66
kleiner winziger Mann
Anstelle von Weiß würde die Verwendung von transparent bei jedem Hintergrund funktionieren.
Jay Dadhania
Dies ist die beste Antwort. Es ist nicht erforderlich, die HTML- und reine CSS-Lösung zu ändern, wodurch Positionen wie die Rahmen nicht geändert werden.
Joel Karunungan
15

Sehr einfach ... außerhalb des "span" -Elements mit kleiner Schrift und Unterstreichung und innerhalb des "font" -Elements mit größerer Schriftgröße.

<span style="font-size:1em;text-decoration:underline;">
 <span style="font-size:1.5em;">
   Text with big font size and thin underline
 </span>
</span>

user4378029
quelle
8
Wenn Sie den veralteten ersetzen <font>Tag mit einem spanTag, würde dies die einzige Antwort sein , dass die Frage tatsächlich anspricht.
Matto
11

Eine andere Möglichkeit, dies zu tun, ist die Verwendung von ": after" (Pseudoelement) für das Element, das Sie unterstreichen möchten.

h2{
  position:relative;
  display:inline-block;
  font-weight:700;
  font-family:arial,sans-serif;
  text-transform:uppercase;
  font-size:3em;
}
h2:after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  right:0;
  margin:auto;
  background:#000;
  height:1px;

}
Patrick
quelle
10

Es ist text-decoration-thicknessderzeit Teil der CSS Text Dekoration des Moduls 4 . Es befindet sich in der Phase "Editor's Draft" - es ist also in Arbeit und kann sich ändern. Ab Januar 2020 wird es nur in Firefox und Safari unterstützt .

Die CSS-Eigenschaft Textdekorationsdicke legt die Dicke oder Breite der Dekorationslinie fest, die für Text in einem Element verwendet wird, z. B. eine Linie durch, eine Unterstreichung oder eine Überstreichung.

a {
  text-decoration-thickness: 2px;
}

Codepen: https://codepen.io/mrotaru/pen/yLyLOgr (nur Firefox)


Es gibt auch einen text-decoration-colorTeil des CSS Text Decoration Module Level 3 . Dies ist ausgereifter (Kandidatenempfehlung) und wird in den meisten gängigen Browsern unterstützt (Ausnahmen sind Edge und IE). Natürlich kann es nicht verwendet werden, um die Dicke der Linie zu ändern, aber es kann verwendet werden, um eine "gedämpfte" Unterstreichung zu erzielen (auch im Codepen gezeigt).

Mihai Rotaru
quelle
Wenn der Benutzer Firefox verwendet, kann auf alle Textdekorationselemente zugegriffen werden text-decoration. Ich weiß nicht, ob dies in allen enthalten sein soll, aber wenn ja, wird es in Zukunft sehr schön sein. EDIT: Es ist ein Arbeitsentwurf, um dies zu unterstützentext-decoration .
Stormblessed
9

Ich werde etwas Einfaches tun wie:

.thickness-underline {
    display: inline-block;
    text-decoration: none;
    border-bottom: 1px solid black;
    margin-bottom: -1px;
}
  • Sie können line-heightoder verwenden padding-bottom, um Besitz zwischen ihnen zu setzen
  • Sie können display: inlinein einigen Fällen verwenden

Demo: http://jsfiddle.net/5580pqe8/

CSS unterstreichen

l2aelba
quelle
Leider kann Margin-Bottom keine negativen Werte erhalten.
Soleshoe
5
@soleshoe Das ist falsch, Sie können einen negativen Rand am unteren Rand eines Elements haben.
Alex
7

Mit background-imagekann auch eine Unterstreichung erstellt werden.

Es muss über nach unten verschoben background-positionund horizontal wiederholt werden. Die Linienbreite kann mit bis zu einem gewissen Grad angepasst werden background-size(der Hintergrund ist auf das Inhaltsfeld des Elements beschränkt).

.underline
{
    --color: green;
    font-size: 40px;
    background-image: linear-gradient(var(--color) 0%, var(--color) 100%);
    background-repeat: repeat-x;
    background-position: 0 1.05em;
    background-size: 2px 5px;
}
<span class="underline">
     Underlined<br/>
     Text
</span>

HB
quelle
5

a {
  text-decoration: none;
  position: relative;
}

a.underline {
  text-decoration: underline;
}

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
<h1><a href="#" class="underline">Default: some text alpha gamma<br>the quick brown fox</a></h1>
<p>Working:</p>
<h1><a href="#" class="shadow">Using Shadow: some text alpha gamma<br>the quick brown fox<br>even works with<br>multiple lines</a></h1>
<br>

Endgültige Lösung: http://codepen.io/vikrant-icd/pen/gwNqoM

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
viCky
quelle
1
Problem ist unterstrichen wird von verschiedenen Browsern unterschiedlich gerendert.
Joel Karunungan
2

Meine Lösung: https://codepen.io/SOLESHOE/pen/QqJXYj

{
    display: inline-block;
    border-bottom: 1px solid;
    padding-bottom: 0;
    line-height: 70%;
}

Sie können die Unterstreichungsposition mit dem Wert für die Zeilenhöhe, die Dicke der Unterstreichung und den Stil mit dem unteren Rand anpassen.

Achten Sie darauf, das Standard-Unterstreichungsverhalten zu deaktivieren, wenn Sie eine href unterstreichen möchten.

Soleshoe
quelle
2

Dank der Magie der neuen CSS-Optionen ist dies jetzt nativ möglich:

a {
  text-decoration: underline;
  text-decoration-thickness: 5px;
  text-decoration-skip-ink: auto;
  text-underline-offset: 3px;
}

Bisher ist die Unterstützung relativ schlecht . Aber es wird irgendwann in anderen Browsern als ff landen.

KSPR
quelle