文字垂直居中在前端开发十分普遍,最常用的方法是 text-center + line-height 属性来实现
<style type="text/css"> .div1 { width: 100px; height: 100px; border: 1px solid #ccc; box-sizing: border-box; text-align: center; line-height: 100px; }</style><body> <div class="div1"> <span>居中</span> </div></body>
缺陷:如果遇到宽度不够换行的,就会变成这样
line-height 来实现垂直居中并不是那么完美,所以探索了其他方法
table 和 table-cell
父容器实现 table 表格显示,子元素 table-cell + vertical-align 垂直居中
<html> <head> <style type="text/css"> body { font-family: 'lucida grande', sans-serif; } .div1 { width: 100px; height: 300px; border: 1px solid #ccc; display: table; } .center-text { display: table-cell; vertical-align: middle; } </style> </head> <body> <div class="div1"> <div class="center-text">很长的很长的很长的很长的很长的</div> </div> </body></html>
flex 布局
flex 可以很轻松的垂直居中元素,文字,在父元素设置 justify-content + align-items 属性
.div4 { display: flex; justify-content: center; align-items: center;}
transform
css3 的 transform 可以变换 x、y 轴的坐标,在居中的元素使用绝对定位再加上自身的 translateX + translateY 来改变 x、y 的坐标
<html> <head> <style type="text/css"> .div1 { position: relative; width: 100px; height: 300px; border: 1px solid #ccc; display: table; } span { position: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); } </style> </head> <body> <div class="div1"> <span>很长的很长的很长的很长的很长的</span> </div> </body></html>