行の高さと垂直方向の配置に関する包括的な理解

行の高さと垂直方向の配置に関する包括的な理解
前の単語

line-height、font-size、vertical-align は、インライン要素のレイアウトを設定するための重要な属性です。これら 3 つのプロパティは相互に依存しています。行間の距離を変更したり、垂直方向の配置を設定したりするには、これらの連携が必要です。 font-size の関連内容については、CSS フォントで詳しく紹介されています。この記事では、主に line-height と vertical-align を紹介します。

行の高さ

意味

行の高さ 行の高さは、テキスト行のベースライン間の距離を指します。実際には、line-height はインライン要素とその他のインライン コンテンツにのみ影響し、ブロック レベル要素には直接影響しません。ブロック レベル要素に line-height を設定することもできますが、この値はブロック レベル要素のインライン コンテンツに適用された場合にのみ効果があります。ブロックレベル要素で line-height を宣言すると、そのブロックレベル要素のコンテンツの最小の行ボックスの高さが設定されます。

値: <長さ> | <パーセンテージ> | <数値> | 通常 | 継承

初期値: 通常

適用対象: すべての要素

継承: はい

パーセンテージ: 要素のフォントサイズに対する相対値

用語

line-height を深く理解するには、行ボックスの構築に関する一般的な用語を理解する必要があります。

コンテンツエリア

インラインの非置換要素または匿名テキストの一部の場合、font-size と font-family によってコンテンツ領域の高さが決まります。 Songtiの場合、インライン要素のフォントサイズが15pxの場合、コンテンツ領域の高さは15pxになります。他のフォントの場合、コンテンツ領域の高さはフォントサイズと等しくありません。

インラインボックス

コンテンツ領域と行間隔を足したものがインライン ボックスになります。インラインの非置換要素のフォント サイズが 15 ピクセルで、行の高さが 21 ピクセルの場合、差は 6 ピクセルになります。ユーザーエージェントはこれらの 6 ピクセルを半分に分割し、その半分をコンテンツ領域の上部と下部に適用して、インライン ボックスを作成します。

行の高さがフォントサイズより小さい場合、インラインボックスは実際にはコンテンツ領域より小さくなります。

ラインボックス

行ボックスは、行内の最も高いインライン ボックスの上部から最も低いインライン ボックスの下部までの距離として定義され、各行ボックスの上部は前の行の行ボックスの下部に接します。

ボックスのプロパティ

パディング、マージン、境界線は行ボックスの高さには影響しません。つまり、行の高さには影響しません。

インライン要素の境界は、line-heightではなくfont-sizeによって制御されます。

インラインの非置換要素の上部と下部には余白は適用されません。

margin-left、padding-left、border-leftは要素の先頭に適用され、margin-right、padding-right、border-rightは要素の末尾に適用されます。

要素を置き換える

インライン置換要素には、要素が垂直に揃えられたときに正しく配置されるように、行の高さの値が必要です。 vertical-align のパーセンテージ値は、要素の行の高さを基準に計算されるためです。垂直方向の配置では、画像自体の高さは重要ではなく、line-heightの値の方が重要です。

デフォルトでは、インライン置換要素はベースライン上に配置されます。置き換えられた要素に下部パディング、マージン、または境界線を追加すると、コンテンツ領域が上に移動します。置換された要素のベースラインは、通常フローの最後の行ボックスのベースラインになります。ただし、置換要素が空であるか、そのオーバーフロー属性値が表示されていない場合は、ベースラインはマージンの下端になります。

垂直方向の配置

意味

vertical-align は垂直方向の配置を設定するために使用されます。垂直方向に揃えられたすべての要素は行の高さに影響します。

値: baseline | sub | super | top | text-top | middle | bottom | text-bottom | <length> | <percentage> | inherit

初期値: ベースライン

適用対象: インライン要素、置換要素、表のセル

継承: いいえ

パーセンテージ: 要素の行の高さに対する相対値

[注意] IE7ブラウザのvertical-alignのパーセンテージ値は小数行の高さをサポートしておらず、baseline、middle、text-bottomなどの値を使用した場合の表示効果は標準ブラウザとは異なります。一般的な解決策は、インライン要素を表示するように設定することです:inline-block

CSSコードコンテンツをクリップボードにコピー
  1. vertical-align : baselineベースライン(要素のベースラインは親要素のベースラインに揃えられます)
  2. vertical-align : sub (要素のベースラインを親要素の適切な下付き位置まで下げます)
  3. vertical-align : super (要素のベースラインを親要素の適切な上付き文字の位置まで上げます)
  4. vertical-align : bottom bottom (整列された子要素の下端を行ボックスの下端に揃えます)
  5. vertical-align : text-bottom (要素の下部を親要素のコンテンツ領域の下部に揃えます)
  6. vertical-align : top (整列された子要素の上端を行ボックスの上端に揃えます)
  7. vertical-align : text-top (要素の上部を親要素のコンテンツ領域の上部に揃えます)
  8. vertical-align : middle (要素の中心点は、親要素のベースラインに親要素の文字 X の高さの 1/2 を加えた位置に揃えられます)
  9. vertical-align : (+-n)px (要素はベースラインに対して上下に npx オフセットされます)
  10. vertical-align :x% (要素の行の高さの値に対する相対値)
  11. vertical-align :inherit (親要素からvertical-alignプロパティの値を継承します)

[注] <sub>と<sup>はデフォルトでvertical-align:sub/superスタイルを持ちます。

インラインブロックの下の隙間

インラインブロック要素がブロックレベル要素に隙間を残す理由は、画像のデフォルトの垂直配置がベースライン配置であるためです(ベースライン配置は、原則として、画像の下端を匿名テキストの大文字Xの下端に揃えます)。匿名テキストには行の高さがあり、Xの下端は行ボックスから少し離れており、この距離が画像によって残される隙間です。

したがって、この問題にはいくつかの解決策があります。

[1]表示:ブロック

垂直配置は置換要素とインライン要素にのみ適用できるため、ブロックレベル要素に変更すると垂直配置が無効になります。

[2] 親要素の行の高さ: 0

これにより、匿名テキストと行ボックス間の距離がゼロになります。

[3]垂直位置合わせ: 上/中央/下

応用

【1】1行のテキストを水平方向と垂直方向に中央揃えにする

XML/HTML コードコンテンツをクリップボードにコピー
  1. div{
  2. 行の高さ: 100px;
  3. 幅: 100ピクセル;
  4. テキスト配置: 中央;
  5. 境界線: 1px 黒一色;
  6. }
  7.   
  8. <div>テストテキスト</div>   

[注意] テキスト行を垂直方向に中央揃えするには、高さと行の高さを同じ値に設定する必要があるとよく言われますが、実際には高さを設定する必要はありません。行の高さを設定するだけで、行内のテキストが垂直方向に中央揃えされます。

【2】画像はほぼ垂直方向に中央に配置されています

XML/HTML コードコンテンツをクリップボードにコピー

  1. div{
  2. 行の高さ: 200px;
  3. テキスト配置: 中央;
  4. }
  5. 画像{
  6. 垂直位置合わせ: 中央;
  7. }
  8. <div>   
  9.      <画像 ソース= "#"  代替= "#" >   
  10. </div>   

文字 X が em ボックス内で垂直方向に中央揃えされておらず、異なるフォントでの文字 X の高さの位置が一貫していないためです。フォントサイズが大きいほど、この違いはより顕著になります

[注意] IE7 ブラウザでインライン要素を含むブロックレベル要素を記述する場合は、1 行で記述するのではなく、改行して記述する必要があります。


コードをコピー
コードは次のとおりです。
//正しい 1<div> <img src="#" alt="#"></div>//正しい 2<div><img src="#" alt="#"><!-- ここで改行またはスペースが必要です--></div>//エラー<div><img src="#" alt="#"></div>

【3】画像が完全に垂直に中央揃えされている

方法 2 に基づいて、ブロックレベル要素のフォント サイズを 0 に設定すると、画像を完全に垂直方向に中央揃えにすることができます。


コードをコピー
コードは次のとおりです。
div{ 行の高さ: 200px; テキストの位置揃え: 中央; フォントサイズ: 0;}img{ 垂直位置揃え: 中央;}

コードをコピー
コードは次のとおりです。
<div> <img src="#" alt="#"></div>

【4】複数行のテキストを水平・垂直に中央揃えする

フォント サイズを 0 に設定する方法 3 の制限により、テキストをブロック レベル要素内に配置することはできません。方法 4 は、主に新しい要素を追加することで垂直方向の中央揃え効果を実現します。この方法は、画像を水平方向と垂直方向に中央揃えするためにも使用できます。

XML/HTML コードコンテンツをクリップボードにコピー
  1. div{
  2. 高さ: 100px;
  3. 幅: 200ピクセル;
  4. 背景色: ピンク;
  5. テキスト配置: 中央;
  6. }
  7. スパン{
  8. 表示:インラインブロック;
  9. 垂直位置合わせ: 中央;
  10. 行の高さ: 20px;
  11. 幅: 100ピクセル;
  12. }
  13. 私{
  14. 表示: インラインブロック;
  15. 高さ: 100%;
  16. 垂直位置合わせ: 中央;
  17. }

XML/HTML コードコンテンツをクリップボードにコピー
  1. <div>   
  2.         < i > </ i > < span >私はとても長い、とても長い、とても長い、とても長い複数行のテキストです</ span >   
  3.     </div>     

【5】アイコンとテキストの配置

<方法1> 負の長さを使用する

コードをコピー
コードは次のとおりです。
画像{ 垂直方向の位置: -5px;}

実際の経験によれば、20×20ピクセルのアイコンに14ピクセルのテキストを並べると、vertical-alignを-5pxに設定すると、より良い配置効果が得られます。

<方法2> テキストの下揃えを使用する

コードをコピー
コードは次のとおりです。
img{ 垂直方向の位置: テキスト下部;}

ベースラインを使用するとアイコンが上に移動します。top/bottom を使用すると他のインライン要素の影響を受け、位置ずれが発生します。middle を使用すると適切なフォント サイズが必要になり、互換性が低くなります。text-bottom を使用するとより適切で、行の高さや他のインライン要素の影響を受けません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。

原文: http://www.cnblogs.com/xiaohuochai/p/5271217.html

<<:  Vue の element-ui コンポーネントのデフォルトの CSS スタイルを変更する 4 つの方法

>>:  MySQLのFreeListメカニズムの詳細な説明

推薦する

CSS を使用して適応型の幅と高さを持つ 16:9 の長方形を実装する例

先ほど、適応幅と高さが1:1の正方形を作成する方法について説明しました。 https://www.j...

JSは賞金の重さに基づいて当選確率を計算します

目次1. シナリオ例1.1. 抽選の賞品名を設定する1.2. 各賞の重みを設定する1.3. ラッキー...

HTML入力ファイルコントロールはアップロードされるファイルの種類を制限します

入力ファイルの HTML コントロールを Web ページに追加します。 <input id=&...

JavaScript Reduceの詳しい説明

目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...

CentOS7 64でのMySQL5.6.40の詳細なインストール手順

CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...

ウェブページのフラッシュアニメーションが表示されない問題の解決策

<br />解決手順は次のとおりです。スタート -> 実行 -> reged...

私の CSS フレームワーク - base.css (ブラウザのデフォルト スタイルをリセット)

コードをコピーコードは次のとおりです。 @文字セット "utf-8"; /* @...

MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ

この記事では、MySQL の null (IFNULL、COALESCE、NULLIF) に関連する...

Node はあいまい検索用の検索ボックスを実装します

この記事の例では、検索ボックスでファジークエリを実装するためのNodeの具体的なコードを参考までに共...

MySQLはPartition関数を使用して水平分割戦略を実装します。

目次1件のレビュー2 水平分割の5つの戦略2.1 ハッシュ2.2 範囲2.3. キー2.4. リスト...

チェックボックスの不確定プロパティの使用の紹介

Windows XP でフォルダーのプロパティ ダイアログ ボックスを使用すると、フォルダーの属性カ...

Zabbix上のすべてのホストのIPとホスト名を取得する

ザビックスZabbix ([`zæbiks]) は、WEB インターフェースに基づいて分散システム監...

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

JS+Canvas が抽選ホイールを引く

この記事では、宝くじターンテーブルを描画するJS + Canvasの具体的なコードを参考までに共有し...

Apache Bench ストレステストツールの実装原理と使用状況分析

1: スループット(1秒あたりのリクエスト数)サーバーの同時処理能力を定量的に表したもので、reqs...