正確には、「マージン:0オート」に何が必要か。仕事に?


206

margin: 0 auto;要素の設定がそれを中央に配置するために使用されることを知っています(左右)。ただし、自動マージンが機能するためには、要素とその親が特定の基準を満たしている必要があることを知っており、魔法を正しく使うことができないようです。

だから私の質問は単純です:margin: 0 auto;子を左右中央に配置するために要素とその親に設定する必要があるCSSプロパティは何ですか?


これはIEで私にとって適切に機能するようには見えません...なので、私もこれに興味があります。
mpen 2011

5
@Mark:IEはmargin: 0 auto;標準モードでのみ正しく処理するため、Doctypeが必要です(以前は不要であったかのように)。
BoltClock

回答:


292

私の頭の上から:

  1. 要素はブロックレベルである必要があります。例:display: blockまたはdisplay: table
  2. 要素はフロートしてはいけません
  3. 要素は固定または絶対位置であってはなりません1

他の人の頭の上から:

  1. 要素にwidth2ではないa が必要ですauto

これらの条件はすべて、中央に配置される要素が機能するために当てはまる必要があることに注意してください。


1 本に1つの例外があります:あなたの固定または絶対位置の要素を持っている場合left: 0; right: 0それはなり自動マージンを中心に

2 技術的にmargin: 0 autoは、自動幅で機能しますが、自動幅は自動マージンよりも優先され、結果として自動マージンがゼロに設定され、「機能しない」ように見えます。


7
2つの「頭の上の」答え:o
ラッセルディアス

4
固定幅を追加すると、完璧な答えが得られます
meo

1
くそー!私がコーディングしている間、他の誰もが答えました!私の頭の上からも…:O
カイル

私は欠場ol start(とそれが値下げにやってのけるすることはできません)属性:(
BoltClock

1
@Triynko:質問も私の回答も、HTMLの表示属性については何も言っていません(質問には[html]のタグが付けられていません!)。そのため、あなたが正確に何を言っているのかわかりません。とにかく、CSSでターゲットにできるすべての要素はCSSのwidthプロパティとheightプロパティを持つことができますが、すべてのHTML要素が対応するプレゼンテーション属性を持つことができるわけではありません。その理由は、特定のHTML要素。
BoltClock

19

私の頭の上から、それが必要widthです。センタリングするコンテナーの幅を指定する必要があります(親の幅ではありません)。


16
すべてが頭のてっぺんから落ちてきます!
BoltClock

8

CSSの完全なルール:

  1. display: blockAND widthないオート)ORdisplay: table
  2. float: none
  3. position: relative

3

要素がブロック要素でない場合、頭の上から-そのようにします。

そしてそれに幅を与えます。


2

また、display:tableでも機能します。幅を設定する必要がないため、この場合に便利な表示プロパティです。(私はこの投稿が5歳であることを知っていますが、それでも通行人に関係があります;)


2

猫の頭のてっぺんから、div中心にしようとしているがに設定されていないことを確認してくださいwidth: 100%

そうであれば、子divに設定されたルールが重要になります。


1

私がjsFiddleを作成したこの簡単な例に進んでください。わかりやすいと思います。wrapperサイトの幅のdivを使用して中央揃えにすることができます。あなたが置かなければならない理由widthは、ブラウザがあなたが流動的なレイアウトに行くつもりでないことを知っているからです。


1

これが私の提案です:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;


-1

ちょうどこの質問にぶつかり、修正できないmargin: 0 auto場合は、ここに私が見つけたものがあると思います:指定されていないtable要素、が機能するために必要であり、そうではありません。これは、の組み合わせとして、いくつかには明らかであり、デフォルトの値はそのコンテナいっぱいに拡張テーブルを与えるだろうが、あなたがあればしたいテーブルを取るために、それは「自然」の幅だあなたが必要とする、センタリングしますdisplay: table display: blockmargin: autodisplay: blockwidthdisplay: table


それは真実ではありません。(もしあなたがそれを与えるだけならdisplay: block、それは受け入れられた答えの条件4を満たしません)
Quentin

@クエンティン頭を上げてくれてありがとう。私の場合、テーブルが水平方向のスペースを埋めたくありませんでした(これについての全体的な議論を未然に防ぐように思われますmargin: 0 auto)。また、コンテンツの幅が異なる可能性があるため、テーブルの幅を指定できませんでした。この場合、機能する唯一の解決策(つまり、テーブルを通常の方法でレンダリングするが、テーブルを中央揃えにする)は幅のルールではなくdisplay: tablemargin: 0 auto
samson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.