实现问题的方式永远不只一种,这里也是根据一个经常会用到的需求来做一个小结,下面列出了5种能够让一个盒子水平垂直居中的方法,也是在提醒自己在工作当中要随时记得发散思维,不要太固化,提高自己灵活解决问题的能力,问题很简单,就是实现如图效果:
下面上代码:
方法一、最传统的方法
1 | <!DOCTYPE html> |
大体实现思路就是先设置父盒子为相对定位,然后设置子盒子为绝对定位,设置其left和top都为50%,然后再设置margin-top
和margin-left
为它们各自高和宽的一半即可,这一个方法不足的地方是必须需要先知道子盒子的宽高,设置了居中还得靠js来获取就有点兴师动众了,看下面的方法
方法二、巧妙的运用了margin:auto
1 | <!DOCTYPE html> |
大体实现思路就是先设置父盒子为相对定位,然后设置子盒子为绝对定位,设置其left、right、top、bottom
都为0,再设置margin:auto
即可;
方法三、利用C3属性transform
1 | <!DOCTYPE html> |
这一点实现思路跟方法一差不多,但是弥补了方法一的缺陷,不需要提前知道子盒子的宽高了,兼容性这块兼容主流的,当然ie6/7还是需要传统解决的
方法四、利用flex布局
1 | <!DOCTYPE html> |
大体实现思路就是只需要设置父盒子display为flex,然后再设置其justify-content: center;
(主轴方向对齐,可以调整子元素在主轴方向上的对齐方式)align-items: center;
(定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式);
扩展性较强,移动端常用;
方法五、flex布局结合margin:auto
1 | <!DOCTYPE html> |
大体实现思路也是先设置父盒子display:flex
,然后再设置子盒子margin:auto
即可,扩展性较强,移动端常用;
附加一个图片水平垂直居中
1 | <!DOCTYPE html> |
主要是指定父盒子为display: table-cell;
然后设置text-align: center;vertical-align: middle;
即可
结语
当然可能还有一些方式可以实现,这里只是记录下,有需要的朋友可以参考!