CSS-居中

CSS-居中

一. 水平居中

1. 行內(nèi)元素水平居中

使用text-align屬性,對行內(nèi)元素定義居中

<style>
    .box {
      border: 1px solid red;
      text-align: center;
      margin: 20px;
    }
    .box .btn {
      margin: 0 10px;
    }
    .btn {
      display: inline-block;
      padding: 3px 5px;
      background: green;
      color: #fff;
      border-radius: 3px;    
      text-decoration: none;      
    }
 </style>
<body>
    <div class="box">
      hello Nicolas ZHAO SI
    </div>
    <div class="box">
      <a href="" class="btn">點我</a>
      <a href="" class="btn">點我</a>
    </div>
</body>
行內(nèi)元素水平居中

2. 塊級元素水平居中

塊級元素默認(rèn)就會獨占橫向的空間,因此一般說的塊級元素的居中,是定義了寬度的前提下。

    /*
 如下所示: 再塊級元素給定寬度的前提下,設(shè)置左右margin為auto自動即可,
上下marigin隨意 
      另外由于內(nèi)部有個行內(nèi)塊級元素按鈕,因此設(shè)置text-align行內(nèi)元素居中
    */
    .box2 {
      border: 1px solid black;
      width: 500px;
      margin: 0 auto;
      text-align: center;
    }
  <div class="box2">
    <a href="" class="btn">點我</a>
  </div>
塊級元素水平居中

二. 垂直居中

1. 段落文字垂直居中

一般不要把父容器的高度固定死,由里面的內(nèi)容來絕對撐開,這樣可以做到動態(tài)的居中。

/* 只需要給父容器上下設(shè)置固定padding即可 */ 
  <style>
    .box {
      border: 1px solid red;
      text-align: center;
      padding: 30px;
    }
  </style>
<body>
  <div class="box">
    <h1>Hello fantastic baby!</h1>
    <h1>Hello fantastic baby!</h1>
    <h1>Hello fantastic baby!</h1>
  </div>
</body>
段落文字垂直居中

2. 單行文字、按鈕、icon的垂直居中

如下所示,如果對按鈕定義了高度,而沒有指定行高,則可能會導(dǎo)致按鈕文字不會垂直居中,此時,你可以對單行文本設(shè)置行高=高度,從而使容器在任意高度下,內(nèi)部文字都是垂直居中的。

  <style>
    .box {
      border: 1px solid red;
      text-align: center;
      padding: 20px;
    }
    .btn {
      width: 70px;
      height: 50px;
      line-height: 50px;
      display: inline-block;
      border: 1px solid black;
      color: #fff;
      background: #666;
      text-decoration: none;
    }
  </style>
按鈕文本的垂直居中

三. 絕對居中

1. 滿屏

這種居中方式,適合做首頁首屏,是一種全屏的方式,隨著窗口大小的調(diào)整會自適應(yīng)(圖中灰色背景)

<style>

    /* 為全屏的容器box以及其上層所有父級元素設(shè)置高度100%,寬度自適應(yīng) */
    body,html {
      height: 100%;
      margin: 0;
    }

    /* 
    這里的box容器為了達(dá)到全屏效果,也可以不定義高度為100%,而是采用如下方案,使用絕對定位,同時距離四個邊界距離為0,此法可以用來做屏幕彈框
    .box {
     position: absolute;
    top: 0; bottom: 0; left: 0; right: 0;
    }
    */

    .box {
      height: 100%;
      background-color: rgba(0,0,0,0.4);
    }
    .box1 {
      width: 300px;
      height: 200px;
      background: deepskyblue;
      border: 1px solid;
      text-align: center;
    }
  </style>
<body>
  <div class="box">
    <div class="box1">
    <h1>hello</h1>
    <p>歡迎來到召喚師峽谷</p>
  </div>
  </div>
</body>
背景滿屏

2. 具有固定寬高的容器絕對居中

你一定留意到了,上面實現(xiàn)全屏的例子,還有一個藍(lán)色的容器,擁有一定的寬高,而又不是全屏,該如何居中呢?別著急,往下看:

    /* 事實上,你只需要對這個藍(lán)色容器,也使用絕對定位,然后距離左邊50%,距離上邊50%。
    但是在定位中用來計算距離的點是容器的左上角,所以還需要分別添加負(fù)margin,其為容器高度的一半,
    如果你不理解, 沒關(guān)系,你先試一下就知道為什么了*/
    .box1 {
        position: absolute;
        left: 50%;
        top: 50%;
        margin-left: -150px;
        margin-top: -100px;
        width: 300px;
        height: 200px;
        background: deepskyblue;
        border: 1px solid;
        text-align: center;
      }
使用了絕對定位,但是沒有添加負(fù)margin之前
使用了絕對定位,并且添加了負(fù)margin之后

3. 非固定寬高的容器絕對居中

這時候有人問了,如果想要居中的容器,不設(shè)置固定寬高,而是按照需求,由內(nèi)部的元素自由的撐開呢?
問得好!如果沒有了固定寬高,那么你就不能再使用負(fù)margin來做絕對定位后的調(diào)整了,因為你的內(nèi)容是不固定,日后可能是變化的,怎么辦?
這時候你需要學(xué)習(xí)一個CSS3的屬性,叫做transform,使用方法如下:

transform: translate(-50%,-50%);

用這個屬性代替被放棄的負(fù)margin即可,translate()內(nèi)部的兩個屬性值,分別代表水平和垂直方向的位置偏移量,右→,下↓為正,因此transform: translate(-50%,-50%)表示容器向左和向上分別偏移自身寬和高各50%的距離。

4. 偽元素實現(xiàn)非固定寬高的水平垂直居中

這種方法,元素寬高隨意,采用前或后添加偽元素,使用對齊的屬性,然后另偽元素“消失”即可。

  <style>
    /* 定義父容器固定高度,并且內(nèi)容水平居中 */
    .dad {
      height: 400px;
      border: 1px solid;
      text-align: center;
    }
    /* 定義容器內(nèi)偽元素高度為動態(tài)100%,并且展現(xiàn)方式為行內(nèi)塊級,同時中部垂直對齊 */
    .dad::before {
      content: '';
      height: 100%;
      display: inline-block;
      border: 1px solid;
      vertical-align: middle;
    }
    /* 前后兩個偽元素一個就可以,這是為了形象演示,加了兩個 */
    .dad::after {
      content: '';
      height: 100%;
      display: inline-block;
      border: 1px solid;
      vertical-align: middle;
    }
    /* 要居中的元素同樣定義行內(nèi)塊級,并且中部垂直對齊 */
    .baby {
      display: inline-block;
      border: 1px solid red;
      vertical-align: middle;
    }
  </style>
</head>
<body>
  <div class="dad">
    <div class="baby">我要居中!</div>
  </div>
</body>
借用偽元素實現(xiàn)垂直水平居中

總結(jié):

關(guān)于居中方式有十幾種不同的方式,分別有自己的使用場景,選擇適當(dāng)?shù)木又蟹绞胶荜P(guān)鍵,這個一方面看前人總結(jié)的經(jīng)驗,多google幾篇不同作者的文章,對比著看,另一方面只有靠自己在學(xué)習(xí)工作中不斷的摸索總結(jié),形成自己的經(jīng)驗。

參考

MDN:translate()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在學(xué)習(xí)前端的過程中,發(fā)現(xiàn)元素和文本的水平居中和垂直居中,是經(jīng)常會出現(xiàn)的問題,在實際工作中也會經(jīng)常碰到。居中的技巧有...
  • 水平居中 行內(nèi)或類行內(nèi)元素 在塊級父容器中讓行內(nèi)元素居中,只需使用 text-align: center; : 這...
    萊昂納德剛閱讀 280評論 0 0
  • 水平居中設(shè)置-行內(nèi)元素 我們在實際工作中常會遇到需要設(shè)置水平居中的場景,比如為了美觀,文章的標(biāo)題一般都是水平居中顯...
    CAICL閱讀 502評論 0 3
  • 在CSS中如何居中這事兒是CSS為人所抱怨的典型代表之一?!盀槊@么難?%>_<%”,開發(fā)者們抱怨道。我認(rèn)為這個...
    紅綠燈的黃閱讀 1,174評論 0 1
  • 時間過去了,也就過去了,你不能讓他倒流,即使你擁有多啦A夢的時光機(jī)可以回到過去,你也不會是當(dāng)初的你了。 我們總在悲...
    Kani蟹閱讀 171評論 0 0

友情鏈接更多精彩內(nèi)容