HTML 4.01 Transitional doctype により、ブラウザーでほぼ標準モードが発生します。HTML5 doctype により、標準モードが発生します。
この Microsoft の記事では、違いについて説明しています: http://msdn.microsoft.com/en-us/library/ff405794%28v=vs.85%29。
ほとんどの標準モードの場合は次のようになります。
次のいずれかが true の場合にのみ、インライン要素が行の高さに寄与します。
要素の場合:
改行は、行ボックスの唯一の内容でない限り、この定義ではテキスト文字とは見なされないことに注意してください。その場合、行ボックスの高さは、指定された行の高さに関係なく、行の最上部のインライン ボックスの上部と最下部のインライン ボックスの下部のままになります。
img 要素がテーブル セルの唯一のコンテンツである場合、セル ライン ボックスの高さのライン ボックスの高さはゼロに調整されます。
あなたの場合、最も重要なのは、画像を含む行の高さの計算に、strut
行の高さを要素の line-height 値まで増やす架空のインライン要素が含まれていないことを意味しh1
ます。
このjsfiddleは、実際のテキスト コンテンツがストラットの代わりになっている実際のspan
要素を示し
ており、レイアウトが HTML 4.01 Transitional Doctype と HTML5 Doctype の両方で同じであることがわかります。
このjsfiddleは同じアイデアを示していますが、今回は支柱が次のように CSS を使用して作成されています。
h1:before {
content: '\A0';
}
khurram の回答の場合、彼が行っているのは、行の高さを減らすことです。h1
したがって、標準モードでは、ストラットの高さが画像の高さよりも低くなります。これは、線全体の高さが、ストラットの高さではなく、画像の高さによって決定されることを意味します。画像の高さは、標準モードとほぼ標準モードの両方で同じであるため、モード間のレンダリングに違いは見られません。
画像の高さ (25px) に一致するように行の高さをh1
設定しても機能しないが、12px に設定すると機能する理由については、ストラットが上部と下部だけでなく、のベースラインも確立するためです。ライン。ベースラインは、通常約 3px の通常サイズのテキストに対して、テキストディセンダーを可能にするために、下部より少し上にあります。デフォルトでは、画像はベースライン上にあるため、ベースラインと下部の間のギャップが画像の高さに追加され、線の高さが確立されます。
img { vertical-align: top }
これは、このjsfiddleに示されているを使用して、画像をベースラインから移動することで解決できます。ここで h1 line-height をいじってみると、25px を超える値では行間の間隔が増加することがわかりますが、25px 以下の値ではその間隔は変更されません。