在CSS3还没到来之前,很多web设计者将一个块级元素居中的最普遍方式也就是将其的左右margin设为auto,我很好奇为什么这样能让它居中,最后在《CSS权威指南(上)》找到了答案:
子元素的7个长度(左右margin、border、padding与width,以下简称横长度)与父级元素的width相等
当一个块级元素横长度什么都不设置的时候,width会默认设为auto,效果是和子级元素横长度相等,padding、border、margin会设置为0,但此时很有可能匹配不上父元素的width,那么问题来了,谁会首当其冲,被用户代理(浏览器)修改长度呢,答案是——margin-right
因此开发者模式下可以看到body下一个啥都不设的div的右margin会被拉的很长
上述用户代理将margin-right拉长的过程实际上是将其改为了auto,margin设为auto会让浏览器自己选择一个合适的外边距,来匹配父元素的width,
重要的来了!如果左右margin都设为auto,会是这个样式
此时的左右magin都是auto,用户代理会均分左右magin的值,达到水平居中的效果
auto有此效果,那么padding和boreder呢?
答案是没效果,用户代理对设为auto的padding和border设为0,你可不想看见一个被border撑居中的块级元素吧(笑)
在CSS3时代,可选择的布局方式更加丰富了,在很多场合,flex布局被更多开发者所使用,margin: 0 auto以及设置绝对定位布局的时代已经过去
注:面对竖直方向的margin,就不会有这样的效果了,用户代理会将设为auto的上下margin设为0
TODO:margin设为负值有其他效果,之后填上此内容