一、盒子没有固定的宽和高
方案 1 、Transforms 变形
这是最简单的方法,不仅能实现绝对居中同样的效果,也支持联合可变高度方式使用。内容块定义.必须加上
position: absolute;
top: 50%; left: 50%;
transform: translate(-50%,-50%);
优点:
1.内容可变高度
2.代码量少
缺点:
- IE8不支持
- 属性需要写浏览器厂商前缀
- 可能干扰其他transform效果
4.某些情形下会出现文本或元素边界渲染模糊的现象
1、父元素相对定位,子元素决定定位top: 50%;left: 50%;transform: translate(-50%, -50%);
<div style="padding: 20px;
background: orange;
color: #fff;
position: absolute;
top: 50%;
left: 50%;
border-radius: 5px;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);">
</div>
2、父子元素进行定位,对子元素绝对定位,子元素margin:auto;top:0;left:0;bottom:0;right:0; (定位布局)
<div style="width:200px;height:200px;border:solid blue;position:relative;">
<div style="width:100px;height:100px;
background:red;;
margin:auto;
position:absolute;
top:0;left:0;
bottom:0;right:0;">
</div>
</div>
3、父元素相对定位,对子元素绝对定位,子元素left:50%,top:50%;margin-left:-子元素一半的宽度;margin-top: - 子元素一半的高度 (百分比布局)
<div style="width:200px;height:200px; border:2px solid #000;position:relative;">
<div style="width:100px;height:100px;
background-color: red;
margin:auto;
position:absolute;
left:50%;
top:50%;
margin-left:-50px;
margin-top:-50px;">
</div>
</div>
4、父元素 display:table-cell; vertical-align:middle; 子元素变成一个内联元素display:inline-block
<div style="width:200px;height:200px;
border:2px solid #000;
display:table-cell;
vertical-align:middle;
text-align: center;">
<div style="width:100px;height:100px;
background-color: red;
display:inline-block">
</div>
</div>
5、父元素 display:flex; justify-content:center align-items:center,子元素自动居中 (伸缩盒布局)
<div style="width:200px;height:200px;
border:2px solid #000;
display:flex;
justify-content:center;
align-items:center;">
<div style="width:100px;height:100px; background-color: red;"></div>
</div>