CSS垂直居中,水平居中

如何進行CSS垂直居中是開發中常常遇到的問題。html

通常來講有以下的解決方案。瀏覽器

例如以下的html,須要將.box內部的img進行垂直居中。佈局

<div class='box'>
        <img class='img' />
    </div>    

 

1. 使用inline-block佈局,flex

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;                    
    text-align: center;
}
.box:before {
    content: '';
    vertical-align: middle;
    height: 100%;
    display: inline-block;
}
.img {
    width: 50px;
    height: 50px;
    display: inline-block;
    vertical-align: middle;
}    

須要在頁面上加入:before僞元素, 以及將內部的元素調整成inline-block。只要對這兩個屬性支持的瀏覽器均可以支持。spa

2. 能夠使用absulote佈局進行定位, 利用margin消除子元素高度和寬度的影響。firefox

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;
    position: relative;
}

.img {
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -25px 0 0 -25px;
    width: 50px;
    height: 50px;
}

須要將父節點改爲relative佈局, 並且子節點須要定高定寬。code

3. 相似的,也能夠使用relative進行佈局,須要注意的是,內部的img須要標註成display: block。通過實測,firefox對img的默認display爲inline。orm

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;        
}

.img {
    position: relative;
    left: 50%;
    top: 50%;
    margin: -25px 0 0 -25px;            
    background-color: green;
    width: 50px;
    height: 50px;
    display: block;
}     

一樣的缺點是,須要內部元素定高定寬。htm

4. 能夠使用transform來進行定位。blog

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;            
}

.img {
    display: block;
    height: 50px;
    margin: 50% 0 0 50%;
    transform: translate(-50%, -50%);
    width: 50px;
}

惟一的缺點是須要對transform的支持。 IE對此屬性的支持是IE9.

5. 使用flex佈局

 使用flex-flow: row; align-items: center將其豎直居中。使用margin令其水平居中。

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;   
    display: flex;
    flex-flow: row;
    align-items: center;
}

.img {            
    height: 50px;
    width: 50px;            
    margin: 0 auto;
}        

也能夠簡單的使用margin: auto.

.box {
    width: 200px;
    height: 200px;
    border: 1px solid black;   
    display: flex;
}

.img {            
    height: 50px;
    width: 50px;            
    margin: auto;
}        

 須要對display: flex的支持。

相關文章
相關標籤/搜索