用CSS/CSS3 實現(xiàn)水平居中和垂直居中擦耀,水平垂直居中的方式

一.水平居中

(1)行內(nèi)元素解決方案:父為塊元素+text-align: center

只需要把行內(nèi)元素包裹在一個屬性display為block的父層元素中帮毁,并且把父層元素添加如下屬性即可:使用text-align: center;居中

對于行內(nèi)元素或具有inline-block屬性的元素居中铭乾,比如span、img等可以使用text-align: center;來實現(xiàn)烈涮。

<style type="text/css">
            div.parent{
                border: 1px solid red;
                text-align: center;
            }
            
            div span {
                width: 100px;
                background: #ddd;
            }
        </style>
    ----------------------------------- 
        
        <div class="parent">
            <span>行內(nèi)元素居中</span>
            <span>行內(nèi)元素居中</span>
            <span>行內(nèi)元素居中</span>
        </div>

(2)單個塊狀元素解決方案

父層元素使用text-align: center居中,子層元素使用 margin: 10px auto; 10px可改變朴肺,以設(shè)置頂端外邊距;

<style type="text/css">
            div.parent {
                border: 1px solid red;
                text-align: center;
            }
            
            div p{
            width: 100px;
            background: #ddd;
            /* 這里可以設(shè)置頂端外邊距 */
            margin: 10px auto;
            }
        </style>
        
        -----
        <div class="parent">
            <p>塊元素居中</p>
        </div>  

(3)多個塊狀元素解決方案

將元素的display屬性設(shè)置為inline-block坚洽,并且把父元素設(shè)置text-align:center即可:

<style type="text/css">
            div.parent {
                border: 1px solid red;
                text-align: center;
            }
            
            div p{
           display: inline-block;
            width: 100px;
            background: #ddd;
             }
        </style>
        
    <div class="parent">
            <p>塊元素居中</p>
            <p>塊元素居中</p>
            <p>塊元素居中</p>
        </div>  

(4)多個塊狀元素解決方案 (使用flexbox布局實現(xiàn))

使用flexbox布局戈稿,只需要把待處理的塊狀元素的父元素添加屬性display:flex及justify-content:center即可:

       <style>
            div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                
                /*flex*/
                display: flex;
                justify-content: center;/*水平居中*/
                align-items: center;/*垂直居中*/
            }
            div span{
            
                background: #808080;
                
            }
        </style>
        
        
        
        <div>
            <span>我是span元素</span>
        </div>      

二、垂直居中

(1)單行的行內(nèi)元素解決方案 :行內(nèi)元素的height和line-height設(shè)置的和父元素一樣高度即可實現(xiàn)垂直居中

div.parent {
    background: #222;
    height: 200px;
}


/* 以下代碼中酪术,將a元素的height和line-height設(shè)置的和父元素一樣高度即可實現(xiàn)垂直居中 */


a {
    height: 200px;
    line-height:200px; 
    color: #FFF;
}

--------------------

       <div class="parent"> 
            <a>我是a元素</a>
        </div>

(2)多行的行內(nèi)元素解決方案

組合使用display:table-cell和vertical-align:middle屬性來定義需要居中的元素的父容器元素生成效果器瘪,如下:

<style type="text/css">
            div.center-aligned {
            border:1px solid red;
             width: 200px;
              height: 200px;
              display: table;/*父容器使用display:table*/
            }
            div.center-core{
                display: table-cell;/*包裹行內(nèi)元素容器使用display:table-cell*/
                text-align: center;/*水平居中*/
                vertical-align: middle;/*垂直居中*/
            }
            span{
            
            background: #ddd;
}
        </style>

-----------
        <div class="center-aligned">
            <div class="center-core">
                <span>我是span元素</span>
                <span>我是span元素</span>
            </div>
        </div>

(3)已知高度的塊狀元素解決方案:負(fù)margin和定位配合

好處是行內(nèi)元素和塊級元素都適用,但是需要知道元素本身的寬高度。

         <style>
            div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                text-align: center;
                position: relative;
            }
            
            div span {
                width: 150px;
                height: 50px;
                background: #808080;
                position: absolute;
                margin: auto;
                left: 50%;
                top: 50%;
                margin-left: -75px;/*-自身width/2*/
                margin-top: -25px;/*-自身height/2*/
            }
        </style>  
        
        
        
    ------------    
        
        
        <div>
            <span>我是span元素</span>
        </div>

三.水平垂直居中

(1)已知高度和寬度的元素解決方案1:margin-auto和定位的組合使用

這是一種不常見的居中方法绘雁,可自適應(yīng)橡疼,比方案2更智能,如下:

<style>
            div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                position: relative;
            }
            
            div span {
                width: 150px;
                height: 50px;
                background: #808080;
                position: absolute;
                margin: auto;
                left: 0;
                right: 0;
                top: 0;
                bottom: 0;
            }
        </style>
        
        
        ---------------
        
        <div>
            <span>我是span元素</span>
        </div>

(2)已知高度和寬度的元素解決方案2:負(fù)margin和定位配合

position 元素已知寬度 父元素設(shè)置為:position: relative; 子元素設(shè)置為:position: absolute; 距上50%庐舟,據(jù)左50% 欣除;margin-left: -自身width/2

margin-top: -自身height/2

 <style>
            div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                text-align: center;
                position: relative;
            }
            
            div span {
                width: 150px;
                height: 50px;
                background: #808080;
                position: absolute;
                margin: auto;
                left: 50%;
                top: 50%;
                margin-left: -75px;/*-自身width/2*/
                margin-top: -25px;/*-自身height/2*/
            }
        </style>  
        
        
        
    ------------    
        
        
        <div>
            <span>我是span元素</span>
        </div>

(3)未知高度和寬度元素解決方案:使用translate居中

這種方法實現(xiàn)原理和負(fù)margin和定位的組合使用是一樣的,

就是用css3的屬性translate來達(dá)到和負(fù)margin一樣的作用挪略。

translate是transform的一個值历帚,在這里作用是定義2D轉(zhuǎn)換。

但是在IE9以下不支持

<style type="text/css">
            div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                position: relative;
            }
            
            div span {
                width: 150px;
                height: 50px;
                background: #ddd;
                position: absolute;
                left: 50%;
                top: 50%;
                transform: translate(-50%, -50%);
            }
        </style>
        
        ---------------
        <div>
            <span>行內(nèi)元素居中</span>
        </div>

(4)使用flex布局實現(xiàn):使用flex居中不需要知道元素本身寬高以及元素的屬性

    <style>
            div {
                border: 1px solid red;
                width: 200px;
                  /* 注意這里需要設(shè)置高度來查看垂直居中效果 */
                height: 200px;
                
                /*flex*/
                display: flex;
                justify-content: center;/*水平居中*/
                align-items: center;/*垂直居中*/
            }
            div span{
            
                background: #808080;
                
            }
        </style>
        
        
        -----
        <div>
            <span>我是span元素</span>
        </div>

(5)calc和定位的組合使用

calc是英文單詞calculate(計算)的縮寫杠娱,是css3的一個新增的功能挽牢,可以使用calc()給元素的border、margin摊求、pading禽拔、font-size和width等屬性設(shè)置動態(tài)值。

calc使元素居中的原理和負(fù)margin是一樣的,calc 允許基于當(dāng)前的頁面布局計算尺寸睹栖。

計算公式為:

top: calc(50% - (自身高度height/ 2));

left: calc(50% - (自身高度寬度 / 2));

<style type="text/css">
                div {
                border: 1px solid red;
                width: 200px;
                height: 200px;
                position: relative;
            }
            
            div span {
                width: 150px;
                height: 50px;
                background: #ddd;
                position: absolute;
                top: calc(50% - (50px / 2));
                left: calc(50% - (150px / 2));
        </style>
        
        
        
        --
        
        <div>
            <span>行內(nèi)元素居中</span>
        </div>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末硫惕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子野来,更是在濱河造成了極大的恐慌恼除,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曼氛,死亡現(xiàn)場離奇詭異豁辉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)舀患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門秋忙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人构舟,你說我怎么就攤上這事《掠模” “怎么了狗超?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朴下。 經(jīng)常有香客問我努咐,道長,這世上最難降的妖魔是什么殴胧? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任渗稍,我火速辦了婚禮,結(jié)果婚禮上团滥,老公的妹妹穿的比我還像新娘竿屹。我一直安慰自己,他們只是感情好灸姊,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布拱燃。 她就那樣靜靜地躺著,像睡著了一般力惯。 火紅的嫁衣襯著肌膚如雪碗誉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天父晶,我揣著相機(jī)與錄音哮缺,去河邊找鬼。 笑死甲喝,一個胖子當(dāng)著我的面吹牛尝苇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼茎匠,長吁一口氣:“原來是場噩夢啊……” “哼格仲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诵冒,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤凯肋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后汽馋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侮东,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年豹芯,在試婚紗的時候發(fā)現(xiàn)自己被綠了悄雅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铁蹈,死狀恐怖宽闲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情握牧,我是刑警寧澤容诬,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站沿腰,受9級特大地震影響览徒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颂龙,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一习蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧措嵌,春花似錦躲叼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包斑,卻和暖如春流礁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背罗丰。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工神帅, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萌抵。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓找御,卻偏偏與公主長得像元镀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霎桅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容