Hbuilderdiv 的垂直居中
css 的div 垂直居中的⽅法,百分⽐div 垂直居中
前⾔
我们都知道,固定⾼宽的div 在⽹页中垂直居中很简单,相信⼤家也很容易的写出来,但是不是固定⾼宽的div 如何垂直居中呢?我们在⽹页布局,特别是⼿机等web 端⽹页经常是不固定⾼宽的div ,那么这些div 如何垂直居中呢?这篇⽂章,我总结⼀下。
固定⾼宽div
垂直居中
如上图,固定⾼宽的很简单,写法如下:
不固定⾼宽div 垂直居中的⽅法
⽅法⼀:
⽤⼀个“ghost”伪元素(看不见的伪元素)和 inline-block / vertical-align 可以搞定居中,⾮常巧妙。但是这个⽅法要求待居中的元素是 inline-block ,不是⼀个真正通⽤的⽅案。
html 如下:
css 如下: position : absolute ;
left : 50%;
top : 50%;
width :200px ;
height :100px ;
margin -left :-100px ;
margin -top :-50px ;
<div class ="block" style ="height : 300px ;">
<div class ="centered">
<h1>haorooms 案例题⽬</h1>
<p>haorooms 案例内容,haorooms 案例内容haorooms 案例内容haorooms 案例内容haorooms 案例内容haorooms 案例内容haorooms 案例内容haorooms 案例内容
</div>
</div>
/* 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%;
}
⽅法⼆:
可以⽤table布局⽅法,但是这种⽅法也有局限性!
写法如下:
<table >
<tr>
<td >
Unknown stuff to be centered.
</td>
</tr>
</table>
由于table写法⽐较费时,你也可以⽤div代替table,写法如下:
html:
<div class="something-semantic">
<div class="something-else-semantic">
Unknown stuff to be centered.
</div>
</div>
css:
.
something-semantic {
display: table;
width:100%;
}
.something-else-semantic {
display: table-cell;
text-align: center;
vertical-align: middle;
}
⽅法三,终极解决⽅法:
以上2中⽅法可能都有其局限性,我介绍的第三中⽅法是⽐较成熟的不是固定⾼宽div的垂直居中的⽅法!但是⽅法是css3的写法,想兼容IE8的童鞋们,建议⽤上⾯的⽅法!
⽅法和我们固定⾼宽的差不多,但是不⽤margin我们⽤的是 translate()
demo如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="/1999/xhtml"xml:lang="en">
<head>
<meta http-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>haorooms不固定⾼度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>
</html>
我上⾯的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进⾏垂直居中div中的div居中
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;}
这样就可以实现垂直居中了,是不是很简单
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论