参考:CSS: 常用的元素居中方法
CSS居中布局总结
1.水平居中
(1)文本水平居中
text-align: center;
(2)块级元素水平居中
①设置margin
margin: auto;
②display:inline-block+text-align:center
.parent { width: 400px; height: 400px; background-color: aquamarine; text-align: center; } .child { width: 100px; height: 100px; background-color: #43ff26; display: inline-block; }
这样可以使一块级元素拥有一些inline元素的特性。
③absolute+transform
.parent {position:relative;}
.child {position:absolute;left:50%;transform:translateX(-50%);}
④ flex+justify-content
.parent { width: 400px; height: 400px; background-color: aquamarine; display: flex; justify-content: center; }
2.垂直居中
(1)文本垂直居中
①设置line-height和父元素高度一致,只适合单行文本的情况下。
(2)块级元素垂直居中
①table-cell+vertical-align
.parent {display:table-cell;vertical-align:middle;}
优点:只需设置父节点,兼容性好
②absolute+transform
.parent {position:relative;} .child{position:absolute;top:50%;transform:translateY(-50%);}
③ flex+align-items
.parent {display:flex;align-items:center;}
3.水平垂直居中
(1)文本元素
text-align:center+line-height
(2)块级元素
①inline-block+text-align+table-cell+vertical-align
.parent {text-align:center;display:table-cell;vertical-align:middle;}
.child {display:inline-block;}
②absolute+transform
.parent {position:relative;}
.child{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);}
③flex+justify-content+align-items
.parent {display:flex;justify-content:center;align-items:center;}
④负margin(需精确计算长宽)
<div class="absolute_p1"> <div class="absolute_c1"></div> </div> .absolute_p1 { position: relative; width: 200px; height: 200px; } .absolute_p1 .absolute_c1 { position: absolute; /* fixed 同理 */ left: 50%; top: 50%; width: 100px; height: 100px; margin-left: -50px; margin-top: -50px; /* 需根据宽高计算偏移量 */ }
- 原理: 通过定位使元素左上角居中,再通过偏移值margin调整使元素中心居中
- 缺点:高度宽度需事先知道,得通过其来计算负margin(好烦)
⑤定位实现居中(不需计算偏移值)
<div class="absolute_p2"> <div class="absolute_c2"></div> </div> .absolute_p2 { position: relative; width: 200px; height: 200px; } .absolute_p2 .absolute_c2 { position: absolute; /* fixed 同理 */ left: 0; top: 0; bottom: 0; right: 0; /* 定位为 0 */ width: 100px; height: 100px; margin: auto; /* 不用计算偏移量 */ }
原理: 原理我也不知道啊!估计定位都给0了,元素自己也不知道该去哪儿,只好待在原地不知所措...