实现方法:
1、撑开父元素高度: 设置padding(内边距)值 + 子元素高度
2、定位 position(子绝父相) + 偏移值 top + margin-top 回退 [ 需要计算,有点
麻烦
]
3、添加与小盒子(box1)同级的span标签(兄弟元素) + 基线对齐
4、弹性盒子布局 [
推荐
]
5、定位 position(子绝父相) + 偏移值 top:0;bottom:0; + 外边距 margin: auto;
示例
代码实现:
<div class="box">
<div class="box1"></div>
</div>
.box{
width: 500px;
height: 300px;
background-color: aquamarine;
}
.box1{
width: 200px;
height: 100px;
background-color: lightpink;
}
原始效果图:
接下来,
将使用这个例子来
测试
上面提到的几种实现垂直居中的
方法
以及
记录
解决测试过程中出现的一些
小问题
…
-
设置padding值 + 子元素高度 => 撑开父元素高度
.box{ width: 500px; background-color: aquamarine; padding: 100px 0; } .box1{ width: 200px; height: 100px; background-color: lightpink; }
效果图:
-
定位
position
+ 偏移值 top + margin-top 回退
.box{ width: 500px; height: 300px; background-color: aquamarine; position: relative; } .box1{ width: 200px; height: 100px; background-color: lightpink; position: absolute; /* 相对父级宽度50% */ top: 50%; margin-top: -50px; }
注意点:
只设置
left: 50%;
并不能实现垂直居中的效果:
如果想让小盒子垂直居中 ,需要向上移动半个小盒子的高度距离:
margin-top: -50px;
效果图:
-
小盒子(box1)设置同级span标签 + 基线对齐:
vertical-align: middle;
将span标签设置和父元素
一样的高度
且为
行内块元素
,为什么?因为
行内块元素
都有一个
基线对齐
的方式,设法将小盒子box1的基线与span的基线对齐,从而实现垂直居中的效果
.box1{ width: 200px; height: 100px; background-color: lightpink; display: inline-block; vertical-align: middle; } span{ height: 100%; display: inline-block; vertical-align: middle; }
效果图:
-
弹性布局:
display:flex;
[推荐]
align-items
: 设置y轴的对齐方式.box{ width: 500px; height: 300px; background-color: aquamarine; display: flex; align-items: center; } .box1{ width: 200px; height: 100px; background-color: lightpink; }
效果图:
-
定位
position
+ 偏移值
top:0;bottom:0;
.box{ width: 500px; height: 300px; background-color: aquamarine; position: relative; } .box1{ width: 200px; height: 100px; background-color: lightpink; position: absolute; top: 0; bottom: 0; }
此时,小盒子box1并没有实现垂直居中,为什么?
由于设置了
top: 0;bottom: 0;
导致小盒子不知道该向上还是向下,所以,迷失方向后小盒子直接
不动
了 ~如何让小盒子同时实现
top: 0;bottom: 0;
?需要给小盒子加上
外边距
:
margin: auto;
这样子能
自动分配
一个上下的边距将小盒子
撑大
,实现
top: 0;
的同时
bottom: 0;
,达到
垂直居中
的效果效果图: