vertical-align实现垂直居中的坑

在实际开发中,经常会有元素水平、垂直居中的需求。当子元素、父元素的高度均可变时,使用flex真是不二之选,但flex在老旧浏览器中不兼容,因此,这里介绍一种使用vertical-align、inline-block实现垂直居中的方法。

请看下方代码:

<style>
.wrapper {
  height: 200px;
  background-color: lightgreen;
}
.wrapper:before {
  content: '';
  display: inline-block;
  width: 0;
  height: 100%;
  vertical-align: center;
}
.content {
  display: inline-block;
  width: 100%;
  height: 100px;
  vertical-align: center;
  background-color: lightcoral;
}
</style>
<body>
  <div class='wrapper'>
    <div class='content'></div>
  </div>
</body>

在浏览器中打开,结果如下图:

juzhong.png

然后,我们发现,垂直方向已经实现了居中,而且这种方法的兼容性极好,IE8以上的全部兼容,并且无需修改dom结构,父、子元素的高度均为可变,另外,子元素使用inline-block,还顺带触发了BFC,虽然不一定需要。

而如果实在需要兼容远古时代的IE6,可以不使用 :before伪类,直接在父元素里面加上一个子元素替代:before

关于此方法的理论解释,这篇博文有提到:vertical-align实现垂直居中,而她的实现,还不完整,于是便有了我这篇博文。还请继续往下翻阅。

然而... ...细心的你一定发现了,红色方块(子元素)左侧离父元素的左边框有间隙。经过各种排查,却发现并没有任何margin或者padding... ...

这间隙,便是今天要说的 “坑”
下面将解释

行内块元素之间的默认间距

在遇到这个问题的时候,脑海里一闪而过,想起以前张鑫旭博客上的一篇文章:去处inline-block元素间间距的N种方法
于是乎,将问题判定为是两个inline-block的默认间距。根据张老师博客中提供的N种方法,我从中挑选了一种兼容性好,且容易实现的方式。
具体如下:

<style>
.wrapper {
  height: 200px;
  background-color: lightgreen;
  font-size: 0; /* 消除inline-block间的间隙 */
  -webkit-text-size-adjust:none; /* 解除移动端最小字体为12px的限制  */
}
.wrapper:before {
  content: '';
  display: inline-block;
  width: 0;
  height: 100%;
  vertical-align: center;
}
.content {
  display: inline-block;
  width: 100%;
  height: 100px;
  vertical-align: center;
  background-color: lightcoral;
  font-size: 12px; /* 需要重新设置字体 */
}
</style>
<body>
  <div class='wrapper'>
    <div class='content'></div>
  </div>
</body>

上方带有注释的三句代码即为修复之后的代码,在浏览器中打开,一切正常...


juzhong2.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,796评论 1 92
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 8,204评论 3 30
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,614评论 0 26
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,512评论 0 6
  • 女人美丽如花,柔情似波,清新如茶,丰富如歌……作为女人,不管你属于哪种类型,清新淡雅也罢,聪明美丽也罢,真诚善良也...
    纳容浅陌阅读 865评论 0 0