【CSS】margin系列之auto

本文参考资料


   margin系列之keyword auto

   http://dev.w3.org/csswg/css-box/#the-margin-properties

先闲扯


   一般来说,我们用auto设置margin时,是用来水平居中的,如下例

  CSS

    #demo{
        width: 200px;
        height: 200px;
        background: yellow;
        margin: 0 auto;/* 或者 auto */
    }

  HTML

 <div id="demo"></div>

  这样的话,demo同学就如我们所料水平居中了。

 

w3标准


    你会发现,无论设置margin为 auto 还是 0 auto,demo都会水平居中,而垂直方向上margin-top都是0,,这是为什么呢?

  看看w3标准是如何说的(http://dev.w3.org/csswg/css-box/#the-margin-properties):

On the A edge and C edge, the used value of ‘auto’ is 0. On the B edge and D edge, the used value depends on the available space

即: A C 的 margin 为 auto 时,计算出的值是0;
   B D 的 margin 为 auto 时,margin 值取决于可用空间

  什么是A.B.C.D边呢?

We distinguish four roles for the edges of a box, called A edge, B edge, C edge and D edge. They depend on the ‘writing-mode’ and ‘direction’ properties of the box‘s containing block (defined below), and map to the four sides as follows:

ABCD是哪个边取决于‘writing-mode‘和‘direction‘的设置,如下图所示:

 

为什么 margin-left 和 margin-right 为 auto 会水平居中?


   首先声明,这是在 ‘writing-mode‘ 和 ‘direction‘ 为默认值时的分析,如果设置的话,会根据上表所示展现。

  重复一下规则:

A C 的 margin 为 auto 时,计算出的值是0;
B D 的 margin 为 auto 时,margin 值取决于可用空间

  举个例子:

  CSS

#demo{
        width: 500px;
        background: yellow;
    }
#demo p{
       width: 100px;
        margin-left: auto;
        background: blue;
    }

  HTML

<div id="demo">
    <p>恩,我就是那个p。</p>
</div>

  结果是

  

  可以看到,p 相对于包含块右对齐了,margin-left 补全了左边空白,即margin-left = 500px - 100px = 400px。

  由此可用想到,当 margin-left 和 margin-right 值都是 auto 时,左右部分均分了可用空间,因此块就水平居中了。

 

为什么 margin-top 和 margin-bottom 为 auto 不会垂直居中?


   原因在另一篇文章中指出:【CSS】margin系列之百分比

【CSS】margin系列之auto,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。