首先了解下,margin的auto属性的做用是用来分配剩余空间,因此对于有剩余空间的元素才有效哦(块及元素)。好比图片设置margin: 0 auto是无效的,由于图片是内联元素,不是占一整行,没有剩余空间。浏览器
1.块及元素水平方向居中:spa
原理:两侧auto,则平分剩余空间,至关于水平居中。图片
div { margin-right: auto; margin-left: auto; width:200px; height: 200px } 固然也能够这样写 div { margin: 0 auto; width:200px; height: 200px } 跟垂直方向无关,垂直方向可随便设置,只要水平左右都设置为auto便可。注意width宽度必定要设置,没有宽度的块默认就是100%,就没有auto值了。ip
代码以下:it
2.块及元素水平居右:io
原理:一侧auto,一侧没设置,则设置auto的一侧分配全部剩余空。class
想让div居右显示,已经很简单了。把margin-left 的值设置为auto 便可。代码以下:原理
div { width:200px; height: 200px; margin-left: auto;}cli
原理:一侧定值,一侧auto,auto为剩余空间大小。代码以下:渲染
div { width:200px; height: 200px; margin-left: auto; margn-right: 100px; }
以上方法只能实现水平方向,对于垂直方向是无效的,由于垂直方向没有剩余空间,这点再也不解释了。
3.想要实现垂直方向的居中能够用绝对定位。
div {
background: #FF0000;
width: 200px;
height: 200px;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
margin: auto; 是关键,没有设置此项,也不会水平垂直居中哦。
解释下原理:
1.在普通内容流中,margin:auto的效果等同于margin-top:0;margin-bottom:0。
2.position:absolute使绝对定位块跳出了内容流,内容流中的其他部分渲染时绝对定位部分不进行渲染。
3.为块区域设置top: 0; left: 0; bottom: 0; right: 0;将给浏览器从新分配一个边界框,此时该块块将填充其父元素的全部可用空间,因此margin 垂直方向上有了可分配的空间。
4.再设置margin 垂直方向上下为auto,便可实现垂直居中。(注意高度得设置)。