HTMLボディ全体を中央に揃える方法は?


回答:


114

私はこの古い投稿を偶然見つけました。user01が長い間彼の答えを見つけたと確信していますが、現在の答えはまったく機能しません。他の人から提供された情報を使って少し遊んだ後、IE、Firefox、Chromeで機能するソリューションを見つけました。CSS:

html, body {
    height: 100%;
}

html {
    display: table;
    margin: auto;
}

body {
    display: table-cell;
    vertical-align: middle;
}

これはabernierの回答とほとんど同じですが、幅を含めると自動マージンが省略されるため、中央揃えが崩れることがわかりました。このスレッドでつまずく他の誰もが私の答えが役に立てば幸いです。

注:html, body { height: 100%; }水平方向の中央のみを省略します。


いい答えだ。(HTMLの経験があまりないので)疑問に思って、高さを100%に設定する必要がありますか?
日没。2013

7
@JackHumphriesページの中心を垂直軸と水平軸の両方に揃えたい場合にのみ、高さが必要です。水平が必要な場合は、高さを省略できます。
MildWolfie 2013

36

あなたが試すことができます:

body{ margin:0 auto; }

1
これは非常に単純な答えですが、ページの中央にbodyタグを中央に配置する最もクリーンで効率的な方法です。
justinhartman 2018年

1
短いですが、IE、Edge Legacy、Edge、Chrome、Firefoxでも機能しません。問題は、マージンの自動が要素の幅が親の幅よりも小さい場合にのみ機能することです。「body」のデフォルトは100%であるため、マージンを自動挿入する余地はエッジにありません。使用するbody { margin:0 auto; max-width: 700px; }と、体は最大700pxになり、小さなデバイスでのラッピングが可能になります。
user3347790

16

編集

今日のflexboxでは、次のことができます

body {
  display:flex; flex-direction:column; justify-content:center;
  min-height:100vh;
}

以前の回答

html, body {height:100%;}
html {display:table; width:100%;}
body {display:table-cell; text-align:center; vertical-align:middle;}

1
エンティティのstyle属性を許可するDOCTYPEはどれhtmlですか?
2014

1
@ceving:わからない... CSSが有効でないことを意味しますか?
アベニエ

11

CSSに関して私が共有したいことが1つある場合、それは私の両方の軸に沿って物事を集中させる私のお気に入りの方法です!!!

この方法の利点

  1. 人々が実際に使用するブラウザーとの完全な互換性
  2. テーブルは不要
  3. 親の中で他の要素を中央に配置するための再利用性が高い
  4. 動的な(変化する)寸法で親子に対応!

私は常に2つのクラスを使用してこれを行います。1つはコンテンツが中央に配置される親要素を指定し(.centered-wrapper)、もう1つは親のどの子を中央に配置するかを指定します(.centered-content)。この2番目のクラスは、親が複数の子を持っている場合に便利ですが、中央に配置する必要があるのは1つだけです)。この場合、body.centered-wrapper、インナーdivはになります.centered-content

<html>
    <head>...</head>
    <body class="centered-wrapper">
        <div class="centered-content">...</div>
    </body>
</html>

センタリングのアイデアは、を作成.centered-contentすることinline-blockです。これにより、を介して水平方向の中央揃えが簡単text-align: center;になり、また、垂直方向の中央揃えも可能になります。

.centered-wrapper {
    position: relative;
    text-align: center;
}
.centered-wrapper:before {
    content: "";
    position: relative;
    display: inline-block;
    width: 0; height: 100%;
    vertical-align: middle;
}
.centered-content {
    display: inline-block;
    vertical-align: middle;
}

これにより、親の中に子供を集中させるための2つの本当に再利用可能なクラスが提供されます。.centered-wrapper.centered-contentクラスを追加するだけです。

では、その:before要素はどうなっているのでしょうか。vertical-align: middle;垂直方向の配置は親の高さに対して相対的ではないため、これは容易であり、必要です- 垂直方向の配置は最も高い兄弟の高さに対して相対的です!!! 。したがって、高さが親の高さ(100%の高さ、非表示にするために幅が0)の兄弟があることを確認することにより、垂直方向の配置は親の高さを基準とすることがわかります。

最後にhtmlbodyタグとウィンドウのサイズがブラウザの中央と同じになるように、タグのサイズがウィンドウのサイズであることを確認する必要があります。

html, body {
    width: 100%;
    height: 100%;
    padding: 0;
    margin: 0;
}

フィドル:https : //jsfiddle.net/gershy/g121g72a/



8

私はflexboxを使用していhtmlます。素晴らしい効果を得るには、ブラウザのクロムを一致させて、ページの最大サイズよりも大きい画面サイズでコンテンツをフレーム化できます。私はそれが#eeeeeeかなりよく合っていると思います。ボックスシャドウを追加して、フロート効果を高めることができます。

    html{
        display: flex;
        flex-flow: row nowrap;  
        justify-content: center;
        align-content: center;
        align-items: center;
        height:100%;
        margin: 0;
        padding: 0;
        background:#eeeeee;
    }
    body {
        margin: 0;
        flex: 0 1 auto;
        align-self: auto;
        /*recommend 1920 / 1080 max based on usage stats, use 100% to that point*/
        width: 100%
        max-width: 900px;
        height: 100%;
        max-height: 600px;
        background:#fafafa;
        -webkit-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        -moz-box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
        box-shadow: 0px 0px 96px 0px rgba(0,0,0,0.75);
    }

ここに画像の説明を入力してください ここに画像の説明を入力してください 画像/データ提供StatCounter


4
良い、現代的な答え。ほんの少しのコメント。(a)のベンダープレフィックスbox-shadowは、をサポートするブラウザとしてflexもおそらく冗長box-shadowです。(b)答えを装飾するCSSはたくさんありますが、重要な部分を区別するのは困難です。ありがとう
Manngo 2018年

上記(@Manngo)のコメントで非常に(b)。
cjauvin

いい答えだ。モダン。しかし、同じ内容のシンプルなものであったかもしれません。
carloswm85

4
<style>
        body{
            max-width: 1180px;
            width: 98%;
            margin: 0px auto;
            text-align: left;
        }
</style>

CSSを適用する前に、このスタイルを適用してください。必要に応じて幅を変更できます。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.