为什么CSS的vertical-align: middle公式不起作用?来自 MDN 文档的那个

问题描述 投票:0回答:1

img,
span,
body {
  display: inline-block;
  font-family: Arial;
  padding: 0px;
  margin: 0px;
  vertical-align: middle;
}
img {
  vertical-align: middle;
}
span {
  background-color: blue;
  font-size: 36px;
}
<body>
  <img src="https://placehold.co/200" />
  <span>Sample Text</span>
</body>

我很抱歉问这个秘密知识,我的帐户已经因为问这个而被CIA删除了3次,但这不会阻止我。

vertical-align:middle
,引用文档:

"middle - 将元素的中间与基线加上父级 x 高度的一半对齐。 "

据此,在我的代码中,图像样式中的“vertical-align: middle”含义如下:

父级 x 高度的一半 (20px / 2 = 10px)

加号(+)

100 px(图像的垂直中点)

等于 (=)

110 像素。

我说得对吗?

但它不是这样工作的:

这是图像证明,您也可以运行代码片段并亲自查看。实际上它是 104 像素偏移,而不是 110 像素!

这究竟是怎么回事?

html css alignment vertical-alignment text-alignment
1个回答
0
投票

它正在做它应该做的事情。您正在测量子跨度的 x 高度,这是不正确的。绘制的基线也不正确,因为它应该是父级的基线,而不是跨度。

“middle - 将元素的中间与基线加上 parent 的 x 高度的一半对齐。”

如下所示,我添加了一个额外的小写“x”来显示父级的基线,其中您可以看到红线位于“x”的中间,这是parent加上的基线parent 的 x 高度的一半。

img,
span,
body {
  display: inline-block;
  font-family: Arial;
  padding: 0px;
  margin: 0px;
  vertical-align: middle;
}

img {
  vertical-align: middle;
}

span {
  background-color: blue;
  font-size: 36px;
}


/*Below are just for demo purpose, and won't affect the result*/
body {
  position: relative;
  text-wrap: nowrap;
   ::after {
    position: absolute;
    content: " ";
    width: 100%;
    height: 1px;
    background-color: red;
    top: 50%;
    left: 0;
  }
}
x
<img src="https://placehold.co/200" />
<span>Sample Text</span>

© www.soinside.com 2019 - 2024. All rights reserved.