単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)

単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)
この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が CSS にはないのかと尋ねる人もいるかもしれません。一部のブラウザがサポートしていなくても、CSSHack テクノロジーを少し使用すれば済みます。ここでもう少し説明する必要があります。確かに CSS には vertical-align 属性がありますが、これはテーブル要素の <td>、<th>、<caption> など、valign 属性を持つ (X)HTML 要素内の要素にのみ機能します。一方、<div> や <span> などの要素には valign 属性がないため、これらの要素では vertical-align を使用しても機能しません。
1. 1 行の垂直方向の中央揃え<br />コンテナー内にテキストが 1 行しかない場合、中央揃えは比較的簡単です。実際の高さを、テキストが含まれる行の行高と同じに設定するだけです。
のように:

コードをコピー
コードは次のとおりです。

div{
高さ:25px;
行の高さ:25px;
オーバーフロー:非表示;
}

このコードは非常にシンプルです。overflow:hidden 設定は、コンテンツがコンテナーを越えたり、自動行折り返しが発生して垂直方向の中央揃え効果が得られなくなるのを防ぐために後で使用されます。その他の CSS チュートリアル。

コードをコピー
コードは次のとおりです。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<title>1 行テキストの垂直方向の中央揃え</title>
<metahttp-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8"/>
<スタイルタイプ="text/css">
本文{フォントサイズ:12px;フォントファミリー:tahoma;}
div{
高さ:25px;
行の高さ:25px;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
}
</スタイル>
</head>
<本文>
<div>ここで、このテキストを垂直方向に中央揃えにします。 </div>
</本文>
</html>

2. 高さが不明な複数行のテキストの垂直方向の中央揃え<br />段落の高さが可変の場合、前のセクションで説明した最後の方法を使用して水平方向の中央揃えを実現できます。これは、上と下の行が中央揃えになるようにパディングを設定することです。
パディング値は同じにすることができます。繰り返しますが、これは垂直方向に中央揃えされているように「見せる」方法であり、単にテキストを <div> 内に完全に埋め込む方法にすぎません。次のようなコードを使用できます。

コードをコピー
コードは次のとおりです。

div{
パディング:25px;
}

この方法の利点は、どのブラウザでも実行でき、コードが非常にシンプルなことですが、この方法の前提は、コンテナーの高さがスケーラブルである必要があることです。

コードをコピー
コードは次のとおりです。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<title>複数行テキストの垂直中央揃え</title>
<metahttp-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8"/>
<スタイルタイプ="text/css">
本文{フォントサイズ:12px;フォントファミリー:tahoma;}
div{
パディング:25px;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
}
</スタイル>
</head>
<本文>
<div><pre>ここで、このテキストを垂直方向に中央揃えにします。
div{
パディング:25px;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
}
</pre></div>
</本文>
</html>

3. 固定の高さで複数行のテキストを中央揃えにする<br />この記事の冒頭で、CSS の vertical-align 属性は valign 属性を持つ (X)HTML タグでのみ機能すると述べましたが、CSS には <table> をシミュレートできる display 属性もあるため、この属性を使用して <div> で <table> をシミュレートし、vertical-align を使用することができます。親要素に display:table と display:table-cell を設定し、子要素に display:table-cell を設定する必要があることに注意してください。そのため、配置する必要があるテキスト用に別の <div> 要素を追加する必要があります。

コードをコピー
コードは次のとおりです。

div#ラップ{
高さ:400px;
表示:テーブル;
}
div#コンテンツ{
垂直位置揃え:中央;
表示:テーブルセル;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
}


コードをコピー
コードは次のとおりです。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<title>複数行テキストの垂直中央揃え</title>
<metahttp-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8"/>
<スタイルタイプ="text/css">
本文{フォントサイズ:12px;フォントファミリー:tahoma;}
div#ラップ{
高さ:400px;
表示:テーブル;
}
div#コンテンツ{
垂直位置揃え:中央;
表示:テーブルセル;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
}
</スタイル>
</head>
<本文>
<div="ラップ">
<divid="content"><pre>ここで、このテキストを垂直方向に中央揃えにします。 Webjx.Com
div#ラップ{
高さ:400px;
表示:テーブル;
}
div#コンテンツ{
垂直位置揃え:中央;
表示:テーブルセル;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
}
</pre></div>
</div>
</本文>
</html>

この方法は理想的ですが、残念ながら Internet Explorer 6 は display: table と display: table-cell を正しく理解しないため、この方法は Internet Explorer 6 以前では無効です。まあ、これは非常に憂鬱ですね!しかし、他の方法もあります
4. Internet Explorerでの解決策
Internet Explorer 6 以下では高度の計算に不具合があります。 Internet Explorer 6 で親要素を配置した後、子要素に対してパーセンテージ計算を行うと、計算の基準が継承されるようです (配置した値が絶対値であればこのような問題はありませんが、パーセンテージ計算の基準は要素の高さではなく、親要素から継承した配置した高さになります)。たとえば、次の (X)HTML スニペットがあります。

コードをコピー
コードは次のとおりです。

<div="ラップ">
<divid="サブラップ">
<div="コンテンツ">
</div>
</div>
</div>

サブラップを絶対配置すると、コンテンツもこのプロパティを継承します。ページにすぐには表示されませんが、コンテンツを相対配置すると、使用する 100% 比率はコンテンツの元の高さではなくなります。たとえば、サブラップの位置を 40% に設定した場合、コンテンツの上端をラップと一致させたい場合は、top: -80% に設定する必要があります。次に、サブラップの top: 50% に設定した場合は、コンテンツを元の位置に戻すために 100% を使用する必要がありますが、コンテンツも 50% に設定した場合はどうなるでしょうか。すると、垂直方向に正確に中央に配置されます。したがって、この方法を使用して、Internet Explorer 6 で垂直方向の中央揃えを実現できます。

コードをコピー
コードは次のとおりです。

div#ラップ{
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:400px;
位置:相対;
}
div#サブラップ{
位置:絶対;
境界線:1pxsolid#000;
上位:50%;
}
div#コンテンツ{
境界線:1pxsolid#000;
位置:相対;
上:-50%;
}

もちろん、このコードは、Internet Explorer 6 などの計算上の問題があるブラウザーでのみ機能します。 (しかし、理解できません。多くの記事を参照しましたが、同じソースのためか、他の理由のためかはわかりませんが、InternetExlporer6 のこのバグの原理を説明したがらない人が多いようです。私は少ししか理解していないので、さらに勉強する必要があります。)

コードをコピー
コードは次のとおりです。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<title>複数行テキストの垂直中央揃え</title>
<metahttp-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8"/>
<スタイルタイプ="text/css">
本文{フォントサイズ:12px;フォントファミリー:tahoma;}
div#ラップ{
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:400px;
位置:相対;
}
div#サブラップ{
位置:絶対;
上位:50%;
}
div#コンテンツ{
位置:相対;
上:-50%;
}
</スタイル>
</head>
<本文>
<div="ラップ">
<divid="サブラップ">
<divid="content"><pre>ここで、このテキストを垂直方向に中央揃えにします。
div#ラップ{
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:500px;
位置:相対;
}
div#サブラップ{
位置:絶対;
境界線:1pxsolid#000;
上位:50%;
}
div#コンテンツ{
境界線:1pxsolid#000;
位置:相対;
上:-50%;
</前>
</div>
</div>
</div>
</本文>
</html>

5. 完璧な解決策<br />上記の 2 つの方法を組み合わせることで完璧な解決策を得ることができますが、これには CSShack の知識が必要です。 CSSHack を使用してブラウザを区別する方法については、「シンプルな CSShack: IE6、IE7、IE8、Firefox、Opera を区別する」を参照してください。

コードをコピー
コードは次のとおりです。

div#ラップ{
表示:テーブル;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:400px;
_position:相対;
オーバーフロー:非表示;
}
div#サブラップ{
垂直位置揃え:中央;
表示:テーブルセル;
_position:絶対;
_トップ:50%;
}
div#コンテンツ{
_position:相対;
_トップ:-50%;
}

この時点で、完璧なセンタリング ソリューションが作成されます。

コードをコピー
コードは次のとおりです。

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<title>複数行テキストの垂直中央揃え</title>
<metahttp-equiv="コンテンツタイプ" コンテンツ="text/html; charset=utf-8"/>
<スタイルタイプ="text/css">
本文{フォントサイズ:12px;フォントファミリー:tahoma;}
div#ラップ{
表示:テーブル;
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:400px;
_position:相対;
オーバーフロー:非表示;
}
div#サブラップ{
垂直位置揃え:中央;
表示:テーブルセル;
_position:絶対;
_トップ:50%;
}
div#コンテンツ{
_position:相対;
_トップ:-50%;
}
</スタイル>
</head>
<本文>
<div="ラップ">
<divid="サブラップ">
<divid="content"><pre>ここで、このテキストを垂直方向に中央揃えにします。
div#ラップ{
境界線:1pxsolid#FF0099;
背景色:#FFCCFF;
幅:760ピクセル;
高さ:500px;
位置:相対;
}
div#サブラップ{
位置:絶対;
境界線:1pxsolid#000;
上位:50%;
}
div#コンテンツ{
境界線:1pxsolid#000;
位置:相対;
上:-50%;
</前>
</div>
</div>
</div>
</本文>
</html>

ps vertical center の vertical-align の値は middle ですが、horizo​​ntal center align の値は center です。どちらも中央揃えですが、キーワードが異なります。

<<:  MySQL はどのようにしてマスターとスレーブの一貫性を確保するのでしょうか?

>>:  xHTML タグと HTML タグの違いは何ですか?

推薦する

Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明

背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...

Linux コマンド sort、uniq、tr ツールの詳細な説明

並べ替えツールLinux の sort コマンドは、テキスト ファイルの内容を並べ替えるために使用さ...

HTML における DOM 要素のスクロールバースクロール制御の詳細な説明

dom要素に新しい子要素を追加し、新しく追加された新しい要素がコンテナーのスコープを超えた場合は、次...

Linux での UDP について学ぶ

目次1. UDPとLinuxの基礎の紹介2. 各機能の使い方1. ソケット機能の使用2. バインド機...

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

Linux でユーザーにルート権限を追加する方法の概要

1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

WeChat アプレットのカスタム下部ナビゲーション バー コンポーネント

この記事の例では、WeChatアプレットの下部ナビゲーションバーコンポーネントの具体的な実装コードを...

IIS を使用して X-Forwarded-For ヘッダー (XFF) を呼び出して訪問者の実際の IP を記録する 2 つの方法

問題: IIS を通じて公開された Web サイトは F5 デバイスの背後に配置されています。透過的...

ウェブサイトのフロントエンドパフォーマンスの最適化: JavaScript と CSS

Yahoo チームが書いた、ウェブサイトのパフォーマンス最適化に関する記事を読みました。この記事は...

docker で PostgreSQL データベースをインストールして永続化する方法

Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...

MySQL トランザクション分離レベルの表示と変更の例

トランザクション分離レベルを確認するMySQL では、'%tx_isolation%'...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

MySQL curdate() 関数の詳細な例

MySQL CURDATE関数の紹介文字列コンテキストまたは数値コンテキストの YYYMMDD 形式...