当父元素和子元素都没有定义宽度的情况下实现水平居中:
display:inline-block
可以使用text-align:center和display:inline-block相结合,这个技巧需要一个父元素。
HTML代码:
1 <div class="navbar"> 2 <ul> 3 <li><a href="/">Home</a></li> 4 … 5 </ul> 6 </div>
CSS代码:
1 .navbar { 2 text-align:center; 3 } 4 .navbar ul { 5 display:inline-block; 6 } 7 .navbar li { 8 float:left; 9 } 10 .navbar li + li { 11 margin-left:20px; 12 }
IE系列IE8+支持,要IE7 IE6 支持需要加入以下代码使display:inline像display:inline-block一样
1 .navbar ul { 2 *display:inline; 3 *zoom:1; 4 }
position:relative
使用position:relative与float相结合的技巧及其浮动和定位参照物的关系,这个技巧需要两个父元素,一个用来定位而另外一个用来避免出现滚动条。
HTML代码:
1 <div class="navbar"> 2 <div> 3 <ul> 4 <li><a href="/">Home</a></li> 5 … 6 </ul> 7 </div> 8 </div>
CSS代码:
1 .navbar { 2 overflow:hidden; 3 } 4 .navbar > div { 5 position:relative; 6 left:50%; 7 float:left; 8 } 9 .navbar ul { 10 position:relative; 11 left:-50%; 12 float:left; 13 } 14 .navbar li { 15 float:left; 16 } 17 .navbar li + li { 18 margin-left:20px; 19 }
IE7下需要加入下列代码支持:
1 .navbar { 2 position:relative; 3 }
display:table
如果向使用极少的标签实现,这个方法是个不错的选择。
HTML代码:
1 <ul class="navbar"> 2 <li><a href="/">Home</a></li> 3 … 4 </ul>
CSS代码:
1 .navbar { 2 display:table; 3 margin:0 auto; 4 } 5 .navbar li { 6 display:table-cell; 7 } 8 .navbar li + li { 9 padding-left:20px; 10 }
不支持IE7及一下浏览器,其他的主流浏览器都支持。
display:inline-flex
这个方法需要使用 flex-layout 的知识。
HTML代码:
1 <div class="navbar"> 2 <ul> 3 <li><a href="/">Home</a></li> 4 … 5 </ul> 6 </div>
CSS代码:
1 .navbar { 2 text-align:center; 3 } 4 .navbar > ul { 5 display:-webkit-inline-box; 6 display:-moz-inline-box; 7 display:-ms-inline-flexbox; 8 display:-webkit-inline-flex; 9 display:inline-flex; 10 } 11 .navbar li + li { 12 margin-left:20px; 13 }
使用CSS fit-content 值
下面看看如何用fit-content创建一个包含子元素浮动的未知宽度的导航。
HTML代码:
1 <div class="navbar center"> 2 <ul> 3 <li><a href="/">Home</a></li> 4 <li><a href="/">About us</a></li> 5 <li><a href="/">Our products</a></li> 6 <li><a href="/">Customer support</a></li> 7 <li><a href="/">Contact</a></li> 8 </ul> 9 </div>
CSS代码:
代码如下:
1 .center ul{ 2 width: -moz-fit-content; 3 width: -webkit-fit-content; 4 width: fit-content; 5 margin: auto; 6 }
浏览器支持度较低 只Chrome和Firefox这样的-webkit- -moz-内核浏览器。当然以后慢慢会发展起来的。
这个方式是推动浏览器发展的一个新的东西,目前供应于所以可以写前缀的浏览器,并没有工作在IE9和IE9以下。
根据你的需求来选择合适的方法吧,display:inline-block兼容性较好,flex-box将会用于未来。