x 方向margin(以及border,padding,width等),有一套详细的规则。
y 方向普通block元素要稍微简单一点,基本是根据内容定。
首先 x 方向, margin+border+padding+width = containing block
这个还要分 inline 元素,block元素和定位元素几种情况来看呢。
如果你说的是block元素,首先它要有一个containing block.
这个宽度是固定的,如果你同时设定了marign-left和margin-right以及width,在从左到右的语序中,右边margin会被忽略。
他设定的值会被忽略,而根据上面的公式重新计算。
比如containing block 100px,
margin:0 50px; width:80px;
最后实际的margin-right不是50而是100-50-80 = -30 px
最好还是看css spec 的 visual formatting model 部分
margin表示一个距离,距离是没有参考线的。
containing blocks
http://www.w3.org/TR/CSS21/visuren.html#containing-block
margin-bottom 应该表示 border-bottom 边缘位于 containg block 下边缘时候的取值。