以下总结了一些常见的元素垂直居中方法:
首先,基本的html和CSS为
#wrap{ width: 320px; height: 160px; background: red; } #wrap>div{ width: 50px; height: 50px; background: black; color: #fff; } <div id="wrap"> <div class="v-center">我是前端狗</div> </div>
方法:
/*方案一:绝对定位负margin50%方法*/ /*#wrap{position: relative;}*/ /*.v-center{ position: absolute; top: 50%; left: 50%; margin-left: -25px; margin-top: -25px; }*/ /*方案一 优化版:利用calc支持单位运算,致命缺点UC这2货嗝屁了,国内移动端别想了*/ /*.v-center{ position: absolute; top: calc(50% - 25px); left: calc(50% - 25px); }*/ /*方案一 再优化版:利用translate * 注意transform需要加上webkit UC QQ 自带浏览器在本手机上完美支持 * 优点是不需要知道居中元素的高宽!!! * 这里translate的50%就是自己高宽的50%,而margin是以父亲的宽度为基准 * */ /*.v-center{ position: absolute; top: 50%; left: 50%; -webkit-transform: translate(-50%,-50%); }*/ /*方案二: 脱离绝对定位,利用视口单位 * 因为vh是视口单位,视口就是屏幕可视区域,也就是说,这种办法永远在屏幕居中 * 居中弹层才考虑这种办法,并且UC还是不支持 * 好吧,这种方法当我没说 * */ /*.v-center{ margin: 50vh auto 0; -webkit-transform: translateY(-50%); }*/ /*方案三: table-cell * 请不要歧视table,table-cell在这个demo中支持度完美 * 但是wrap此时不能使用margin了,就像每一种药都多少有点副作用一样。。 */ /*#wrap{ display: table-cell; vertical-align: middle; text-align: center; } .v-center{ display: inline-block; }*/ /*方案四: 利用浮动元素 * 支持度完美 * 缺点是还是需要知道元素高度,以及hack味道很浓 */ /*#wrap::before{ content: ‘‘; float: left; height:50%; margin-bottom:-25px; } .v-center{ clear:both; margin: auto; }*/ /*方案五: flex *UC不支持 * */ #wrap{ display: -webkit-box; display: -webkit-flex; display: flex; } .v-center{ margin: auto; }
最后有个好消息,QQ浏览器的X5即将退出历史舞台被chrome37替换,UC你看着办。
时间: 2024-10-29 10:45:37