為你總結老生常談的 --- CSS居中


我相信所有的前端菜鳥在剛開始工作的時候都會和我一樣,收到實現居中的需求。

網上的CSS居中帖子不勝枚舉,但大多都沒有很好的總結(或者有好的但是我沒運氣碰到)

今天就自己寫一個吧,也算是對之前工作的總結。

 

一、水平居中

1.將元素水平居中(use margin & width property)

css code:

        div.h_align{
            border: 1px solid black;
            margin: 0 auto;
            width: 50%;/*必須指定寬度,可為百分比或像素值*/
        }

html code:

<div class="h_align">我用margin:0 auto!come on 求水平居中!</div>

summary:

  使用上述方法水平居中,必須指定寬度

compatibility:

  Firefox\Chrome\Safari\Opera\IE 9 8 7 6

 

2.將元素水平居中(use absolute position & width)

css code:

        div.pos{
            border: 1px solid red;
            position: absolute;
            left: 50%;
            width: 300px;
            margin-left: -150px;
        }

html code:

<div class="pos">我用絕對定位!同求水平居中!</div>

summary:

  這個方法的思想是,利用絕對定位 left 50%以后,使負外邊距的值為元素寬度的一半,從而實現居中(這個思路也可以用在垂直居中上)

compatibility:

  Firefox\Chrome\Safari\Opera\IE 9

  IE 8及以下均不兼容,等我以后寫個解析

 

3.將元素水平居中(IE 6\7 solution)

css code:

        div.textAlign{
            margin-top:100px;
            text-align: center;
        }
        div.textAlign div{
            text-align: left;
            width:500px;
            background-color:green;
        }

html code:

    <div class="textAlign"><!--text-align:center IE7 6-->
        <div>來來來來來來來~~~ text-align :center!只能把我用在IE6 7!</div>
    </div>

summary:

  在低版本IE中,text-align不僅用於文本,也用於元素本身的位置偏移,因此在IE6 7中使用text-align會使子元素也隨着文本一並居中,此時只要在子元素中應用一次text-align:left就可以實現元素水平居中

compatibility:

  IE 7\6

 

二、垂直居中

1.單行文本垂直居中

css code:

        p.single_line{
            border: 1px solid green;

            /*key code:*/
            height: 4em;
            line-height: 4em;
            overflow: hidden;
        } 

 html code:

<p class="single_line">我是單行文本!我有100px高,我要垂直居中!</p>

 summary:

  (1)key:令行距和元素高度相同,這樣就限定了容器內只能容納一行文本內容,於是文本就居中了

  (2)設定height和line-height時,推薦使用相對單位em,這樣能夠在字體非常大的時候,依然保持居中

  (3)overflow:hidden是必須的,理由同上,也是為了保持居中

  (4)優點:塊元素和行內元素均適用此方法,並且在主流瀏覽器中適用

  (5)缺點:文本長度有限(最多只能一行),且對於非文本的元素無效

 

2.無固定高度的多行文本垂直居中

css code:

        p.multi_line{
            border: 1px solid gray;
            width: 100px;

            /*key code:*/
            padding-top: 30px;
            padding-bottom: 30px;
        }

 html code:

<p class="multi_line">我是多行文本!我寬100px但是沒有固定高度!跪求垂直居中!</p>

 summary:

  (1)key:令上內邊距和下內邊距相等。值是多少無所謂,相等即可,使用上下外邊距相等也可

  (2)優點:塊元素和行內元素均適用此方法,非文本元素也可以使用,並且在主流瀏覽器中適用

  (3)缺點:無法設置高度

 

3.將固定高度的容器模擬表格布局實現垂直居中

css code:

        div.wrap1{
            border: 1px solid black;

            /*key code:*/
            display:table;
            height:300px;
        }
        div.wrap2{
            /*key code:*/
            display:table-row;
        }
        div.wrap3{
            /*key code:*/
            display:table-cell;
            vertical-align:middle;
        }
        div.maincontent{
            width:350px;
            background-color:black;
            color: white;

            /*key code:*/
            height:90px;/* less than wrap1.height */            
        }

 html code:

    <div class="wrap1">
        <div class="wrap2">
            <div class="wrap3">
                <div class="maincontent">我老爸高300px,我自己是350 X 90 px,我也可以居中啦哇哈哈,可是別在IE6/7下看我噢</div>
                <!-- other content -->
            </div>
        </div> 
    </div>

 summary:

  (1)key:使用display屬性中的table、table-row、table-cell來將元素模擬成表格布局。處於wrap3中的所有元素都會垂直居中,但是它們的高度總和不能超過wrap1的高度

  (2)使用display:table-cell的時候必須同時在祖先元素使用display:table

  (3)缺點:不能在IE6/7下實現

 

4.IE7及以下的解決辦法

css code:

        div.IE7wrap1{
            border: 1px solid pink;

            /*key code:*/
            height: 300px;
            position: relative;
        }
        div.IE7wrap2{
            /*key code:*/
            position: absolute;
            top: 50%;
            left: 0;
        }
        div.IE7maincontent{
            width:350px;
            background-color:black;
            color: white;
            height: 90px;

            /*key code:*/
            position: relative;
            top:-50%;
            left: 0;
        }

 html code:

    <div class="IE7wrap1">
        <div class="IE7wrap2">
            <div class="IE7maincontent">嘿哥們,我是IE6/7的解決方案,要看我就要用IE6/7,不然我丑爆了</div>
        </div>
    </div>

 summary:

  (1)算是一個css hack,服務於IE6/7

 

三、總結

  工作時積累下來的經驗,以及摘抄網上的資料,總結成這一篇博文,如果對您有幫助,請您推薦。

  共勉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM