水平居中
<div class="parent">
<div class="child">这里都是child不定宽高的解决方案</div>
</div>
- 方案一:
inline-block
+ text-align
.parent{ text-align:center; }
.child{ display:inline-block; }
- 优点:方法简单,兼容性也不错。
- 缺点:1、
text-align:center
会导致文本也居中,可能需要额外处理;2、IE7-不支持inline-block
,可以用*display:inline
和*zoom:1
模拟。
- 方案二:
table
+ margin
.child{ display:table; margin:0 auto; }
- 优点:只需要设置child,兼容性也不错。
- 缺点:IE7-不支持
display:table
,可以把HTML结构换成table。
- PS:可以将
display:table
换成display:inline-block
。
- 方案三:
position
+ translate
.parent{ position:relative; }
.child{ position:absolute; left:50%; transform:translateX(-50%); }
- 优点:绝对定位元素脱离文档流,因此该居中的元素不会对其他元素产生影响。
- 缺点:
transform
是CSS3属性,因此IE8-不支持,而且不同的浏览器需要加上其私有前缀。
- 方案四:
flex
+ justify-content
.parent{ display:flex; justify-content:center; }
- 优点:只需要设置parent。
- 缺点:IE8-不支持
flex
。
- PS:可以把
justify-content:center
换成margin:0 auto
。
垂直居中
<div class="parent">
<div class="child">这里都是child不定宽高的解决方案</div>
</div>
- 方案一:
table-cell
+ vertical-align
.parent{ display:table-cell; vertical-align:middle; }
- 优点:1、方法简单,兼容性也不错;2、只需要设置parent。
- 缺点:IE7-不支持
display:table-cell
,可以把HTML结构换成table。
- PS:
vertical-align
只能用于行内元素和table元素。
- 方案二:
position
+ translate
.parent{ position:relative; }
.child{ position:absolute; top:50%; transform:translateY(-50%); }
- 方案三:
flex
+ align-items
.parent{ display:flex; align-items:center; }
- 优点:只需要设置parent。
- 缺点:1、IE8-不支持
flex
;2、IE10-不支持align-items
,且不同浏览器要加私有前缀。
- PS:可以把parent中
align-items:center
去掉,在子元素中添加align-self:center
,但IE10-也不支持align-self
。
水平垂直居中
<div class="parent">
<div class="child">child不定宽高</div>
</div>
.parent{ display:table-cell; vertical-align:middle; text-align:center; }
.child{ display:inline-block; }
.parent{ position:relative; }
.child{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); }
.parent{ display:flex; align-items:center; justify-content:center; }
网友评论