CSS垂直居中的若干冷门方案

2017-05-22

垂直居中是常见的CSS需求,通常的做法有以下几种:

以上常见方案,根据实际情况灵活应用即可,这里不做详细讨论。但总有些开发人员脑洞大开,想出一些另辟蹊径的垂直居中方案,下面来盘点一下这些鬼畜的解决方案。


优雅矜持方案一:

top: calc(100% - 50px);

方案一

这本应该是最简洁优雅的解决方案,鬼畜的地方在于,有些浏览器(比如微信)就是不支持calc,于是被迫通过JS去实现类似calc的效果。


不明觉厉方案二:

方案二

其实这个方案兼容性非常好,但是新手往往不理解其中原理,因此常在前端面试中被提及。

水平居中最常用的“margin: auto”,right和left默认都是0,所以浏览器根据“margin:
 auto”就给元素添加左右相等的外边距,实现水平方向的居中。在垂直方向也是一样道理,在父元素和子元素都设置了高度和宽度的情况下,把top和bottom都设置成0,“margin:
 auto”也能在上下分别添加一样高度的外边距,实现垂直居中的效果。


不为人知方案三:

writing-mode:vertical-lr方案三这个是真的“冷门”了,几乎没有见到有人用到生产环境里,甚至许多前端开发连writing-mode属性都没听说过。但兼容性还挺好,IE8以上都支持(IE7以下还可以用-ms-writing-mode:tb-lr),各大浏览器也都能写兼容。


 writing-mode原本只是用于文字排版。vertical-lr是垂直排版从左往右,vertical-rl是垂直排版从右往左。改变了文字的排版方向,原本用于横向居中的代码,竟然也能在垂直方向上生效了。块级元素使用margin:auto,图文和文字使用text-align:center。


本文未经许可禁止转载,如需转载关注微信公众号【工程师加一】并留言。