CSS未知寬高元素水平垂直居中

方法一 :table、cell-table

思路:顯示設置父元素爲:table,子元素爲:cell-table,這樣就能夠使用vertical-align: center,實現水平居中
優勢:父元素(parent)能夠動態的改變高度(table元素的特性)
缺點:IE8如下不支持css

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知寬高元素水平垂直居中</title>
</head>
<style>

.parent1{
    display: table;
    height:300px;
    width: 300px;
    background-color: #FD0C70;
}
.parent1 .child{
    display: table-cell;
    vertical-align: middle;
    text-align: center;
    color: #fff;
    font-size: 16px;
}

</style>
<body>
    <div class="parent1">
        <div class="child">hello world-1</div>
    </div>
</body>
</html>

 

方法二:

思路:使用一個空標籤span設置他的vertical-align基準線爲中間,而且讓他爲inline-block,寬度爲0
缺點:多了一個沒用的空標籤,display:inline-blockIE 6 7是不支持的(添加上:_zoom1;*display:inline)。
固然也能夠使用僞元素來代替span標籤,不過IE支持也很差,但這是後話了html

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知寬高元素水平垂直居中</title>
</head>
<style>
.parent2{
    height:300px;
    width: 300px;
    text-align: center;
    background: #FD0C70;
}
.parent2 span{
    display: inline-block;;
    width: 0;
    height: 100%;
    vertical-align: middle;
    zoom: 1;/*BFC*/
    *display: inline;
}
.parent2 .child{
    display: inline-block;
    color: #fff;
    zoom: 1;/*BFC*/
    *display: inline;
}

</style>
<body>
    <div class="parent1">
        <div class="child">hello world-1</div>
    </div>

    <div class="parent2">
        <span></span>
        <div class="child">hello world-2</div>
    </div>
</body>
</html>

 

方法三:絕對定位

思路:子元素絕對定位,距離頂部 50%,左邊50%,而後使用css3 transform:translate(-50%; -50%)
優勢:高大上,能夠在webkit內核的瀏覽器中使用
缺點:不支持IE9如下不支持transform屬性css3

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知寬高元素水平垂直居中</title>
</head>
<style>
.parent3{
    position: relative;
    height:300px;
    width: 300px;
    background: #FD0C70;
}
.parent3 .child{
    position: absolute;
    top: 50%;
    left: 50%;
    color: #fff;
    transform: translate(-50%, -50%);
}
</style>
<body>
<div class="parent3">
        <div class="child">hello world-3</div>
    </div>
</body>
</html>

方法四:彈性盒子flex

思路:使用css3 flex佈局
優勢:簡單 快捷
缺點:兼容很差吧,詳情見:http://caniuse.com/#search=flexweb

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>未知寬高元素水平垂直居中</title>
</head>
<style>
.parent4{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 300px;
    height:300px;
    background: #FD0C70;
}
.parent4 .child{
    color:#fff;
}
</style>
<body>div> <div class="parent4">
        <div class="child">hello world-4</div>
    </div>
</body>
</html>
相關文章
相關標籤/搜索