Wie kann ich mit hochgestellten Elementen eine konsistente Zeilenhöhe beibehalten?
Lesezeit: 5 Minuten
Andreas Bullock
Wenn ich eine habe <sup> -Element in einem mehrzeiligen Absatz hat die Zeile mit dem hochgestellten Zeichen einen größeren Zeilenabstand darüber als die anderen Zeilen, unabhängig davon, welche Zeilenhöhe ich dem Absatz hinzufüge.
Das bedeutet nicht, dass ich viele Absätze habe, die alle in einer einzigen Zeile stehen. Ich habe einen einzelnen Absatz mit genügend Inhalt, um einen Zeilenumbruch zu bewirken. Irgendwo (irgendwo) im Text kann ein sein <sup> oder <sub>. Dies wirkt sich auf die Zeilenhöhe für diese Zeile aus, indem oben/unten ein zusätzlicher Abstand hinzugefügt wird. Wenn ich eine größere Zeilenhöhe auf dem Absatz einstelle, ändert dies nichts an dem Problem. Die Zeilenhöhe wird erhöht, aber der zusätzliche Abstand bleibt bestehen.
Wie kann ich es konsistent machen – dh alle Zeilen haben den gleichen Abstand, ob sie a enthalten <sup> oder nicht?
Ihre Lösungen müssen browserübergreifend sein (IE 6+, Firefox, Safari, Opera, Chrome)
Zeilenhöhe behebt das Problem, aber Sie müssen es möglicherweise ziemlich groß machen: Bei meinen Einstellungen muss ich die Zeilenhöhe vor dem auf etwa 1,8 erhöhen <sup> stört es nicht mehr, aber das ist von Schriftart zu Schriftart unterschiedlich.
Ein möglicher Ansatz, um konsistente Zeilenhöhen zu erhalten, besteht darin, anstelle des Standardstils Ihren eigenen hochgestellten Stil festzulegen vertical-align: super. Wenn du benutzt top Es fügt dem Zeilenfeld nichts hinzu, aber Sie müssen die Schriftgröße möglicherweise weiter reduzieren, damit es passt:
sup { vertical-align: top; font-size: 0.6em; }
Ein weiterer Hack, den Sie versuchen könnten, besteht darin, die Positionierung zu verwenden, um sie ein wenig nach oben zu verschieben, ohne die Linienbox zu beeinflussen:
Das birgt natürlich die Gefahr, in die Linie darüber zu krachen, wenn Sie nicht genug Linienhöhe haben.
vertical-align hat es behoben, danke. Selbst eine massive Zeilenhöhe von 300 % und mehr behebt es nicht in IE8, Chrome 3 oder FF 3.5. Ich bekomme immer noch 1-2px Unterschied.
– Andreas Bullock
7. Oktober 2009 um 10:44 Uhr
Wie bereits erwähnt, funktioniert dies nicht immer, wenn die Zeilenhöhe zu eng ist.
– Rick
11. April 2012 um 9:40 Uhr
@simPod: Gleiche Situation, vertical-align: bottom (auch wenn das nicht so viel bringt top) und dann position:relative; mit einem positiven top.
– Bobin
21. Mai 2012 um 22:02 Uhr
Eigentlich würde ich {vertical-align: super} bevorzugen, weil es, soweit ich mich erinnere, einige Anzeigestörungen mit der Zeilenhöhe in IE8 verhindert. Ich würde versuchen, die Positionierung nicht zu oft zu verwenden, wenn es bessere Alternativen gibt. Eine unvorsichtige Top-Positionierung kann später im Projekt zu kaskadierenden Problemen führen.
– Alle Bits gleich
5. Dezember 2013 um 7:08 Uhr
Schriftgröße: 0.75em
– 1,21 Gigawatt
5. Juni 2022 um 2:47 Uhr
Rick
sup {
line-height: 0;
/* The following rules (or similar) likely come from browser
* style and are not needed
*/
font-size: 0.83em;
vertical-align: super;
}
Der Trick besteht darin, die <sup>‘s line-height auf 0. @Scott sagte, er solle normal verwenden, aber das funktioniert nicht immer.
Das bedeutet du muss sich nicht ändern die Zeilenhöhe des umgebenden Textes, um den hochgestellten Text aufzunehmen. Ich habe dies in IE7+ und den anderen gängigen Browsern getestet.
+1. Wie bereits erwähnt, verhindert dies Konflikte mit dem anderen line-height Attribute. Es kann immer noch zu Schnittpunkten mit der vorherigen Linie kommen, wenn die Gesamtheit line-height ist natürlich auf klein eingestellt.
– Chris Krycho
4. Mai 2013 um 19:47 Uhr
fantastische Lösung, lässt Chrom sich nicht mehr schlecht benehmen! Die einfachste Antwort noch.
– Aqtau
8. August 2013 um 9:44 Uhr
Ich habe gerade festgestellt, dass dies Auswirkungen auf nicht standardmäßige Zeilenhöhen des umgebenden Textes hat. Verwenden line-height: 100% in diesem Fall.
– Matthias Hauert
26. März 2014 um 15:16 Uhr
Das funktioniert perfekt. Zusätzlich mögliche Werte für line-height Ich habe 0, 1, 1em und 100% gefunden. All dies funktioniert sicherlich in Chrome und Firefox.
– ClarkeyBoy
27. Juli 2015 um 13:51 Uhr
Ich bevorzuge auch diese Antwort für meinen Anwendungsfall: Diese Antwort funktioniert bei E-Mails in Google Mail, die akzeptierte Antwort nicht. stackoverflow.com/questions/21118072/…
– Mschnik
12. April 2018 um 0:00 Uhr
Ich hatte das gleiche Problem und keine der gegebenen Antworten funktionierte. Aber ich fand eine Git Commit mit einem Fix, der bei mir funktioniert hat:
[font-size dependent on your individual type-face]
Ich bevorzuge die vorgeschlagene Lösung Hierwie beispielhaft dargestellt durch diese jsfiddle:
CSS:
sup, sub {
vertical-align: baseline;
position: relative;
top: -0.2em;
}
sub {
top: 0.2em;
}
HTML:
<span>The following equation is perhaps the most well known of all: </span><span id="box">E<sub>a</sub> = mc<sup>2</sup></span><span>. And it gives an opportunity to try out a superscript and even throw in a superfluous subscript! I'm sure that Einstein would be pleased.</span>.
Das Schöne an dieser Lösung ist, dass Sie die vertikale Positionierung der hoch- und tiefgestellten Zeichen anpassen können, um Konflikte mit der Linie darüber oder darunter zu vermeiden … im obigen Beispiel erhöhen oder verringern Sie einfach die 0.2em um Ihren Anforderungen gerecht zu werden.
Anup Puri
sup, sub {
vertical-align: baseline;
position: relative;
top: -0.4em;
}
sub {
top: 0.4em;
}
Opal
Der Grund, warum die <sup> Tag den Abstand zwischen zwei Zeilen beeinflusst, hat mit einer Reihe von Faktoren zu tun. Die Faktoren sind: Zeilenhöhe, Größe des hochgestellten Zeichens im Verhältnis zur normalen Schriftart, die Zeilenhöhe des hochgestellten Zeichens und nicht zuletzt, wie hoch das untere Ende des hochgestellten Zeichens ausgerichtet ist mit … Wenn Sie … die Zeilenhöhe festlegen von normalem Text in einem “Tunnelband” (so nenne ich es) von 135 %, dann wird normaler Text (die 100 %) mit 35 % mehr Weiß weiß aufgefüllt. Für einen Absatz sieht das so aus:
p
{
line-height: 135%;
}
Wenn Sie dann den hochgestellten Index nicht weiß auffüllen … (dh seine Zeilenhöhe auf 0 halten), hat der hochgestellte Index nur die Breite seines eigenen Textes … wenn Sie dann den hochgestellten Index auffordern, einen Prozentsatz der regulären Schriftart zu sein (z Beispiel 70 %) und Sie richten es mit der Mitte des regulären Textes aus (Textmitte), können Sie das Problem beseitigen und ein hochgestelltes Zeichen erhalten, das wie ein hochgestelltes Zeichen aussieht. Hier ist es: