水平居中的方式
垂直居中的方式
水平居中
1.水平居中: 行内元素解决方案
只需要将行内元素包裹在一个属性为block的父级元素中,并把这个父级元素添加如下属性即可:
试用元素:
文字、链接、其它inline或者inline-*类型的元素(如 inline-block,inline-table,inline-flex)实例:
2.水平居中: 块级元素解决方案
对于块级元素( display:block )来说,我们需要将它的外边距(即 margin-left和margin-right )设置为auto,即可实现块级元素的居中。
|
|
实例:
|
|
3.水平居中: 多个块状元素解决方案
如果页面里有多个块状元素需要水平排列居中,可以将元素的display属性设置为inline-block,并且把父元素的text-align属性设置为center即可实现。
实例:
|
|
|
|
4.水平居中:多个块级元素解决方案(使用flexbox布局实现)
使用flexbox布局,只需要把待处理的块状元素的父元素添加属性display:flex及justify-content:center即可
实例:
|
|
|
|
垂直居中
1.垂直居中:单行的行内元素解决方案
当一个行内元素,即inline,inline-*类型的元素需要居中的话,可以将它的line-height设置为父元素的高度,即可实现垂直居中的效果。
实例:
|
|
2.垂直居中:多行的行内元素解决方案( Inline-Block )
组合使用display:table-cell和vertical-align:middle属性和和一个伪元素让内容块处于容器中央来定义需要居中的元素的父容器元素生成效果.
|
|
优点:
- 高度可变
- 内容溢出会将父元素撑开。
- 支持跨浏览器,也适应于IE7。
缺点:
- 需要一个容器
- 水平居中依赖于margin-left: -0.25em;该尺寸对于不同的字体/字号需要调整。
- 内容块宽度不能超过容器的100% - 0.25em。
3.垂直居中:负外边距(Negative Margins)
如果块元素尺寸已知,可以通过以下方式让内容块居中于容器显示:
外边距margin取负数,大小为width/height(不使用box-sizing: border-box时包括padding,)的一半,再加上top: 50%; left: 50%;。即:
|
|
测试表明,这是唯一在IE6-IE7上也表现良好的方法。
优点:
- 良好的跨浏览器特性,兼容IE6-IE7。
- 代码量少。
缺点:
- 不能自适应。不支持百分比尺寸和min-/max-属性设置。
- 内容可能溢出容器。
- 边距大小与padding,和是否定义box-sizing: border-box有关,计算需要根据不同情况。
4.垂直居中: 变形(Transforms)
内容块定义transform: translate(-50%,-50%)必须带上浏览器厂商的前缀,还要加上
top: 50%; left: 50%;
|
|
优点:
- 内容可变高度
- 代码量少
缺点:
IE8不支持
属性需要写浏览器厂商前缀
可能干扰其他transform效果
某些情形下会出现文本或元素边界渲染模糊的现象
5.垂直居中:表格单元格( Table-Cell )
总的说来这可能是最好的居中实现方法,因为内容块高度会随着实际内容的高度变化,浏览器对此的兼容性也好。最大的缺点是需要大量额外的标记,需要三层元素让最内层的元素居中。
|
|
|
|
优点:
高度可变
内容溢出会将父元素撑开。
跨浏览器兼容性好。
缺点:
需要额外html标记
6.垂直居中: 利用Flexbox实现垂直居中
这是CSS布局未来的趋势。Flexbox是css3新增属性,设计初衷是为了解决像垂直居中这样的常见布局问题.
记住Flexbox不只是用于居中,也可以分栏或者解决一些令人抓狂的布局问题。
|
|
优点:
- 内容块的宽高任意,优雅的溢出。
- 可用于更复杂高级的布局技术中。
缺点:
- IE8/IE9不支持。
- Body需要特定的容器和CSS样式。
- 运行于现代浏览器上的代码需要浏览器厂商前缀。
- 表现上可能会有一些问题。
7.绝对居中( Absolute Centering ) 强烈推荐
我们经常用margin:0 auto来实现水平居中,而一直认为margin:auto不能实现垂直居中……实际上,实现垂直居中仅需要声明元素高度和下面的CSS:
居中方式:
内容块的父容器设置为position:relative,使用上述绝对居中方式,可以使内容居中显示于父容器。