CSS篇之水平导航

关于水平导航已然是老生常谈之问题,看了网上诸多方法,今天小小的总结对比了一下现有方法的优缺点。css

问题:一个最简单的html结构以下,请实现水平导航。html

<ul>
    <li>home</li>
    <li>web</li>
    <li>other</li>
</ul>

基础样式:css3

ul{list-style: none;}
li{width: 80px;height: 30px;background: #7fffd4;color: #fff;text-align: center;line-height: 30px;}
li:hover{background: lightsteelblue;}

方法一:floatweb

ul{overflow: hidden;}
li{float: left;}

优势:兼容性好,全部浏览器版本都能很好的支持;chrome

缺点:需清除浮动避免带来的影响浏览器

方法二:display:inline-blockflex

ul{font-size: 0;}
li{display: inline-block;font-size: 14px;}

优势:兼容性好,支持IE8及以上,且不用考虑浮动带来的负面效果;若想支持IE7及如下也容 易,只需添加以下代码:firefox

li{*display: inline;*zoom: 1;}

缺点:列表元素之间会很诡异的有间距,缘由是由于标签换行的空白带来的影响,解决方案有两种:1,在父元素设置font-size为0;2,让列表的结束标签与下一个列表的开始标签连在一块儿,可是这样HTML可读性很差,因此通常采用第一种方法就能很好的解决。code

方法三:display:inlinehtm

li{display: inline;padding: 7px 20px;}

优势:代码简洁。

缺点:1,和方法2同样,会出现空白间隙,解决方案如上;2,由于是行内元素,因此不能设置宽高,比较局限。

方法四:display:flex/inline-flex

li{display: flex/inline-flex;} //图简单,就这样写啦。。

优势:代码简洁;无反作用影响

缺点:兼容性通常,ie9及如下不支持

在这里说下小小的区别:inline-flex父元素宽度为子元素宽度和;flex为块级元素,默认宽度为父级宽度。固然从名字上也能很容易看出,不过在网上看到inline-flex的文章并不那么多,所知甚微,还请你们补充。

方法五:display:table-cell

ul{display: table;}
li{display: table-cell;}

优势:兼容性较好,IE8及以上都支持

缺点:暂未发现(btw:不加上对父元素设置table好像也没啥影响。加上父元素table,父元素宽度为子元素总宽)

方法六:box-orient

ul{
    /* Firefox */
    display:-moz-box;
    -moz-box-orient:horizontal;
                
    /* Safari、Opera 以及 Chrome */
    display:-webkit-box;
    -webkit-box-orient:horizontal;
                
    /* W3C */
    display:box;
    box-orient:horizontal;
}

优势:简单粗暴

缺点:很方便,有木有,可是,毕竟css3属性,目前尚未浏览器支持此属性,firefox、safari、chrome、opera能够经过私有属性来达到效果,IE就苦逼了,并不能。

结语:暂时就这么多。

相关文章
相关标签/搜索