CSS水平垂直居中的幾種方法

直接進入主題!web

1、脫離文檔流元素的居中

方法一:margin:auto法

CSS代碼:瀏覽器

div{
      width: 300px;
      height: 300px;
      position: relative;
      border: 1px solid #465468;
 }
 img{
      position: absolute;
      margin: auto;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
 }

HTML代碼:flex

<div>
   <img src="prince.png">
</div>

效果圖:spa

當一個元素絕對定位時,它會根據第一個不是static定位的祖先元素定位,所以這裏的img根據外層div定位。3d

方法二:負margin法

CSS代碼:code

.container{
      width: 500px;
      height: 400px;
      border: 2px solid #379;
      position: relative;
 }
 .inner{
      width: 480px;
      height: 380px;
      background-color: #746;
      position: absolute;
      top: 50%;
      left: 50%;
      margin-top: -190px; /*height的一半*/
      margin-left: -240px; /*width的一半*/
 }

HTML代碼:blog

<div class="container">
    <div class="inner"></div>
</div>

效果圖:
圖片

這裏,咱們首先用top:50%和left:50%讓inner的座標原點(左上角)移動到container的中心,而後再利用負margin讓它往左偏移自身寬的一半,再往上偏移自身高的一半,這樣inner的中心點就跟container的中心點對齊了。文檔

2、未脫離文檔流元素的居中

方法一:table-cell法

CSS代碼:it

div{
    width: 260px;
    height: 230px;
    border: 3px solid #555;
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}
img{
    vertical-align: middle;
}

HTML代碼:

<div>
    <img src="prince.png">
</div>

效果圖:

div上面的vertical-align: middle是控制垂直方向上的居中的,而text-align: center是控制水平方向的。一個有趣的事實是,當咱們去掉img的vertical-align: middle以後,是這樣的:

仍是居中啊!真的居中嗎?
咱們看到,圖片往上移了一點,在垂直方向上已經不居中了。爲何?我也不知道,若是你知道,能夠告訴我,不勝感激。
可是若是咱們把圖片換成文字:
CSS代碼:

div{
    border: 3px solid #555;
    width: 300px;
    height: 200px;
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}
span{
    vertical-align: middle;
}

HTML代碼:

<div>
    <span>這是放在span中的文字,經過外層div設置display: table-cell以及vertical-align: middle實現垂直居中。</span>
</div>

效果圖:

當咱們把span的vertical-align: middle去掉以後是這樣的:

看到差異沒?文字的行間距更小了。若是你在本身電腦上運行代碼就會發現,這幾行字是向中間靠了,而並無像圖片同樣往上移。我也在想辦法搞清楚這是怎麼回事,若是你知道緣由,也煩請告訴我。

方法二:彈性盒子法

CSS代碼:

.container{
      width: 300px;
      height: 200px;
      border: 3px solid #546461;
      display: -webkit-flex;
      display: flex;
      -webkit-align-items: center;
      align-items: center;
      -webkit-justify-content: center;
      justify-content: center;
 }
 .inner{
      border: 3px solid #458761;
      padding: 20px;
 }

HTML代碼:

<div class="container">
    <div class="inner">
        我在容器中水平垂直居中
    </div>
</div>

效果圖:

align-items控制垂直方向的居中,justify-content控制水平方向的居中。這是CSS3的新屬性,瀏覽器支持狀況以下:

以上!

相關文章
相關標籤/搜索