行の高さに影響するHTMLの<sup />タグ、一貫性を保つにはどうすればよいですか?


130

<sup>複数行の<p>タグにタグがある場合、上付き文字が付いている行の行間隔は、行の高さに関係なく、他の行よりも大きくなり<p>ます。

明確にするために編集する<p>s がたくさんあるわけではなく、それぞれが1行にあります。<p>複数行に折り返すのに十分なコンテンツが含まれているシングルがあります。本文のどこかに(どこでも)<sup>またはがあります<sub>。これは、上または下に余分なスペースを追加することにより、その行の行の高さに影響します。上の行の高さを大きく設定し<p>ても、問題は変わりません。行の高さが増加しますが、余分なスペースは残ります。

どのようにして一貫性を持たせることができますか。つまり、すべての行にaが含まれているかどうかに関係なく、すべての行の間隔が同じ<sup>ですか?

ソリューションはクロスブラウザである必要があります(IE 6 +、FF、Safari、Opera、Chrome)

回答:


172

line-heightはそれを修正しますが、それをかなり大きくする必要があるかもしれません:私の設定では<sup>、それが干渉しなくなる前にline-heightを約1.8に増やす必要がありますが、これはフォントごとに異なります。

一貫した行の高さを取得するための1つの可能なアプローチは、デフォルトの代わりに独自の上付きスタイリングを設定することですvertical-align: super。これを使用topすると、ラインボックスに何も追加されませんが、フォントサイズをさらに縮小して、収まるようにする必要がある場合があります。

sup { vertical-align: top; font-size: 0.6em; }

もう1つのハックは、位置決めを使用して、ラインボックスに影響を与えずに少し上に移動することです。

sup { vertical-align: top; position: relative; top: -0.5em; }

もちろん、これには十分な行の高さがなければ、上の行にクラッシュする危険性があります。


1
垂直方向の配置で修正しました。ありがとうございます。300%以上の大きな行の高さでも、IE8、Chrome 3、FF 3.5では修正されません。まだ1〜2pxの違いがあります。
アンドリューBullockの

前述のように、行の高さがきつすぎる場合、これは常に機能するとは限りません。
Ric

5
@simPod:同じ状況vertical-align: bottom(それだけではそれほど多くは得られませんがtop)、そしてposition:relative;肯定的な状況top
ボビンス2012年

実際、私は{vertical-align:super}を好みます。これは、IE8で覚えている限り、行の高さによる表示の誤動作を防ぐためです。より良い代替案がある場合、私は頻繁にポジショニングを使用しないようにしようと思います。不注意な上部の配置は、プロジェクトの後半でカスケード問題を引き起こす可能性があります。
All Bits Equal

88
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;
}

トリックは、<sup>'の行の高さを0に設定することです。@ Scottは通常の方法を使用すると言いましたが、これは常に機能するとは限りません。

つまり、上付きテキストに対応するために周囲のテキストの行の高さを変更する必要はありません。IE7 +と他の主要なブラウザでこれをテストしました。


2
+1。前述のように、これは他のline-height属性との競合を防ぎます。line-heightもちろん、全体が小さく設定されている場合でも、前の線との交差が発生する可能性があります。
Chris Krycho 2013年

素晴らしい解決策、クロムの誤動作を防止します!まだ最も簡単な答え。
アクタウ2013

これが周囲のテキストのデフォルト以外の行の高さに影響することに気づきました。line-height: 100%この場合に使用します。
Matthias Hauert、2014年

これは完全に機能します。さらに、可能な値はline-height0、1、1em、100%です。これらはすべてChromeとFirefoxで確実に機能します。
ClarkeyBoy 2015

私のユースケースでもこの回答を好みます。この回答はGmailのメールで機能しますが、承認された回答は機能しません。stackoverflow.com/questions/21118072/...
Mshnik

7

私は同じ問題を抱えており、与えられた答えのどれもうまくいきませんでした。しかし、私は私のために働いた修正を含むgit commitを見つけました:

sup {
  font-size: 0.8em;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
  top: -0.5em;
}

2

簡単に保つ:

sup { vertical-align: text-top; }

[ 個々の書体に依存するフォントサイズ ]


2
sup, sub {
  vertical-align: baseline;
  position: relative;
  top: -0.4em;
}
sub { 
  top: 0.4em; 
}

3
OPがコードから学習できるように、コードに説明を入力してください。
EBH 2016

1

length縦位置での使用を好みます。これにより、要素のベースラインがその親のベースラインよりも上に、指定された長さに配置されます。

sup {
   font-size: .83em;
   vertical-align: 0.25em;
   line-height: 0;
}

1

<sup>タグが2行の間隔に影響を与える理由は、いくつかの要因に関係しています。要素は、行の高さ、通常のフォントに対する上付きのサイズ、上付きの行の高さ、そして最後に、上付きの一番下が何に揃っているか...設定した場合...行の高さ通常のテキストの「トンネルバンド」(つまり、私がそれと呼んでいるもの)に135%を挿入すると、通常のテキスト(100%)に35%の白が埋め込まれます。段落の場合、これは次のようになります。

 p
    {
            line-height: 135%;
    }

上付き文字をホワイトパッドしない場合(つまり、行の高さを0に保つ)、上付き文字には独自のテキストの幅しかありません。例70%)そして通常のテキストの中央(text-middle)に揃えると、問題を解消して上付き文字のように見える上付き文字を取得できます。ここにあります:

sup
{
    font-size: 70%;
    vertical-align: text-middle;
    line-height: 0;
}

1

この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>.

このソリューションの優れた点は、上付き文字と下付き文字の垂直位置を調整して、上または下の線との衝突を回避できることです...上記では、0.2em要件に合わせてを増減するだけです。


0

すべての行を高くするには、上付き文字のある行と同じようにするline-heightには、段落全体に大きな行を定義します

<p style='line-height:150%'>

またはあなたが望む効果を与えるどんな値でも。

奇妙に見えるかもしれませんが、それはあなたがあなたの要件を説明した方法です。

編集:1つだけが他よりも垂直方向のスペースを必要とするときにすべての行を同じように見せるには、段落内のすべての行をより高くする必要があります。

私が言ったように、これは魅力的な解決策ではないかもしれません。たぶん、下付き/上付きのテキストだけを小さくするスパンで何かを行うことができますが、それ以外には、あなたが望むものを達成できるとは思えません。しかし、私は他の誰かの解決策を見たいのですが。

EDIT2:ちなみに、私は含む小さなHTMLファイルを試しました

<html>
<head>
<title>line-height</title>
<style>
p {
    line-height : 1.5em;
    width : 25em;
}
</style>
</head>
<body>
<p>Mary had a little lamb, its fleece<sup>1</sup> was white as snow, 
and everywhere that Mary went, the lamb<sub>2</sub> was sure to go.
</p>
</body>
</html>

そして、FF3.0.14とKonquerorの行はすべて同じ高さです(他のブラウザーでは話せません)。


1
これは問題を解決しないと質問で言った。あなたが誤解した場合に備えて、説明を追加しました
Andrew Bullock

ええ、私は1行にもっとスペースが必要かどうかを理解しています。一貫性を保つために、他の行にスペースを追加する必要があるのは明らかです。私が言っているのは、行の高さはそれを修正しません、これはスペースを増やしますが、sup にはまだ余分なスペースがあります
Andrew Bullock

ブラウザーによって違いがあるかもしれません-結局のところ、あなたが受け入れた答えは「line-heightはそれを修正する」から始まりますが、どのブラウザーのbobinceが使用していたのかわかりません。
パビウム2009年

0

私はline-heightを使用しています。上付き文字は通常、上付きです。Safari、Chrome、Firefoxでうまく機能しますが、IEについてはわかりません。


0

特にニュースレターでこれを使用してください-

<sup style="font-size:9px; line-height:8px;">&reg;</sup>

0

私はMilingu Kiluのソリューションが好きですが、同じ精神で私は好みます

sup { vertical-align:top; line-height:100%; }

0

&sup1、&sup2などでうまくいく場合があります。上付きにするのはHTMLのトリックです


0

ここからの回答は、ファントムとメール埋め込みHTMLの両方で機能します。

Lorem ipsum <sup style="font-size: 8px; line-height: 0; vertical-align: 3px">&reg;</sup>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.