由于工作时间太忙加上大长假很久没有更新了。
接下来更新一下如何用css居中元素,原文链接《Seven-Ways-of-Centering-With-CSS》。
七种元素居中的方法
居中html元素在网页开发似乎看起来挺简单的。但是在某些案例中,复杂的布局会经常消除一些解决方法,使得网页开发人员特别的头痛。
相对垂直居中,水平居中就略显得简单些,但同时要解决两者就有难度了。在这响应式设计的时代,我们很少能准确的知道元素的高度跟宽度,因此导致很多方案失效。据我所知,CSS至少有6种居中元素的方法。我将用以下的基础代码,讲解从最简单最好实现的到复杂的方法:
| 1 | <div class="center"> | 
鞋子图片会改变,但都会保持在500px X 500px 的大小。HSL colors会使背景图片保持一致。
使用text-align水平居中

有时显而易见的解决方案是最好的选择。
| 1 | div.center { | 
这个方案并不能使图片垂直居中:你需要在<div>添加padding或者给内容添加margin-top跟margin-bottom使得内容与容器有一定的高度。
使用margin居中:auto

又一次主要是针对水平居中,跟上面的text-align同样具有局限性
| 1 | div.center { | 
注意一下display: block,是其属性使得margin: 0 auto生效的。
table-cell 居中
使用display: table-cell,而不是tabel标签;可以对水平跟垂直居中同时有效,但是需要添加额外的元素作为容器
| 1 | <div class="center-aligned"> | 
The Css
| 1 | .center-aligned { | 
注意宽度width: 100%,是为了使其<div>不发生折叠,还有外部容器需要添加高度使其内容垂直居中。可以尝试给html和body设置高度,其内容元素同样也可以在body垂直居中。可以正常的运行在IE 8+浏览器。
绝对居中(Absolute Centering)

有一种跨浏览器支持的方案,但是唯一的缺点就是需要在外部容器声明其高度height
| 1 | .absolute-aligned { | 
使用translate居中

Chris Coiyer 提出了一种能同时支持水平居中跟垂直居中的《新方案》
| 1 | .center { | 
同时也带来了以下几点缺点:
- CSS transform 会要求在不同的浏览器添加浏览器前缀; 
- 不能在比较老的IE浏览器兼容(IE 8及以下版本); 
- 外部容器将需要设置高度(或其他方式),并且不能从处于绝对位置的内容获取任何高度; 
- 如何内容包含文本,当前浏览器合成技术也会使已发生转换的文本模糊。 
Flexbox 居中

一旦属性差异性以及浏览器前缀的问题逐渐消失,这种解决方案将会成为主流方案。
| 1 | .center { | 
在许多方面flexbox是最简单的解决方案,但有一个缺点的是新旧两种语法以及早期版本的IE浏览器不支持(尽管使用display:table-cell可以作为降级方案)。
如今的规范已经确定下来,并且现代的浏览器也支持了,具体的使用方法可以参考《flexbox layout and its uses》
使用calc居中

在某些方面比flexbox更灵活:
| 1 | .center { | 
非常简单,calc允许你基于当前页面的布局进行计算。在上面的计算中,50%是容器元素的中心点,但是仅仅使用50%会使图片的左上角对其<div>的中心。我们需要将图片的宽高同时移回一半。计算方式如下:
| 1 | top: calc(50% - (40% / 2)); | 
在如今的浏览器,你会发现这种解决方案更适合内容的宽高为固定尺寸:
| 1 | .center img { | 
详细的calc使用方法可以查看:Layout Math with CSS: Understanding calc
这种解决方案跟flexbox一样有许多缺点:当代浏览器能很好的支持该方案,但是在早期的浏览器还是还是需要浏览器前缀,并且不支持IE 8
| 1 | .center img { | 
 
          