未知寬高div垂直水平居中的幾種方法

工作中我們經常遇到需要把一個標簽,在一個容器中垂直水平居中,但是我們又可能不確定這個標簽的寬高,或者是不固定寬高,那怎么做呢?

網上很多都是標簽內放文字,幾行幾行來做,針對不同行數做不同方法。今天我就說說一個標簽整體來垂直水平居中吧,面試也會經常遇到這種問題。

首先說說已知寬高的方法,用處也非常多,比如布局的時候,要絕對居中,或者是做banner圖的時候,也需要用到,不可能做一個放大縮小后整體在左,或者是在右吧,還有就是網站經常有那種一排標簽,中間有一張圖片,而且每張圖片大小寬高都不同,所有你不可能每一張單獨寫樣式吧,所以用處非常多。

先說說:已知寬高的我就說一種吧。利用定位,絕對居中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>李鵬-前端開發</title>
</head>
<style>
.box{
    width: 800px;
    height:800px;
    border:1px solid #000;
    position:relative;
}
.box .cen{
    width: 200px;
    height: 200px;
    background: #0ff;
    position:absolute;
    left:50%;
    top:50%;
    margin-left: -100px;
    margin-top:-100px;
}
</style>
<body>
    <div class="box">
        <div class="cen"></div>
    </div>
</body>
</html>

下面我就先說說未知寬高圖片的垂直水平居中方法吧:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>李鵬-前端開發</title>
</head>
<style>
.box{
    width: 800px;
    height:800px;
    border:1px solid #000;
    display:table-cell;
    text-align:center;
    vertical-align: middle;
}
.box img{
    vertical-align: middle;
}
</style>
<body>
    <div class="box">
        ![](images/1.jpg)
    </div>
</body>
</html>

那么,下面進入正題,說說未知寬高的方法吧。

方法一:利用定位+margin:auto

優點:這個方法目前我是絕對非常棒。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>李鵬-前端開發</title>
    <style>
        .box{
            width: 800px;
            height: 800px;
            border:1px solid #000;
            position:relative;
        }
        .cen{
            width: 200px;
            height: 200px;
            background: #0ff;
            position:absolute;
            left:0;
            top:0;
            bottom:0;
            right:0;
            margin:auto;
        }
    </style>  
</head>
<body>
    <div class="box">
        <div class="cen"></div>
    </div>
</body>
</html>
方法二:利用display:table-cell

缺點:IE6 7 是不支持display:inline-block

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>李鵬-前端開發</title>
    <style>
        .box{
            width: 800px;
            height: 800px;
            border:1px solid #000;
            display:table-cell;
            vertical-align: middle;
            text-align:center;
        }
        .cen{
            width: 200px;
            height: 200px;
            background: #0ff;
            vertical-align: middle;
            display:inline-block;
        }
    </style>  
</head>
<body>
    <div class="box">
        <div class="cen"></div>
    </div>
</body>
</html>
方法三:使用css3 transform:translate(-50%; -50%);

優點:高大上,可以在webkit內核的瀏覽器中使用
缺點:不支持IE9以下不支持transform屬性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>李鵬-前端開發</title>
</head>
<style>
.box{
    position: relative;
    height:800px;
    width: 800px;
    border:1px solid #000;
}
.box .cen{
    width: 200px;
    height: 200px;
    background: #0ff;
    position: absolute;
    top: 50%;
    left: 50%;
    color: #fff;
    transform: translate(-50%, -50%);
}
</style>
<body>
<div class="box">
        <div class="cen"></div>
    </div>
</body>
</html>
方法四:使用css3 flex布局

優點:簡單 快捷
缺點:兼容不好吧

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>李鵬-前端開發</title>
</head>
<style>
.parent4{
    display: flex;
    justify-content: center;
    align-items: center;
    width: 800px;
    height:800px;
    border:1px solid #000;
}
.parent4 .child{
    color:#fff;
    width: 200px;
    height: 200px;
    background: #0ff;
}
</style>
<body>
    <div class="parent4">
        <div class="child"></div>
    </div>
</body>
</html>

好了,一共就以上幾種方法,看網上有的說插入一個空標簽之類的,我覺得不怎么好,畢竟需要插入一個空標簽,還是不如我這幾種方法,大家覺得哪種喜歡就用哪種吧。 我是比較推薦第一種定位布局的那個。
以上,結束。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 13,814評論 1 92
  • 收聽音頻,戳鏈接,舊號itclan已暫停使用,歡迎關注微信itclanCoder公眾號可收聽更多音頻 前言 關于網...
    itclanCoder閱讀 8,215評論 3 30
  • 總結當前知道的對div嵌套標簽水平垂直居中方法,如果還有新的方法,請不吝賜教哦。好,下面開始列舉代碼咯。首先給需要...
    風銘閱讀 2,320評論 0 5
  • (順嵌,倒嵌) 錦旗絢麗意深長, 繡鳳描龍正氣藏。 海誓山盟心戀社, 棠花入韻韻悠揚。 棠花入韻韻悠揚, 海月初升...
    艾思閱讀 479評論 13 22
  • 文/Julia 胡適先生說:“一個人的前程,往往全靠他怎樣利用閑暇時間,閑暇定終生。” 讀書時代,有一個男同學,學...
    居里葉閱讀 454評論 0 3