4 に答える
説明:
ここでいくつかのことが起こっています。
あなたの例では、small
要素はインラインレベルの要素です。つまり、その垂直方向の配置はvertical-align
プロパティによって決定されます。
デフォルトvertical-align
値は ですbaseline
。これは、small
要素のベースラインが親ボックスのベースラインに揃えられることを意味します。
ボックスのベースラインを親ボックスのベースラインに合わせます。ボックスにベースラインがない場合は、マージンの下端を親のベースラインに合わせます。
line-height
次に、プロパティとその計算方法を検討する必要があります。また、リーディングとハーフリーディングも考慮する必要があります。line-height
CSS では、半行送りは、要素のとの差を見つけ、font-size
それを半分に割り、計算された量のスペースをテキストの上下に配置することによって決定されます。
説明のために、これを示す画像の例を次に示します ( W3.org から取得)。
はであり、要素にはline-height
が含まれているため、要素のテキストの上下にスペースが追加されていると判断できます。20px
small
font-size
13px
3.5px
small
(20px - 13px) / 2 = 3.5px
font-size
同様に、 ofを持つ周囲のテキスト ノードのハーフ リーディングを計算すると、周囲のテキストの上下に of のスペースが追加され16px
ていると判断できます。2px
(20px - 16px) / 2 = 2px
ここで、これらのハーフ リーディング スペースの計算をプロパティに関連付けると、要素vertical-align
のベースラインの下により多くのスペースが実際に追加されていることがわかります。これは、要素を含む要素の計算された高さが、他の要素の計算された高さよりも大きかっsmall
た理由を説明しています。p
small
p
そうは言っても、要素の が減少するにつれて、要素の計算された高さが増加し続けることが予想されp
ます。この点をさらに説明すると、要素の計算された高さは、要素のがに設定されている場合であることがわかります。font-size
small
p
23px
font-size
small
6px
p { line-height: 20px; }
small { font-size: 6px; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
考えられる回避策:
高さの違いは に追加された余分なスペースの結果であることがわかっているため、要素の値を にbaseline
変更できます。vertical-align
small
top
p { line-height: 20px; }
small { vertical-align: top; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
または、small
要素にline-height
of17px
を2px
指定すると、要素の上下にスペースが追加されます (これは、上で計算したように、周囲のテキストに追加されるスペースと同じ量です)。
// Surrounding text that is 16px:
(20px - 16px) / 2 = 2px
// Small element text that is 13px:
(17px - 13px) / 2 = 2px
p { line-height: 20px; }
small { line-height: 17px; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
ただし、それを計算してハードコーディングする必要はありません。つまり、相対を使用して単位line-height
を省略する必要があります。px
font-size
は で16px
あり、目的のline-height
値はであるため20px
、 を で割り、line-height
をfont-size
取得します1.25
。
p { line-height: 1.25; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
relative を使用せずline-height: 1.25
、引き続き を使用したい場合は、もちろん、要素の値を初期値である にline-height: 20px
リセットできます。small
line-height
normal
p { line-height: 20px; }
small { line-height: normal; }
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>
Josh Crozier が投稿した回答に代わる方法は、小さな行の高さをまとめてリセットすることです。
p { line-height: 20px }
small {line-height: initial;}
<p>some normal-sized text</p>
<p>some <small>small</small>-sized text</p>