1. 程式人生 > >css中固定寬高div與不固定寬高div垂直居中的處理辦法

css中固定寬高div與不固定寬高div垂直居中的處理辦法

分配 css代碼 http min har 空間 -i dex round

固定高寬div垂直居中

技術分享

如上圖,固定高寬的很簡單,寫法如下:

1  position: absolute;
2  left: 50%;
3  top: 50%;
4 width:200px;
5 height:100px;
6 margin-left:-100px;
7 margin-top:-50px;

不固定高寬div垂直居中的方法

方法一(此div元素應是 inline-block):

用一個“ghost”偽元素(看不見的偽元素)和 inline-block / vertical-align 可以搞定居中,非常巧妙。但是這個方法要求待居中的元素是 inline-block,不是一個真正通用的方案。

html如下:

<div class="block" style="height: 300px;">

    <div class="centered">
        <h1>案例題目</h1>
        <p>案例內容案例內容案例內容案例內容案例內容</p>
    </div>

</div>
 

css如下:

/* This parent can be any width and height */
.block {
  text-align: center;
}

/* The ghost, nudged to maintain perfect centering 
*/ .block:before { content: ‘‘; display: inline-block; height: 100%; vertical-align: middle; margin-right: -0.25em; /* Adjusts for spacing */ } /* The element to be centered, can also be of any width and height */ .centered { display: inline-block; vertical-align: middle; width: 50%; }

結果如下:技術分享

方法二

方法是用的css3的寫法,想兼容IE8的還是建議用上面的方法!

方法和我們固定高寬的差不多,但是不用margin我們用的是 translate()

代碼如下:

 <title>不固定高度div寫法</title>
 <style>
.center {
  position: fixed;
  top: 50%;
  left: 50%;
  background-color: #000;
  width:50%;
  height: 50%;
-webkit-transform: translateX(-50%) translateY(-50%);
}
 </style>
</head>
<body>
    <div class="center"></div>
</body>

我上面的css只是針對webkit內核的瀏覽器,其他內核瀏覽器寫法如下:

-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);

有些彈出層的樣式,也可以用這個方法居中

position: fixed;
top: 50%;
left: 50%;
width: 50%;
max-width: 630px;
min-width: 320px;
height: auto;
z-index: 2000;
visibility: hidden;
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);

css3不定寬高水平垂直居中

只要三句話就可以實現不定寬高水平垂直居中。

justify-content:center;//子元素水平居中
align-items:center;//子元素垂直居中
display:-webkit-flex;

在父級元素上面加上上面3句話,就可以實現子元素水平垂直居中。

運用margin:auto進行垂直居中

margin的值設置為auto,可以讓我們對剩余空間進行分配!我們知道,塊級元素設置為margin:0 auto;可以左右居中顯示!那有沒有辦法讓margin設置為margin:auto之後,上下左右都居中呢?上下左右都居中,就可以實現我們的垂直居中了!

答案是有的,只要我們讓上下有足夠的空間,就可以讓margin的auto來分配上下空間。

我們可以利用定位的方式,讓margin上下左右都有足夠的空間!那麽就可以用margin:auto來實現垂直居中了!

實現html如下:(做一個簡單的垂直彈框)

<div class="father">
    <div class="son"></div>
</div>

css代碼如下,很簡單,兼容性也蠻好,支持IE8+

.father{position:fixed;
width:100%;
height:100%;
top:0;
left
:0;
background-color:rgba(0,0,0,.7);} .son{position: absolute;
top:0;
left:0;
bottom:0;
right:0;
width:50%;
height:50%;
margin:auto;
background-color:red;}

這樣就可以實現垂直居中了

css中固定寬高div與不固定寬高div垂直居中的處理辦法