figcaption 在图中不算作 space 吗?

Does figcaption not count as space inside a figure?

TL;DR:是的,我“遗漏了一些明显的东西”。抱歉。

将图像放在图形中效果很好,所有边框都很好地嵌套:

但是当我添加一个图形标题时,图像的大小保持不变并且溢出图形:

这就像 "height: 100%" 因为图像占了图形的 100%,忽略图形说明

我在 Firefox 和 Chrome 中得到相同的行为。

忽略任何横向问题;我去掉了那个代码。

这真的是它应该的行为方式吗,还是我遗漏了一些明显的东西?

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
        <title>Stack Exchange Logo</title>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <style>
                * { box-sizing: border-box; border-style: solid; padding: .1em; }
                figure { height: 30em; width: 45%; }
                figure>img { width: auto; height: 100%; border-color: red; }
        </style>
</head>

<body>
<figure>
        <figcaption>Stack Exchange Logo</figcaption>
        <img alt="SE logo" src="https://pbs.twimg.com/profile_images/1213884858/apple-touch-icon_400x400.png" />
</figure>
</body>
</html>

这就像 "height: 100%" 因为图像占据了 100% 的图形,忽略了 figcaption。

是的,没错。

您的 figcaption 占用 space 除非您使用 position:absolute. 将其从流中删除您已经定义了 figure 的高度,并告诉您的 img 取这个高度的 100%,就是这样。它根本没有“忽略”figcaption。如果它是父级,你告诉它的高度等于 100%。你的 img 如何占据 figure 的 100% 高度并且仍然包含在你的 figure 中,如果你在你的 figure 中添加另一个元素,它也将占据身高?

根据要求忽略您的宽度问题,假设您需要给您的 figure 定义高度,请按如下方式定义您的高度:

* { box-sizing: border-box; border-style: solid; padding: .1em; }
figure { height: 30em; width: 45%; }
figure>img { width: auto; height: 95%; border-color: red; }
figcaption {height:5%;}

这是因为你的 CSS 个单位。 em 等于当前 font-size。这是一个可扩展的单元,但不是你想要的。您的 parent 应该可以根据其中的内容 随心所欲地扩展 以提高响应能力。 看这里

figure { height: 30em; width: 45%; }

你的身材标签有宽度,不管是什么,你在这里做错的是你把标签封起来了。您允许 45% 宽度但限制高度。然后你做错了。

figure>img { width: auto; height: 100%; border-color: red; }

正在使图像缩放到全高。这就是为什么由于 parent div 的 bounded-ness 和这张图片的 height:100% 你会看到图片正在消失或溢出图形的原因。您应该允许 parent 独立缩放,并为改变外观的 child 元素定义宽度。

综上所述,综合考虑,你明白了

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
        <title>Stack Exchange Logo</title>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <style>
                 * { box-sizing: border-box; border-style: solid; padding: .1em; }
                figure { height: auto; width: 45%; }
                figure>img { width: 100%; height: 100%; border-color: red; }
        </style>
</head>

<body>
<figure>
        <figcaption>Stack Exchange Logo</figcaption>
        <img alt="SE logo" src="https://pbs.twimg.com/profile_images/1213884858/apple-touch-icon_400x400.png" />
</figure>
</body>
</html>