在一个元素内居中还有一个元素有时候会非常困难.对于常规,静态定位的元素,能够让他向左或向右浮动,或者使用text-align属性让他在父元素内居左,居中或居右.还能够利用自己主动外边距(margin:0 auto;)来居中元素.这些方法的问题在于,要居中的元素必须是有宽度的.像这里用于构成菜单的html列表,他可能是依据数据库信息动态生成的,或者说将来有可能手工编辑,总之你不可能提前设定他的宽度.
在display属性的值中,inline-block具有一些特殊的混合行为.正如他的名字所暗示的,它具有块级元素的特点,也有行内元素的行为.从块级元素角度来说,能够为他设定外边距和内边距,也能够通过它简便而有效的包围其它块级元素.从行内元素角度看,他会收缩包裹自己的内容,而不是扩展填充父元素.换句话说,inline-block元素的宽度始终等于其内容宽度.这样的元素另一个特点,就是能够包围浮动元素.只是,这样的元素也有一个问题,既不能给他的外边距设定auto值--而这恰恰又是在更大的容器内居中元素的最简单方法.
解决方式就是为要居中元素的父元素应用text-align:center,为要居中的元素设定display:inline-block.这样设定就能够得到我们想要的结果:没有宽度的元素也能在其父元素内居中.