ホームページ >ウェブフロントエンド >htmlチュートリアル >CSS_html/css_WEB-ITnose のみを使用して完全に中央揃え
margin:0 auto; のスタイルは要素を水平方向に中央に配置できることは誰もが知っていますが、margin: auto; は要素を垂直方向に中央に配置することができません。ただし、ご注意ください!要素を絶対的に中央に配置したい場合は、要素の高さを宣言し、次のスタイルを追加するだけです。 : 絶対 ;
上 : 0 ; 下 : 0 ; 右 : 0 ; ") 、非常に一般的なテクニックかもしれません。しかし、垂直方向のセンタリングに関するほとんどの記事では、この方法について言及していません。この記事のコメントを読んでいなかったら、この方法を見つけることさえできなかったでしょう。
これまでこの方法を使ったことがなかったので、この「完全に中心にある」方法がどれほど魔法であるかを試してみたいと思いました。 利点: | クロスブラウザー、優れた互換性 (ハックは不要、IE8~IE10 を考慮可能) 特別なタグはなく、スタイルはより合理化され、適応性のあるレイアウトになり、パーセンテージ、最大、最小の高さ、幅、その他のスタイルを使用して、要素のパディング値を考慮せずに中央に配置します (box-sizing スタイルを使用する必要はありません)。また、レイアウト ブロックのサイズを自由に調整できます。 要素を宣言する必要があります。要素のオーバーフローや異常な表示の問題を回避するために、この方法は Windows Phone では動作しません ブラウザのサポート: Chrome、Firefox、Safari、Mobile Safari、IE8-10 で使用されることを強くお勧めします。 「完全に中央揃え」はテスト済みで、Chrome、Firefox、Safari、Mobile Safari の最新バージョンで完全に使用でき、IE8 ~ IE10 でも実行できます 比較表 この記事では「完全に中央揃え」が唯一のオプションではありません。垂直方向のセンタリングを実現するには他にも方法があり、それぞれに独自の利点があります。採用するアプローチは、サポートするブラウザーと既存のタグの構造によって異なります。以下の比較表は、ニーズに最適な方法を選択するのに役立ちます。
使用されるスタイル |
レスポンシブかどうか
コンテンツオーバーフロー後のスタイル
両方
主な欠陥 |
| Absolute
| 最新のブラウザと IE8+
| はコンテナのオーバーフローを引き起こす可能性があります
|
| は * の「高さ可変」機能です。クロスではありません-ブラウザ | |||||||||||||||||||||||||||
負のマージン値 | すべて | いいえ | スクロールバー付き | サイズ変更後に中央に配置されなくなりました | いいえ | 応答性のないフォーミュラの特性、マージン値は手動で計算する必要があります | |||||||||||||||||||||||||||
Transform | 最新のブラウザと IE9+ | はコンテナのオーバーフローを引き起こします | is | is | 障害物のレンダリング
| テーブルセル | |||||||||||||||||||||||||||
最新ブラウザ&IE8+ | はい | オープンコンテナ | いいえ | は | で冗長なマークを追加します
| Inline-Block | |||||||||||||||||||||||||||
最新のブラウザ&IE8+&IE7* | はい | コンテナを開けます | いいえ | は | コンテナラッピングを使用し、スタイルスタイルをハックする必要があります
| Flexbox | |||||||||||||||||||||||||||
最新のブラウザと IE10+ | は | はコンテナのオーバーフローを引き起こします | は | は | には、コンテナ パッケージとベンダー プレフィックス (ベンダー プレフィックス) の使用が必要です
| 説明
高さ: 50 %; | オーバーフロー: 自動; マージン: 自動; 位置: 絶対; 上: 0; 左: 0; 右: 0; 次の例では、次のスタイルがすでに含まれていることを前提として、さまざまな機能を提供するためにスタイルを追加します。 表示領域内の中央に配置しますコンテンツ領域を表示領域内の中央に配置したいですか?これを行うには、position:fixed スタイルを設定し、より高い z-index 値を設定します。
| .Absolute-Center.is-Fixed {
モバイル版 Safari の手順: Position:relative が外側に設定されたコンテナがない場合、コンテンツ領域はドキュメント全体の高さの中心点に基づいて中央に配置されます。表示領域の高さ 中心点はセンタリングの基準になります。
オフセット値オフセット スタイルを使用して固定タイトルやその他の要素を追加する必要がある場合は、コンテンツ領域のスタイルに top: 70px; のようなスタイルを直接書き込むことができます。 margin: auto; スタイルを宣言すると、コンテンツブロックの左上右下の属性値も同時に計算されます。
コンテンツブロックが横にあるときに水平方向の中央に配置したい場合は、right: 0; left: auto; を使用してコンテンツを右に固定するか、left: 0; を使用します。コンテンツが左側に固定されるようにします。
.Absolute-Center.is-Fixed { 位置: 固定 z-index: 999;
| 応答性あり
.Absolute-Center.is-Responsive {
高さ: 60%; | 最小幅 : 200px ;
最大幅: 400px ; パディング: 40px;
|
|
オーバーフローコンテンツを含むコンテナによって。コンテンツ領域がコンテナを超えない限り (コンテンツ コンテナにパディングが予約されていない場合は、max-height: 100%; スタイルを設定できます)、スクロール バーはコンテナ内に生成されます。
.Absolute-Center.is-Overflow { | オーバーフロー : 自動 ;サイズ変更可能
サイズ変更: 両方のスタイルを設定しない場合は、トランジションスタイルを設定することでサイズをスムーズに切り替えることができます。サイズ変更後のコンテナーの高さと幅は、コンテンツの高さと幅よりも小さくなる可能性があるため、必ず overflow: auto スタイルを設定してください。 「完全に中央揃え」方法は、resize:both スタイルの使用をサポートする唯一の方法です。
使用上の注意:
コンテンツ領域に十分なスペースを残すには、max-width/max-height を設定する必要があります。そうしないと、コンテナーがオーバーフローする可能性があります。サイズ変更属性はモバイル ブラウザと IE8 ~ 10 をサポートしていません。ユーザー エクスペリエンスが重要な場合は、ユーザーがサイズを変更できる他の手段があることを確認してください。 サイズ変更スタイルとトランジションを同時に使用すると、ユーザーがサイズの変更を開始するときにトランジション効果時間に等しい遅延が発生します。 画像画像も使えます!対応するクラスを指定し、スタイル height: auto を指定して、コンテナーのサイズが変化するにつれてサイズが変化する応答性の高い画像を取得します。
height: auto; スタイルは画像には有効ですが、後で紹介する「高さ可変テクニック」を使用しないと、通常のコンテンツ領域がコンテナの長さに合わせて伸びることになることに注意してください。
ブラウザはレンダリング結果に基づいて画像の高さの値を埋める可能性が高いため、テストされたブラウザでは、margin: auto; スタイルは固定の高さの値を宣言しているかのように正常に動作します。
HTML:
< img src = "http://placekitten.com/g/500/200" alt = "" />
|
.Absolute-Center.is-Image { | height : auto ; .Absolute-Center.is-Image img { 幅: 100% ;高さ: 自動これは応答性の高いソリューションに非常に適しており、オーバーフロー コンテンツを設定するだけです。
もう 1 つの方法は、コンテンツの長さに関係なく、display: table スタイルを中央に配置するように設定することです。この方法は、一部のブラウザ (主に IE と Firefox) で問題を引き起こす可能性があります。 ELL Creative の私の友人 Kalley は、ブラウザがこのセンタリング スキームをサポートしているかどうかを確認するために使用できる Modernizr に基づいたテストを作成しました。このアプローチでは、段階的な強化を行うことができるようになりました。 注意点: この方法ではブラウザの互換性が失われます。Modernizr テストでニーズを満たせない場合は、他の実装ソリューションを検討する必要があるかもしれません。 サイズ変更可能なテクノロジーと互換性がありません。 | Firefox/IE8 では、display: table を使用します。コンテンツ領域は垂直方向に上向きですが、水平方向には中央に配置されます。
Safari
のコンテンツエリアは水平方向に配置されますが、パーセント幅を使用すると、水平方向に中心からわずかにずれます。 Javascript:/* Modernizr Test for Variable Height Content */
Modernizr.testStyles( '#modernizr { display: table; height: 50px; width: 50 px ; マージン:自動; 位置: 0; 左: 0; 右: 0; }' , function(elem, ルール) { 'absolutecentercontent' , Math.round 2 - 25 ) === elem.offsetTop) });
; | .absolutecentercontent .Absolute-Center.is-Variable { ディスプレイ: テーブル; 高さ: 自動; その他の方法 「完全に中心化」方法は、中心化の問題を解決する良い方法であり、さまざまなニーズを満たすことができる他の多くの方法があります。最も一般的で推奨される方法は、負のマージン値、変換方法、テーブルセル方法、インラインブロック方法、および最近登場した Flexbox 方法です。これらの方法は他の記事で詳しく紹介されているため、ここでは簡単に説明します。 マイナスマージン値おそらくこれが最もよく使われる方法です。各要素のサイズがわかっている場合は、幅と高さの半分に等しい負のマージン値を設定し (box-sizing: border-box スタイルを使用しない場合は、パディング値も追加する必要があります)、一致させます。上: 50%; 左: 50% ; スタイルはブロック要素を中央に配置します。 予想どおり、これが IE6-7 で動作する唯一の方法であることに注意してください。 Is-Negative パディング: 20px; ;利点 : ブラウザの互換性は非常に優れており、IE6-7 もサポートしており、コーディングはほとんど必要ありません
ベンダー プレフィックスを記述する必要があるため、他の変換スタイルと競合する場合があります。エッジとフォントレンダリングテーブルを使用 - Cellメソッド 高さはコンテンツに応じて変更でき、ブラウザのサポートも悪くないため、これが最良の方法かもしれません。主な欠点は、追加のタグが生成されることです。中央に配置する必要がある要素ごとに 3 つの追加の HTML タグが生成されます。
HTML:
|