1. 程式人生 > >css中的居中問題

css中的居中問題

行內內容的居中
如何讓一個容器的行內內容(文字和行內元素–inline/inlineblock)居中(當然inline-block比較特殊,即有行內屬性,又有塊級屬性)。有以下方法:

  1. text-align:center水平居中。在塊級父級元素上設定text-align:center,其內部的inline或inline-block的子元素以及文字內容會在父元素內居中。
  2. line-height垂直居中。line-height設定了行間的距離(行高),將要居中的元素的line-heigth值設定為和其塊級父元素的height值一樣時,其內部內容會垂直居中。
    注意:
    line-height不能使用負值。
    在塊級元素使用line-height是定義該元素基線之間的最小距離而不是最大距離。
  3. vertical-align:middle垂直居中。
    行內元素inline/linline-block/inline-table內部內容的居中,使用偽元素。
    父級{
    display:inline-block;
    vertical-align: middle;
    }
    父級::before//或者::after
    { content: '';
    display: inline-block;
    height: 100%;
    display:inline-block;
    vertical-align: middle;
    }

    注意:設定為middle也不一定是真正的對齊,某些字型的中線位置不一定頂部和底部的正中間。

提一下:
inline水平的元素margin/padding設定僅在左右方向上有效。

<style>
*{
    margin:0;
    padding:0;
}
p{
    width:100px;
    height:100px;
    background: yellow;
}
span{
    margin:30px 30px;
}
</style>
<body>
    <p class='one'></p>
    <span>sdfasd</span>
</body>

這裡寫圖片描述

塊級元素居中


block、list-item、inline-block等元素如何在其父元素中居中。

  1. margin/padding值設定居中。

  2. clac計算數值。margin值為=父容器寬/高的50%-自身寬/高的50%:
    居中元素{
    width: 20rem;
    height: 20rem;
    margin-left:calc(50% - 10rem);
    margin-top:calc(50% - 10rem); }

  3. margin:0 auto左右居中。要居中的塊級元素(block)元素設定margin:0 auto 。想知道margin:auto不能垂直居中的原因就懟這裡
    注意:對浮動元素(float)、絕對定位(absolute)和固定定位(fixed)的元素無效 。

  4. position:absolute居中。此方法不推薦使用,故不詳細解釋,想了解的自行查詢吧!

  5. 偏移量50%+負margin值。設定50%的水平和垂直偏移,然後設定的margin-top和margin-left值是要居中元素自身寬/高的一半的負數 。
    父級{ position: relative;}
    居中元素{
    position: absolute;
    height: 100px;
    width:100px;
    top: 50%;
    left:50%;
    margin-top:-50px;
    margin-left:-50px;}

  6. 偏移量50%+負50%translate值。
    父級{ position: relative;}
    居中元素 {
    position: absolute;
    top: 50%;
    left:50%;
    transform: translate(-50%,-50%);}

  7. flex彈性佈局居中。父元素設定為彈性盒子(容器),子元素就成為了彈性元素,利用flex相關屬性進行居中。
    父級{
    display:flex; /*使用flex盒子*/
    justify-content:center;/*水平軸上居中*/
    align-items:center;/*垂直軸上居中*/}

    父元素設定為彈性容器display:flex,子元素設定magrin:auto :
    .父級{
    display:flex;
    }
    .居中元素{
    margin: auto;
    }

    注意:

    • 如果有多個彈性子元素,預設情況下彈性子元素會成一橫排分佈在父元素容器中。
    • flex預設將子元素水平排列到一行(flex-direction:row),使用flex-direction:column可以使子元素垂直排成一列。
    • flex預設子元素不折行顯示(flex-wrap: nowrap ),使用flex-wrap: wrap可使子元素自動折行顯示(當一行寬/高度不足容下多個子元素時折行為多行/列)。