面试题:让div水平垂直居中的多种方法

<div class="parent">
	<div class="child"></div>
</div>

1. 通过flex布局

html, body {
	margin: 0;
	padding: 0;
	height: 100%;  //高度必须设置,否则垂直方向不居中
}
div.parent {
	display: flex;
	height: 100%;  //高度必须设置,否则垂直方向不居中
	justify-content: center;
	align-items: center;
}
div.child {
	width: 200px;
	height: 200px;
	background-color: red;
}

2. 绝对定位 + margin偏移

			html, body {
				margin: 0;
				padding: 0;
				height: 100%;
			}
			div.parent {
				position: relative;
				height: 100%;
			}
			div.child {
				width: 200px;
				height: 200px;
				background-color: red;
				position: absolute;
				top: 50%;
				left: 50%;
				margin-top: -100px; //宽高的一半
				margin-left: -100px; //宽高的一半
			}

3. 绝对定位 + translate

			div.child {
				width: 200px;
				height: 200px;
				background-color: red;
				position: absolute;
				top: 50%;
				left: 50%;
				transform: translate(-50%, -50%);  //50%参照自身宽高
			}

4. 绝对定位 + margin:auto

			div.child {
				width: 200px;
				height: 200px;
				background-color: red;
				position: absolute;
				top: 0;
				bottom: 0;
				left: 0;
				right: 0;
				margin: auto;
			}

5. 使用 grid 布局

			div.parent {
				display: grid;  //父容器grid布局
				height: 100%;
			}
			div.child {
				justify-self: center;
				align-self: center;
				width: 200px;
				height: 200px;
				background-color: #0000FF;
			}

6. 伪元素

div.parent {
    font-size: 0;
    text-align: center;
    &::before {
        content: "";
        display: inline-block;
        width: 0;
        height: 100%;
        vertical-align: middle;
    }
}
div.child{
  display: inline-block;
  vertical-align: middle;
}

原理(转载):

设置inline-block和vertical-align:middle后,里面的元素会基于中间的文字准线居中对齐(学生时代的英语本子里面写字母,都是4条线形成三个空白区域,文字的对齐就是根据这几条线的)vertical-align更多信息可以看看张鑫旭博文; 然后,由于伪类是position:static(默认)的,那么伪类撑开了父元素的基准线(高度是100%),使得此时文字的基准线就是整个div.parent的中心了,另外vertical-align只影响inline或者inline-block的,所以div.child设置vertical-align就能居中了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值