vertical-align居中血案

问题

图片和文字混排,给容器设置了vertical-align不能垂直居中

<div class="container">
  <span class="img"></span> 
  <span class="text-container">
    <span class="main-text">sgss</span>
    <span class="sub-text">dssgssl</span>
  </span>
</div>
.container {
  background: tomato;
  vertical-align: middle;
}
.img {
  display: inline-block;
  background-image: url('http://demos.orionorigin.com/grand-popo/01/wp-content/uploads/2016/10/shield.svg');
  height: 40px;
  width: 40px;
  background-size: cover;
}
.text-container {
  display: inline-block;
}
.main-text, .sub-text {
  display: block;
}

须知原理

1. css boxes

  • block box
  • line box
  • inline-level box
image.png

source

2. vertical-align的作用原理

image.png
  • 红色: box border
  • 绿色: text-box border
  • 蓝色: baseline
    设置vertical-align的值,触发不同的计算,确认text-box中心的摆放位置
    默认是baseline

3. 同一个元素内共享一个baseline

4. vertical-align属性只对line box和inline-level box生效, 且不可继承

5. img的默认摆放规则

img默认摆放也是在baseline,意味着,img的下边界位于baseline

image.png

解决

.img.text-container都加上vertical-align: middle.

原因

  • .img进行vertical-align: middle使.img垂直居中
  • .text-container进行vertical-align: middle, 使.text-container的中心垂直居中

不能直接对.container进行{ display: inline-block; vertical-align: middle }居中么?

不可以,因为vertical-align不可继承

变种

<div class="container middle">
  <span class="img middle"></span> 
  ssssdfdf
  </div>
.container {
  display: inline-block;
  background: tomato;
}
.img {
  display: inline-block;
  background-image: url('http://demos.orionorigin.com/grand-popo/01/wp-content/uploads/2016/10/shield.svg');
  height: 40px;
  width: 40px;
  background-size: cover;
}
.middle {
  vertical-align: middle;
}

以上是否可行?为何?

source

vertical-align-all-you-need-to-know
what-is-vertical-align

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,814评论 1 92
  • 有些东西我们经常用,但是我们却并不了解它的原理,所以一旦换了场景,好多东西就不知道该怎么用了。最近一直很纠结ver...
    朱小维阅读 5,020评论 8 34
  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 3,519评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 4,630评论 0 26
  • 最近几讲中我们谈到了学习背后的规律:学习一定要积极主动;学习要重复,没有重复的学习我们不可能把它转化为内在的能力;...
    李晓峰Jeffrey阅读 492评论 0 0