【转载】浮动元素居中的几种方法

       

无意间看到一个讨论float元素如何自适应居中的话题,大概写法如下

 

        .three{
            display:block;text-align:center;
            /* 解决间隙问题 */
            font-size:0;
        }
        .three li{

            width:100px;height:100px;
            display:inline-block;*display:inline;*zoom:1;
            /* 解决不能水平对齐问题 */
            vertical-align:top;
            /* 解决间隙问题后遗症解决 */
            font-size:13px;
        }
        /* 让 chrome 支持 12px 以下的字体 */
        @media screen and (-webkit-min-device-pixel-ratio:0){
            .three{-webkit-text-size-adjust:none;font-size:1px;}

        }

    <ul class='three'>
        <li>aaaa</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>    
    </ul>

 

 看到了一堆的解决bug的补丁。各种hack,如此写下来甚至在chrome下无法完美兼容,总有一像素的间距。

有网友也提出了如下写法:

 

    <ul class='two'>
        <li>aaaa</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>    
    </ul>

        .two{float:left;position:relative;left:50%;border-color:blue;}
        .two li{width:100px;height:100px;float:left;position:relative;left:-50%;}

 

 形身分离的写法,看到的和实际元素占得位置是不一样的。如果需要给ul设置背景就一切都露馅了~~

以上都是针对父子标签的双层嵌套而言,总显得不够完美。如果我们退而求其次,使用三层嵌套,css代码就和谐的多了。如下:

 

<body>
    <ul class='one'>
        <li>aaaa</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>
        <li>bbbb</li>    
    </ul>
</body>

        body{text-align:center;}
        .one{display:inline-block;*display:inline;*zoom:1;}
        .one li{width:100px;height:100px;float:left;}

 

 我简单的修改了下代码,简洁很多,也只用到了一个hack。其实是第一种的原型,只是第一种为了解决双层嵌套下的一些bug,浪费了太多的css,还显得不够兼容,所以有时候权衡一下,倒是多层嵌套划算。

第二种在不对ul级别标签设置可视样式的情况下是最优写法。如果需要对ul设置背可视样式,则用第三种

 

posted @ 2012-06-24 13:33  丛子  阅读(578)  评论(0编辑  收藏  举报