さて、我慢してください...このすべては、ビジュアルフォーマットモデル、特に幅とマージンの計算方法に関係しています。
display
とのように、考慮に入れる必要のあることがいくつかあります(これらはすべて、CSS仕様のセクション10.3でposition
確認できます)。
特にあなたの場合、絶対に配置された非置換要素について話しているので(画像や固有のサイズのものではないため)、セクション10.3.7絶対に配置された非置換要素です。
あなたのcssによると、あなたは定義された幅を持っているので、そうではなくauto
、あなたの左と右のマージンは両方ともauto
です。つまり、左/右の値は次のようになります。
自動ではなく左/右が定義されている場合、次のルールが適用されます。
'margin-left'と'margin-right'の両方が'auto'の場合、2つのマージンが等しい値を取得するという追加の制約の下で方程式を解きます(...)
左/右が定義されていないため、デフォルトで自動になっている場合は、次のルールが適用されます。
初め:
'margin-left'および'margin-right'の'auto'値を0に設定します(...)
2番:
静的位置を含むブロックを確立する要素の「方向」プロパティが「ltr」の場合は「左」を静的位置に設定し、そうでない場合は「右」を静的位置に設定します。次に、「左」(「方向」が「rtl」の場合)または「右」(「方向」が「ltr」の場合)を解きます。
したがって、左/右に特定の値を定義しないと、マージンが実際になり、プロパティ0
の値に応じて、コンテナの左または右にdivが作成されることがわかります(あなたのcssdirection
に何かを置くことによってこれをテストhtml { direction:rtl; }
してください、左/右が自動であるとき、divは左ではなく右に行くべきです)
ただし、値を指定した場合(ケース0の場合)、「2つのマージンは等しい値を取得します」は効果的に要素を中央に配置します。
それが役に立てば幸い!