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 下边缘时候的取值。