tac = text-align: center; 水平居中css
vam = vertical-align: middle;html
父容器:display: table; 子容器:display: table-cell; text-align: center; vertical-align: middle;
<div class="container"> <div class="box box1">1</div> <div class="box box2">2</div> <div class="box box3">3</div> </div>
.container { display: table; } .box { display: table-cell; width: 150px; height: 150px; text-align: center; vertical-align: middle; border: 1px solid #00f }
容器(指放置文本的容器):设置height 将line-height设置与height同高 text-align: center;
html结构与1.相同,不过不须要父元素containerflex
.box { width: 150px; height: 150px; line-height: 150px; text-align: center; border: 1px solid #00f }
posa = position: absolute;spa
父容器带有 relative、absolute、fixed的其中一种定位 子容器:position:absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
<div class="container"> <div class="box box1">盒子</div> </div>
.container { margin-top: 200px; margin-left: 200px; width: 450px; height: 450px; border: 2px solid #be572a; position: relative; } .box { width: 100px; height: 100px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); border: 1px solid #00f }
子容器设置绝对定位后,距离父容器的宽高比是根据父容器的宽高来决定的code
因此咱们须要设置top: 50%; left: 50%;orm
这时,咱们看到,只有盒子的左上角是水平垂直居中的htm
而后,咱们还须要“移回去”;子容器设置的translate是根据自身宽高来移动的,因此咱们在移回自身宽高的50%便可获得盒子的水平垂直居中blog
补充:既然translate移动的是自身的宽高,因此若是父容器已定宽高,则子容器能够设置margin-top和margin-left也能够达到水平垂直居中的效果it
为了与上例区分扩大了子元素的宽高io
父元素: display: flex; align-items: center; justify-content: center;
父元素设置flex后设置justify-content和align-items控制子元素在主轴和交叉轴上的对齐方式
<div class="container"> <div class="box box1">我是flex</div> </div>
.container { margin-top: 200px; margin-left: 200px; width: 450px; height: 450px; border: 2px solid #be572a; display: flex; align-items: center; justify-content: center; } .box { width: 150px; height: 150px; border: 1px solid #00f }
父容器带有 relative、absolute、fixed的其中一种定位 子容器:position:absolute; left: 0; right: 0; margin: 0 auto;
<div class="container"> <div class="box box1">left right拉扯了宽度,margin 0 auto控制水平居中</div> </div>
.container { margin-top: 200px; margin-left: 200px; width: 450px; height: 200px; border: 2px solid #be572a; position: relative; } .box { width: 200px; height: 150px; position: absolute; left: 0; right: 0; margin: 0 auto; border: 1px solid #00f }
其实这里有人会疑惑,父容器已经设置了宽高,那直接margin 0 auto不就行了吗?
那是在子容器没有设置绝对定位的状况下能够直接margin 0 auto
若是咱们由于须要,在子容器设置了绝对定位,那即便父容器设置了宽高,子容器margin 0 auto也不会有水平居中效果
/*left: 0; right: 0;*/