文字垂直居中在前端开发十分普遍,最常用的方法是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>

缺陷:如果遇到宽度不够换行的,就会变成这样

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>